티스토리 뷰
서블릿의 생명주기와 동작 순서를 대략적으로 알아 봤으니 이제 잠깐 미뤄 두었던 ServletConfig에 대해 알아보도록 하겠습니다. Servlet의 init() method를 설명하면서 ServletConfig 객체를 인자로 받는다는 말을 했습니다.
ServletConfig 객체는 말 그대로 Servlet에 관한 설정 정보를 서블릿으로 넘겨주기 위하여 사용하는 객체입니다. 서블릿 안에 하드코딩하기를 원하지 않는 정보들이 이 안에 포함됩니다. 이 정보는 배포서술자나 어노테이션 안에 코딩되어 있습니다. 컨테이너는 이 정보를 이름-값 쌍의 문자열 객체로 읽어들이게 됩니다. 여기서는 adminEmail 정보가 저장되어 있는데요. init() method 안에서 초기화 된 이후에는 이 정보를 getServletConfig() method를 통해 얻은 ServletConfig 객체 내부의 getInitParameter() method를 통해 사용할 수 있게 됩니다. 이때 getInitParameter() 메소드 인자값은 para-name 값으로 설정한 문자열입니다.
ServletConfig 객체의 탄생 과정을 다시 보면 이렇습니다. 먼저 컨테이너가 servlet instance 생성 시점에서 해당 servlet에 배포서술자나 어노테이션을 통해 정의된 초기화 파라미터가 있는지를 살핍니다. 컨테이너는 이 초기화 파라미터에 있는 값을 이름/값 쌍의 문자열로 읽어들이고 ServletConfig 객체를 생성해서 파라미터 값을 저장합니다. 그리고 Servlet instance를 생성한 후 이 ServletConfig 객체를 init()메소드의 참조인자로 넘기게 됩니다. ServletConfig는 이때 부터 Servlet과 생사를 같이합니다. Servlet 객체가 소멸하면 참조 변수가 사라진 ServletConfig 역시 garbage collection의 대상이 됩니다.
servlet에 관한 정보를 저장하는 ServletConfig는 Servlet이 생성될 때 함께 만들어져서 servlet이 소멸되고 나면 함께 사라지게 됩니다. 그런데 만약 모든 웹 애플리케이션에서 이용해야 하는 정보 라면 ServletConfig 객체에 저장하는것은 소용이 없을 것입니다. 결국 모든 Servlet 마다 초기화 파라미터 값을 다 설정해야하고 수정할 때에는 모든 서블릿의 초기화 파라미터를 다 수정해야 되겠죠. 이 문제를 해결하기 위해서 컨텍스트 초기화 파라미터를 이용합니다.
init() method에 파라미터로 전달되는 ServletConfig 객체에는 ServeltContext에 접근 가능한 getServletContext() method가 있습니다. 따라서 servlet이 초기화를 거치게 되면 컨텍스트 초기화 파라미터에도 접근이 가능합니다.
컨텍스트(Context) 초기화 파라미터의 동작 방식은 서블릿 초기화 파라미터와 동일합니다. 다만 특정 하나의 서블릿만 사용하는 것이 아니라 모든 웹 애플리케이션이 사용할 수 있다는 차이만 존재합니다.
서블릿 초기화 파라미터와 마찬가지로 배포서술자 안에 코딩되어 있는 정보를 읽어와 이름-값의 문자열 쌍으로 만들어 ServletContext객체에 저장합니다. Servlet에서는 상속받은 getServletContext() method나 getServletConfig() method를 통해 얻은 config 객체에 들어있는 getServletContext() method를 이용해서 ServletContext에 접근 가능 합니다. 그런데 서블릿 초기화 파라미터와 다른 점은 컨텍스트 초기화 파라미터의 경우에는 @WebContextParam 과 같은 어노테이션이 존재하지 않는다는 것입니다. 따라서 어노테이션을 이용해서 ServletContext 객체에 저장되는 정보를 서술할 수는 없습니다. 대신 ServletContext에 setInitParam() method를 이용해 직접 정보를 코딩하는 클래스를 만들 수는 있을 것입니다.
'language > Servlet&JSP' 카테고리의 다른 글
속성, Attribute (0) | 2019.02.22 |
---|---|
ServletContextListener (0) | 2019.02.22 |
redirect / forward (0) | 2019.02.22 |
서블릿(servlet) 생명주기(lifecycle) (0) | 2019.02.22 |
JSP 동작 순서와 MVC 패턴 동작 (0) | 2019.02.15 |
- Total
- Today
- Yesterday
- Count
- 경고
- markov chain
- RESTful
- 자바스크립트개론
- 전략패턴
- 코딩의 기술
- 디자인패턴
- 마르코프 연쇄
- Warning
- 몰라서망신
- 크롬
- restful api
- DP
- was
- 동적계획법
- 클린코드
- 로그
- java
- GROUP BY
- 마르코프
- REST API
- 자바스크립트 개론
- 야근
- Markov
- html
- 유지보수
- CONVENTIONS
- 문장 생성기
- Spring in Action
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |