본문 바로가기
개발 지식/JSP & Servlet

[JSP & Servlet] 서블릿 파라미터(init-Param, context-param)

by 에르주 2020. 8. 7.
반응형

세번째로 서블릿 파라미터와 스코프에 대해서 이야기 해보려 한다.

크게 파라미터는 2개로 나뉠 수 있다.

 

1) init- param

해당 파라미터 값은 지정해준 서블릿 내에서만 쓸 수 있는 값이다. 변수로 생각하자면 Private 지역변수와 유사하다고 생각할 수 있을 것 같다.

해당 선언은 web.xml에 <servlet> 태그 내에 위치하는데 다음 예시처럼 쓸 수 있다.

	<servlet>
		<servlet-name>TestServlet</servlet-name>
		<servlet-class>com.controller.TestServlet</servlet-class>
		
		
		<!-- init 파라미터는 해당 서블릿에서만 사용 가능하다. -->
		<init-param>
			<param-name>jdbc.driver</param-name>
			<param-value>oracle.jdbc.driver.OracleDriver</param-value>
		</init-param>
		
		<init-param>
			<param-name>filepath</param-name>
			<param-value>c:\\temp</param-value>
		</init-param>
		
	</servlet>

 

예시의 init-param을 보면 그 밑에 있는 <param-name>jdbc.dirve</param-name>은 TestServlet에서만 사용할 수 있는 파라미터 이다.

 

 

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//Init - param 값 받아오기
		String driver = getInitParameter("jdbc.driver");
		String filepath = getInitParameter("filepath");
		
		System.out.println(driver);
		System.out.println(filepath);
		
	}

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

 

TestServlet에서 getInitParameter(args) 메소드를 통해서 해당 값을 받아 올 수 있다.

 

<console 창>

 

임의의 서블릿 HelloServlet에서는 null값인 것을 알 수 있다.

 

 

2) context -param

context-param은 init-param 그 이상으로 전역 즉 모든 서블릿에서 사용할 수 있는 파라미터 값이다. 위에서 init-param이 지역변수라면 해당 파라미터는 전역변수라고 생각하면 될 것 같다.

그렇기 때문에 <context-param>은 어느 하나의 서블릿 태그안에 속하는 것이 아닌 독립적으로 추가해준다.

<!-- 해당 Context Param은 전역변수처럼 모든 서블릿에서 사용가능하다. -->

	<context-param>
		<param-name>userName</param-name>
		<param-value>ErJuer</param-value>
	</context-param>
	
	<context-param>
		<param-name>age</param-name>
		<param-value>29</param-value>
	</context-param>
	
	
	<servlet>
		<servlet-name>TestServlet</servlet-name>
		<servlet-class>com.controller.TestServlet</servlet-class>
	</servlet>
	
	<servlet>
		<servlet-name>HelloServlet</servlet-name>
		<servlet-class>com.controller.HelloServlet</servlet-class>	
	</servlet>

	<servlet-mapping>
		<servlet-name>TestServlet</servlet-name>
		<url-pattern>/TestServlet</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/HelloServlet</url-pattern>
	</servlet-mapping>
	

 

이 프로젝트에는 TestServelt과 HelloServlet이 있는데 각각 서블릿에서 다음과 같이 불러 올 수 있다.

 

<TestServlet>

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//ServletContext API는 ServletConfig의 getServletContext()를 이용한다.
		ServletContext sc = getServletContext();
		String name = sc.getInitParameter("userName");
		String age = sc.getInitParameter("age");
		
		System.out.println("TestServlet 이름은 : " + name + " 나이는 : " + age);
		
	
	}

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

}

 

<HelloServlet>

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ServletContext sc = getServletContext();
		String name = sc.getInitParameter("userName");
		String age = sc.getInitParameter("age");
		
		System.out.println("HelloServlet 이름은 : " + name + " 나이는 : " + age);
	}

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

}

  

<console 출력>

 

서블릿 파라미터에 대해서 요약하자면 

 

   - 웹 어플리케이션 전반적인 환경 설정 (서블릿 매핑 필요)

   - 임의의 값을 Key과 Value로 저장하고 서블릿에서 필요 할 때 Key를 이용해서 Value를 얻는 형태의 파라미터

   - Value 값이 변경 될 때 서블릿에서는 다시 컴파일이 필요하지만 web.xml에 설정하면 다시 컴파일을 할 필요가 없다.

 

의 특징들이 있으며

 

1) init-param

   ==> <init-param> 태그를 가능

   ==> 특정 서블릿에서만 사용가능

   ==> ServletConfig API의 getinitParameter(args)를 이용하여 불러 올 수 있다.

 

 

2) context-param

  ==> <context-param> 태그 가능

  ==> 모든 서블릿 사용 가능

  ==> SerlvetContext API의 getinitParamter(args)를 이용하여 불러올 수 있다.

 

끝.

 

 

반응형

댓글