서블릿 로딩과 초기화
* 서블릿 컨테이너는 처음 서블릿을 실행할 때 서블릿 객체를 생성한다. 그 이후 요청이 오게되면 이미 생성된 서블릿 객체를 그대로 사용한다.
* 웹 컨테이너가 서블릿 객체를 생성하고 init() 메소드를 호출하는 과정을 [서블릿 로딩] 과정이라고 하며, init() 메소드를 통해 서블릿의 초기화 작업을 수행한다.
1) init() 메소드 기본 구현
public void init(ServletConfig config) throws ServletException{ this.config = config;
this.init();
}
public void init() throws ServletException { }
* 서블릿 컨테이너는 서블릿을 초기화하기 위해 ServletConfig 파라미터를 갖는 init() 메소드를 실행하고, 이 메소드는 다시 파라미터가 없는 init() 메소드를 실행한다. 따라서 초기화가 필요한 서블릿은 파라미터가 없는 init() 메소드를 재정의하면 되는 것이다.
* 보통 초기화 작업은 시간이 오래 걸리기 때문에 , 처음 서블릿을 사용하는 시점보다 처음 웹 어플리케이션을 시작하는 시점에 초기화하는 것이 좋다. 이를 위해 web.xml 파일에 태그를 추가해 설정하거나 @WebServlet 태그에서 속성을 사용해 로딩값을 지정한다.
<!------ web.xml -------->
<servlet>
<servlet-name> 서블릿 이름 </servlet-name>
<servlet-class> 완전한 서블릿 클래스 </servlet-class>
<load-on-startup> 1 (로딩 순서, 계속 서블릿 추가될 때 값을 기준으로 오름차순으로 로딩) </load-up-startup>
</servlet>
<!------- @WebServlet ----------->
@WebServlet ( urlPattern="/hello", loadOnStartup=1 )
* 웹 어플리케이션을 시작할 때 서블릿을 로딩하면 웹 컨테이너를 구동하는 시점에서 서블릿 객체를 생성하고 init() 메소드를 실행한다.웹 어플리케이션 시작 시점에 커넥션 풀을 초기화하므로 JSP나 서블릿 코드에서 커넥션 풀을 사용할 수 있게 된다.
2) 초기화 파라미터
* 서블릿 코드를 직접 변경하지 않고 web.xml 파일에 <init-param> 태그를 이용해 서블릿을 초기화할 때 필요한 값을 전달한다.
* 서블릿 클래스에서 초기화 파라미터에 접근하려면 getInitParameter() 메소드를 사용한다.
* 즉, web.xml파일에 초기화 파라미터를 지정한 뒤, 서블릿 클래스에서 getInitParameter() 메소드를 이용해 접근한다.
* @WebServlet 애노테이션으로도 전달가능.
<!---------- web.xml ----------->
<servlet>
....
<init-param>
<param-name> 초기화 파라미터 이름 지정 </param-name>
<param-value> 초기화 파라미터 값 지정 </param-value>
</init-param>
... 그외 초기화 파라미터 추가 가능
</servlet>
<!---------- Class ---------------> /* 예제 : 초기화 파라미터를 이용해 커넥션 풀과 관련된 정보를 전달받는 클래스 */
...
private void loadDBDriver() {
String driverClass = getInitParameter("초기화 파라미터 이름");
.. Class.forName(driverClass); // getInitParaameter() 메소드를 이용해 초기화 파라미터 값을 읽어와, 이 값을 이용해 JDBC 드라이버 로딩
}
private void initConnectionPool() {
try { // getInitParameter()를 이용해 커넥션 생성시 사용할 url, 계정, 비밀번호를 초기화 파라미터에서 읽어온다.
String jdbcurl = getInitParameter("jdbcurl");
String username = getInitParameter("dbUser");
String pw = getInitParameter("dbPass");
....
} }
<!--------- @WebServlet 매핑시 --------->
@WebServlet(urlPatterns={"/hello", "/hello2"}
initParams={
@WebInitParam(name="파라미터 이름" value="파라미터 값"),
@WebInitParam(name="파라미터 이름2" value="파라미터 값2");
}
* 이를 이용하면 유지보수시 설정을 바꿀 깨 서블릿을 변경할 필요헚이 web.xml 파일에 추가한 초기화 파라미터 값을 변경하면 된다.
URL 패턴 매핑 규칙
* <url-pattern> 태그와 urlPattern 속성에서 사용할 수 있는 URL 패턴의 규칙
1) ' / '로 시작하고 ' /* '로 끝나는 url-pattern은 경로 매핑을 위해서 사용한다.
2) ' *. '로 시작하는 url-pattern은 확장자에 대한 매핑을 할 때 사용한다.
3) 오직 ' / '만 포함하는 경우 어플리케이션의 기본 서블릿으로 매핑한다.
4) 이 규칙 외, 나머지 다른 문자열은 정확한 매핑을 위해 사용된다.
* 예)
URL 패턴 |
매핑 서블릿 |
/exam/www/* |
Servlet1 |
/html/* |
Servlet2 |
/jsp |
Servlet3 |
*.bop |
Servlet4 |
서블릿 매핑 결과
요청 경로 |
일치 URL 패턴 |
요청 처리 서블릿 |
/exam/www/index.html |
/exam/www/* |
Servlet1 |
/exam/www/index.bop |
/exam/www/* |
Servlet1 |
/html |
/html/* |
Servlet2 |
/html/index.html |
/html/* |
Servlet2 |
/jsp |
/jsp |
Servlet3 |
/jsp/index.bop |
*.bop |
Servlet4 |
/index.bop |
*.bop |
Servlet4 |
'WEB > JSP Servlet' 카테고리의 다른 글
JDBC : 트랜잭션 (0) | 2016.12.06 |
---|---|
MVC 패턴과 모델 (0) | 2016.11.22 |
서블릿 : 기본 (0) | 2016.11.21 |
JDBC : 기초 (0) | 2016.11.21 |
커스텀 태그 : 기초, 태그 파일 (0) | 2016.11.05 |