0. 환경
macbook-pro 13” 2012 mid / 10GB
tomcat7
교재: Head First Servlet/Jsp, 한빛미디어, 2012
1. 학습목표
1) ServletContext 초기화 파라미터
2) 서블릿 속성 생존범위
3) 웹 컨테이너 요청 처리 모델
4) 웹 컨테이너 생명주기 이벤트 모델
5) ResquestDispacher 매커니즘
2. 서블릿 초기화 파라미터
- 서블릿도 초기화 파라미터가 존재
- Container가 서블릿을 초기화할 때 단 한번만 초기화 파라미터를 읽음
- 이름/값 쌍이 ServletConfig안에 기록시 서블릿이 다시 배포되지 않는 한 DD를 수정해도 바뀌지 않음
실행 흐름
- Container는 DD를 읽음
- Container는 새로운 ServletConfig 인스턴스 생성 (서블릿당 하나씩)
- 서블릿 생성자에서는 이 메소드를 호출할 수 없음
- Container는 init-param에 있는 값들을 이름-값 쌍으로 읽음
- Conatiner는 ServletConfig 객체에 이름-값으로 된 초기화 파라미터 설정
- Container는 XXXServlet.class 인스턴스 생성
- Container는 ServletConfig의 참조를 인자로 Servlet의 init() 메소드 호출
ServletConfig
초기화 파라미터에 접근할 수 있는 능력
javax.servlet.ServletConfig
public abstract interface ServletConfig {
// context정보 (Servlet 설정정보)를 담고 있는 ServletContext를 반환
public abstract ServletContext getServletContext();
public abstract String getInitParameter(String);
public abstract Enumeration getInitParameterNames();
public abstract String getServletName();
}
DD (Web.xml)
<servlet>
<servlet-name>Tests</servlet-name>
<servlet-class>TestInitParams</servlet-class>
<!-- DD의 <servlet>항목 안에 <init-param>으로 작성 -->
<init-param>
<param-name>adminEmail</param-name>
<param-value>dec7@abc.com</param-value>
</init-param>
</servlet>
Servlet 코드
// ServletConfig getServletConfig ();
// 모든 servlet은 상속받은 getServletConfig() 메소드를 가짐
out.println(getServletConfig().getInitParameter("adminEmail"));
3. 컨텍스트 초기화 파라미터
모든 웹 어플리케이션에서 이용할 수 있음 (JSP, Servlet)
ServletContext와 ServletConfig는 다른 객체로 다른 이름공간을 이용
실행흐름
- Container는 DD를 읽음
항목을 읽고 각각의 이름-값 쌍을 만듦 - Container는 ServletContext 객체를 생성
- Container는 생성한 컨텍스트 초기화 파라미터 이름-값에 대한 참조를 init() 인자로 전달
- Web Application에 있는 모든 Servlet과 JSP는 ServletContext에 접근 가능
ServletContext
javax.servlet.ServletContext
public abstract interface jServletContext {
public static final String TEMPDIR = "javax.servlet.context.tempdir";
public static final String ORDERED_LIBS = "javax.servlet.context.orderedLibs";
public abstract String getContextPath();
public abstract jServletContext getContext(String);
public abstract int getMajorVersion();
public abstract int getMinorVersion();
public abstract int getEffectiveMajorVersion();
public abstract int getEffectiveMinorVersion();
public abstract String getMimeType(String);
public abstract Set getResourcePaths(String);
public abstract URL getResource(String) throws MalformedURLException;
public abstract InputStream getResourceAsStream(String);
public abstract RequestDispatcher getRequestDispatcher(String);
public abstract RequestDispatcher getNamedDispatcher(String);
public abstract jServlet getServlet(String) throws jServletException;
public abstract Enumeration getServlets();
public abstract Enumeration getServletNames();
public abstract void log(String);
public abstract void log(Exception, String);
public abstract void log(String, Throwable);
public abstract String getRealPath(String);
public abstract String getServerInfo();
public abstract String getInitParameter(String);
public abstract Enumeration getInitParameterNames();
public abstract boolean setInitParameter(String, String);
public abstract Object getAttribute(String);
public abstract Enumeration getAttributeNames();
public abstract void setAttribute(String, Object);
public abstract void removeAttribute(String);
public abstract String getServletContextName();
public abstract jServletRegistration.Dynamic addServlet(String, String);
public abstract jServletRegistration.Dynamic addServlet(String, jServlet);
public abstract jServletRegistration.Dynamic addServlet(String, Class);
public abstract jServlet createServlet(Class) throws jServletException;
public abstract jServletRegistration getServletRegistration(String);
public abstract Map getServletRegistrations();
public abstract FilterRegistration.Dynamic addFilter(String, String);
public abstract FilterRegistration.Dynamic addFilter(String, Filter);
public abstract FilterRegistration.Dynamic addFilter(String, Class);
public abstract Filter createFilter(Class) throws jServletException;
public abstract FilterRegistration getFilterRegistration(String);
public abstract Map getFilterRegistrations();
public abstract SessionCookieConfig getSessionCookieConfig();
public abstract void setSessionTrackingModes(Set);
public abstract Set getDefaultSessionTrackingModes();
public abstract Set getEffectiveSessionTrackingModes();
public abstract void addListener(String);
public abstract void addListener(EventListener);
public abstract void addListener(Class);
public abstract EventListener createListener(Class) throws jServletException;
public abstract descriptor.JspConfigDescriptor getJspConfigDescriptor();
public abstract ClassLoader getClassLoader();
public abstract void declareRoles(String...);
public abstract String getVirtualServerName();
}
DD (Web.xml)
<servlet>
<servlet-name>Tests</servlet-name>
<servlet-class>TestInitParams</servlet-class>
</servlet>
<!-- 전체 어플리케이션을 위한 항목 / <web-app> 항목에 포함 -->
<context-param>
<param-name>adminEmail</param-name>
<param-value>dec7@abc.com</param-value>
</context-param>
Servlet Code
out.println ( getServletContext().getInitParameter("adminEmail") );
4. Listener
컨텍스트 초기화가 이루어질 때 파라미터를 읽은 뒤 특정 코드를 실행시키고 싶을 때
실행흐름
- Container는 DD를 읽음
- context-param, listen
- Container는 Application에 공유할 ServletContext 객체 생성
- Container는 컨텍스트 초기화 파라미터의 이름-값 String쌍을 만듦
- Container는 String쌍을 ServletContext객체에 설정
- Container는 ServletContextListener를 상속받아 만든 Class를 인스턴스화 시킴
- Container는 contextInitialized()메소드를 호출하고 인자로 ServletContextEvent를 전달
- ServletContextEvent 객체를 이용하여 ServletContext에 접근
- ServletContext로 컨텍스트 초기화 파라미터 값을 읽음
- Listener가 ServletContextEvent에게 ServletContext에 대한 참조를 요청
- Listener가 ServletContext에게 초기화 파라미터의 값을 요청
- Listener는 초기화 파라미터를 이용해 객체를 생성
- Listener는 ServletContext.setAttribute(“newObj”, obj)를 이용하여 생성된 객체를 설정
- Container는 새로운 Servlet을 생성
- 초기화 파라미터로 ServletConfig 생성
- ServletContext에 대한 참조를 설정
- Servlet init() 메소드 호출
- Servlet은 요청을 받고 ServletContext에게
Written with Dec7.
댓글 없음:
댓글 쓰기