ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컨텍스트 리스너에 대한 간단한 예제 소스
    프로그램/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) - > ServletContext

    11. 컨테이너는 초기화 파라미터로 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
Designed by Tistory.