-
컨텍스트 리스너에 대한 간단한 예제 소스프로그램/JAVA 2008. 4. 3. 16:28
Head First Servlet & JSP 책의 예제다.
---MyServletContextListener.java---
package com.example;import javax.servlet.*;
public class MyServletContextListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent event){
ServletContext sc = event.getServletContext();
String dogBreed = sc.getInitParameter("breed");
Dog d = new Dog(dogBreed);
sc.setAttribute("dog", d);
}
public void contextDestroyed(ServletContextEvent event){
}
}
--- Dog.java ---
package com.example;public class Dog{
private String breed;
public Dog(String breed){
this.breed = breed;
}
public String getBreed(){
return breed;
}
}
--- ListenerTester.java---
package com.example;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;public class ListenerTester extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException , ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("test context attributes set by listener<br>");
out.println("<br>");
Dog dog = (Dog)getServletContext().getAttribute("dog");
out.println("Dog's breed is : " + dog.getBreed());
}
}
--- web.xml ---
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Chapter5</display-name><servlet>
<servlet-name>ListenerTester</servlet-name>
<servlet-class>com.example.ListenerTester</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListenerTester</servlet-name>
<url-pattern>/ListenTest.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>breed</param-name>
<param-value>Great Done</param-value>
</context-param>
<listener>
<listener-class>
com.example.MyServletContextListener
</listener-class>
</listener>
</web-app>
이렇게 있을때 응답하는 과정이다.
1. 컨테이너는 application DD 를 읽는다.
<listener> 와 <context-param> 요소를 읽는다.
2. 컨테이너는 ServletContext 객체를 생성하고 어플리케이션에선 이 객체를 공유한다.
container - > ServletContext
new
3. 컨테이너는 DD에 있는 breed/Great Done이라는 객체를 만든다.
contaner - > "breed"
new - > "Great Dane"
4. 컨테이너는 생성한 컨텍스트 초기화 파라미터의 String 쌍을 ServletContext 객체에 설정합니다.
ServletContext -> "breed"
new -> "Great Dane"
5. 컨테이너는 MyServletContextListener 클래스 인스턴스를 만듭니다.
컨테이너 -> MyServletContextListener.class
new
6. contextInitialised() 메소드를 호출하며 파라미터로 ServletContextEvent를 넘깁니다.
코드에서는 ServletContextEvent 로 접근한 ServletContext로 컨텍스트 초기화 파라미터를 읽습니다.
container - > contextInitialized(ServletContextEvent) -> Listener
7. 리스너가 ServletContextEvent에게 ServletContext에 대한 참조를 요청합니다.
Listener - > getServletContext() - > ServletContextEvent
8. 리스너가 ServletContext 에게 컨텍스트 초기화 파라미터 breed 에 대한 값을 요청합니다.
Listener - > getInitParameter("breed") - > ServletContext - > "breed"
- > "Great Dane"
9. 리스너는 초기화 파라미터를 가지고 Dog 객체를 생성합니다.
Listener - > Dog.class
new
10. 리스너는 ServletContext 의 속성으로 Dog를 설정합니다.
Listener - > setAttribute("dog",d) - > ServletContext11. 컨테이너는 초기화 파라미터로 ServletConfig를 생성합니다.
여기에 ServletContext에 대한 참조를 설정한 다음, 서블릿 init()메소드를 호출합니다.
container - > init(ServletConfig) - > ListenerTest.class
ServletConfig -> ServletContext-> String
-> String
12. 서블릿은 요청을 받고는 ,ServletContext 에게 속성에 매핑된 객체 인스턴스를 요청합니다.
Servlet - > getAttribute("dog") - > ServletContext
13. 서블릿은 Dog 객체의 getBreed() 메소드를 호출합니다.
그 후 HttpResponse 에 이 내용을 쓴다.
Serlvet - > getBreed() - > Dog'프로그램 > JAVA' 카테고리의 다른 글
Java Naming 에 관한글 (0) 2008.11.22 직렬화 개념 (0) 2008.07.02 java context lookup (0) 2008.04.10 ServletConfig 와 ServletContext의 차이 (0) 2008.04.03 Syntax error on token "}", delete this token 이런 오류였는데... (0) 2008.04.02 java.lang.reflect.InvocationTargetException (0) 2008.04.01 reflect예제. (0) 2008.04.01