JSP (5) Servlet 4

JeJune Lee·2021년 8월 25일
0

JSP

목록 보기
5/8

Servlet 초기화 parameter

특정 Servlet이 생성될 때 초기에 필요한 데이터들이 있다. 예를 들어 특정 경로 및 아이디 정보 등 이다. 이러한 데이터들을 초기화 파라미터라고 하며, web.xml에 기술하고 Servlet파일에서는 ServletConfig 클래스를 이용해서 접근(사용)한다.

위 사진과 같은 구조로 수행된다. 코드를 통해 알아보자.

web.xml (servlet)

<servlet>
  	<servlet-name>ServletInitParam</servlet-name>
  	<servlet-class>com.javalec.ex.ServletInitParam</servlet-class>
  	
  	<init-param>
  		<param-name>id</param-name>
  		<param-value>abcdef</param-value>
  	</init-param>
  	<init-param>
  		<param-name>pw</param-name>
  		<param-value>1234</param-value>
  	</init-param>
  	<init-param>
  		<param-name>path</param-name>
  		<param-value>C:\\javalec\\workspace</param-value>
  	</init-param>
  	
  </servlet>
  <servlet-mapping>
  	<servlet-name>ServletInitParam</servlet-name>
	<url-pattern>/InitParam</url-pattern>
  </servlet-mapping>

web.xml에 위 코드를 추가해주면 된다.

ServletInitParam.java

package com.javalec.ex;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletInitParam
 */
 
//@WebServlet("/ServletInitParam")
public class ServletInitParam extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
     
    public ServletInitParam() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
     
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet");
		
		String id = getInitParameter("id");
		String pw = getInitParameter("pw");
		String path = getInitParameter("path");
		
		response.setContentType("text/html; charset=EUC-KR");
		PrintWriter writer = response.getWriter();
		writer.println("<html><head></head><body>");
		writer.println("아이디 : " + id + "<br />");
		writer.println("비밀번호 : " + pw + "<br />");
		writer.println("path : " + path);
		writer.println("</body></html>");
		
		writer.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
     
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("doPost");
	}

}

출력

아이디: abcdef
비밀번호: 12345
path: C:\javalec\workspace

위처럼 출력되는 것을 볼 수 있다! 위 말고도 또 다른 방법이 존재한다. @webInitParam에 초기화 파라미터를 기술한 다음 사용 ServletConfig를 통해 데이터를 불러 올 수 있다.

위 구조 처럼 사용하면 된다. 당연히 여러 Servlet에서 사용하려면 첫번째 방법이 좋은 방법이 될 것이다.

웹어플리케이션 감시

웹어플리케이션의 생명주기(LifeCycle)를 감시하는 리스너(Listener)가 있습니다. 바로 ServletContextListener 이다. 리스너의 해당 메소드가 웹 어플리케이션의 시작과 종료 시 호출 된다. contextInitialized(), contextDestroyed())

첫번째 방법은 web.xml에 기술하는 것이다.

web.xml (context-param)

<context-param>
  	<param-name>id</param-name>
  	<param-value>abcdef</param-value>
  </context-param>
  <context-param>
  	<param-name>pw</param-name>
  	<param-value>1234</param-value>
  </context-param>
  <context-param>
  	<param-name>path</param-name>
  	<param-value>C:\javalec\workspace</param-value>
  </context-param>

context-param을 사용하면 된다. 그리고 Servlet에서 가져다 쓰면 끝이다.

ContextInitParam.java (doGet)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("doGet");
		
		String id = getServletContext().getInitParameter("id");
		String pw = getServletContext().getInitParameter("pw");
		String path = getServletContext().getInitParameter("path");
		
		response.setContentType("text/html; charset=EUC-KR");
		PrintWriter writer = response.getWriter();
		
		writer.println("<html><head></head><body>");
		writer.println("아이디 : " + id + "<br />");
		writer.println("비밀번호 : " + pw + "<br />");
		writer.println("path : " + path);
		writer.println("</body></html>");
		
		writer.close();
	}

위처럼 getServletContext().getInitParameter로 설정해두었던 초기 파라미터들을 가져와 볼 수 있다. 출력은 위랑 똑같다.

두번째는 리스너 클래스를 만들어 @WebListener를 추가하여 구현하는 것이다.

ContextListenerEx.java

package com.javalec.ex;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ContextListenerEx implements ServletContextListener{

	public ContextListenerEx() {
	}

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("contextDestroyed");
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("contextInitialized");
	}
	
}

웹리스너를 통해 클래스를 만들어주고 ServletContextListener인터페이스를 받는다. 그렇기 때문에 contextDestroyed, contextInitialized라는 추상메소드를 재정의 해주어야한다. 간단하게 출력해본 것이다.

출력

contextInitialized //생성될 때
contextDestroyed // 소멸할 때

오늘은 여기까지..

Servlet의 초기화 파라미터를 설정하는 방식과 웹 리스너를 다는 방식을 알아보았다. 알맞는 상황에 더 좋은 방식으로 사용하면 될 것이다.

profile
Being Server developer

0개의 댓글