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