세번째로 서블릿 파라미터와 스코프에 대해서 이야기 해보려 한다.
크게 파라미터는 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 창>
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)를 이용하여 불러올 수 있다.
끝.
'개발 지식 > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] 서블릿 요청 처리 (0) | 2020.08.09 |
---|---|
[JSP & Servlet] 서블릿 스코프(Scope) : Page, Request, Session, Application (0) | 2020.08.07 |
[JSP & Servlet] doGet, doPost 그리고 기타 메소드의 lifeCycle (0) | 2020.08.04 |
[JSP & Servlet] Servlet 이란 무엇일까? (0) | 2020.08.04 |
댓글