[Servlet] 초기화 파라미터

2020. 6. 10. 16:37 Java 관련/JSP,Servlet

초기화 파라미터


초기화 매개변수는 웹 페이지가 실행될 때 필요한 데이터를 전달해 준다. 그리고 초기화 매개 변수는 서블릿 프로그램이 처음 실행될 때 클라이언트가 아닌 서버로부터 넘겨받는 값이다.

웹 프로그램은 모든 실행 시작점이 웹 서버의 구동이다. 이때 web.xml 파일이 자동으로 로드된다.

여기에 초기화 매개변수를 등록해서 웹 페이지가 매개변수의 값을 읽어들인다.

이렇게 해서 서블릿을 재컴파일하지 않고서도 원하는 초기값을 웹 페이지에 전달할 수 있다.


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_01_Servlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

ServletConfig config = this.getServletConfig();

//ServletConfig 객체를 획득한다.

//실제로는 HttpServlet이 ServletConfig를 구현했기 때문에

//이렇게 객체를 획득할 필요 없이 this를 사용해도 무방하다.

String start = config.getInitParameter("start");

String end = this.getInitParameter("end");

//config 객체를 통해서도 this를 통해서도 초기화 매개변수를 획득할 수 있다.

int start_su = Integer.parseInt(start);

int end_su = Integer.parseInt(end);

//초기화 매개변수로 전달된 값은 문자열이므로 숫자로 변환한다.

int hap = 0;

for(int i = start_su; i <= end_su; ++i) 

hap += i;

//시작 수에서 끝 수까지의 총합을 구한다.

response.setContentType("text/html;charset=euc-kr");

//응답에 대한 MIME과 Encode를 설정한다.

PrintWriter out = response.getWriter();

//출력 객체를 생성한다.

out.println("<html><body><center>");

out.println(start_su + " ~ " + end_su + "사이의 합은 ");

out.println(hap + "입니다.");

out.println("</center></body></html>");

//결과를 출력한다.

out.close();

//출력 객체를 종료한다.

}

}


web.xml 파일에 서블릿을 등록하면서 다음과 같이 초기화 매개변수로 start와 end의 값을 등록한다. 등록되는 모든 데이터는 자료형이 String이다.

<servlet>

<servlet-name>My01</servlet-name>

<servlet-class>Round14_01_Servlet</servlet-class>

<init-param>

<param-name>start</param-name> // String start = config.getInitParameter("start");에서 start의 초기값은 '1'이다.

<param-value>1</param-value>

</init-param>

<init-param>

<param-name>end</param-name> // String end = this.getInitParameter("end");에서 end의 초기값은 '10'이다.

<param-value>10</param-value>

</init-param>

</servlet>

<servlet>

<servlet-name>My01</servlet-name>

<servlet-class>Round14_01_Servlet</servlet-class>

</servlet>


1. Servlet 초기화 파라미터의 종류


(1) 초기화 파라미터

처음 WAS가 기동될 때 읽어 들이는 파라미터값을 초기화 파라미터라고 합니다.

종류에는 1) 서블릿 초기화 파리미터 와 2) 컨텍스트 초기화 파라미터가 있습니다.


(2) 서블릿 초기화 파라미터(Servlet Initialize Parameter)

1) web.xml에 다음과 같이 기술하고

<servlet>

     <init-param><!-- 초기화 파라미터라고 불리는 설정 값을 지정할 때 사용한다.-->

          <param-name>AdminEmail</param-name><!-- 초기화 파라미터의 이름을 지정한다.-->

          <param-value>admin@admin.com</param-value><!-- 초기화 파라미터의 값을 지정한다.-->

     </init-param>

</servlet>


2) Servlet Code에서 

getServletConfig().getInitParameter("AdminEmail"));  와 같은 코드로 초기화 파라미터 값을 얻을 수 있습니다.

서블릿 초기화 파라미터는 컨텍스트 초기화 파라미터와 달리 서블릿에서만 읽어 들일 수 있습니다.

이 값들을 JSP에서 사용하기 위해서는 HttpServletRequest의 Attribute 속성을 이용해서 JSP로 모델 정보를 넘겨야 합니다.

example)

< TODO Servlet>

String AdminEmail = (String)getServletConfig.getInitParameter("AdminEmail");

request.setAttribute("AdminEmail",AdminEmail);

<TODO JSP>

String AdminEmail = (String)request.getAttribute("AdminEmail");


(3) 컨텍스트 초기화 파라미터(Context Initialize Parameter)

1) web.xml에 다음과 같이 기술하고

<context-param>

     <param-name>adminEmail</param-name>

     <param-value>admin@admin.com</param-value>

</context-param>

주의 : <context-param>은 <web-app> 하위에 존재하지 <servlet> 하위에 존재하지 않습니다.


2) Servlet혹은 JSP에서

getServletContext().getInitParameter("adminEmail");    

와 같은 코드로 코딩하면 값을 얻을 수 있습니다.


(4) 정리

정리하면. 서블릿 초기화 파라미터는 ServetConfig 에서 읽어들이며, ServletConfig는 서블릿 당 하나가 생성됩니다.

컨텍스트 초기화 파라미터는 ServetContext에서 읽어들이고, 웹 어플리케이션 당 하나가 생성됩니다.


즉 웹 어플리케이션 전체의 전역적인 파라미터 설정을 원한다면 컨텍스트 초기화 파라미터에 정의 하시면 되고,특정 서블릿에서 처리 하기 위한 어떤 값을, 즉 서블릿범위 정도에서 처리하기 위한 값을 정의 한다면 서블릿 초기화 파라미터를 사용하면 되겠습니다.


(5) 잘 정리된 표



출처: https://devbox.tistory.com/entry/Servlet-초기화-매개변수?category=574550 [장인개발자를 꿈꾸는 :: 기록하는 공간]