본문 바로가기
WEB/JSP Servlet

서블릿 : 초기화

by 노랑파랑 2016. 11. 22.
반응형




서블릿 로딩과 초기화

* 서블릿 컨테이너는 처음 서블릿을 실행할 때 서블릿 객체를 생성한다. 그 이후 요청이 오게되면 이미 생성된 서블릿 객체를 그대로 사용한다.

서블릿

* 웹 컨테이너가 서블릿 객체를 생성하고 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