[JSP/Servlet] Listener 및 ServletContext/ServletConfig 예제

● 목록



web.xml


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

  <display-name>myweb</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  

  <!-- 초기 파라미터 - 공용(web component-servlet/jsp/filter/listener 들이 같이 사용하는 초기파라미터)-->

  <context-param>

  <param-name>phone number</param-name>

  <param-value>02-111-2222</param-value>

  </context-param>

  <context-param>

  <param-name>admin email</param-name>

  <param-value>admin@kosta.or.kr</param-value>

  </context-param>

  

  <!-- Listener 클래스 객체 등록 -->

  <listener>

  <listener-class>servlet.listener.MyListener</listener-class>

  </listener>

  

  <!--CounterServlet 등록 -->

  <servlet>

  <servlet-name>counter</servlet-name>

  <servlet-class>servlet.lifecycle.CounterServlet</servlet-class>

  <!-- 초기 파라미터 등록 -->

  <init-param>

  <param-name>filePath</param-name>

  <param-value>C:\Java\counter.dat</param-value>

  </init-param>

  </servlet>

  <!-- name:counter 서블릿 요청 URL 등록 -->

  <servlet-mapping>

  <servlet-name>counter</servlet-name>

  <url-pattern>/lifecycle/counter</url-pattern>

  </servlet-mapping>

  

  <servlet>

  <servlet-name>read querystring</servlet-name>

  <servlet-class>servlet.requestparam.ReadQueryStringServlet</servlet-class>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>read querystring</servlet-name>

  <url-pattern>/form/readqs</url-pattern>

  </servlet-mapping>

</web-app>



CounterServlet.java


package servlet.lifecycle;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletConfig;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/*

 * 1. public class, HttpServlet 상속, no-argument 생성

 * 2. callback 메소드 (lifecycle 메소드) 재정의 - 실행환경(Web Container)이 특정 시점에 호출하는 메소드.

 * + init() : 초기화

 * + service() => doGet() || doPost() : 사용자 요청을 처리하는 메소드.

 * +destroy() : 마무리(객체 소멸 전에 호출)

 * 3. web.xml에 등록 => Web Container에게 구현한 Servlet(객체)를 등록.

 */

public class CounterServlet extends HttpServlet{

private int counter;//요청 횟수를 저장할 변수

public CounterServlet(){

System.out.println("CounterServlet 생성자 실행.");

}

public void init(){

//저장할 파일경로

ServletConfig config = getServletConfig(); //init() 메소드 이후에서 ServletConfig사용가능

String filePath = config.getInitParameter("filePath");

 //String filePath = getServletconfig().getInitParameter("filePath");

System.out.println("CounterServlet.init() 실행 - 파일("+filePath+")에서 counter 변수값을 조회");

}

public void destroy(){

String filePath = getServletConfig().getInitParameter("filePath");

System.out.println("CounterServlet.destroy() 실행 - counter변수 값을 파일("+filePath+")에 저장");

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{

System.out.println("CounterServlet.service() - doGet() 실행");

//counter를 1증가

counter++;

//ServletContext를 이용해 초기 파라미터 조회

ServletContext context = getServletContext();

String phoneNumber = context.getInitParameter("phone number");

String adminEmail = context.getInitParameter("admin email");

//MyListener의 contextInitialized()에서 등록한 "resource" 속성 조회

String resource = (String)context.getAttribute("resource");

//counter의 값을 사용자에게 응답 처리.

//1. 응답 content-type 지정. MIME 타입

response.setContentType("text/html;charset=UTF-8");

//2. 응답하기 위한 출력 Stream 조회

PrintWriter out = response.getWriter();

//3. 응답

out.println("<!doctype html>");

out.println("<html><head><title>카운터</title></head>");

out.printf("<body>당신은 %d 번째 요청자입니다.<br>",counter);

out.println("<a href='/myweb/index.html'>index 페이지</a>");

out.print("<hr>");

out.printf("전화번호 : %s 관리자 이메일 주소 : %s <br>", phoneNumber,adminEmail);

out.printf("Attribute : %s", resource);

out.println("</body></html>");

}

}



MyListener.java


package servlet.listener;


import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;


/**

 * Application이 시작할때 할 일을 구현할 메소드와 종료할때 할일을 구현할 Event Listener 클래스

 * Application 시작/종료시 발생하는 Event : ServletContextEvent

 * 

 * 1. ServletContextListener 인터페이스를 implements (ServletContextEvent의 handler메소드를 선언한 Listener Interface)

 * 

 * 2. handler 메소드 Overriding

 * 

 * 3. web.xml에 등록 => Web Container에 등록

 *

 */

public class MyListener implements ServletContextListener{

/**

* Application이 시작되고 호출 되는 event handler 메소드.

*/

public void contextInitialized(ServletContextEvent event){

//ServletContextEvent로 부터 Servletcontext객체 조회

ServletContext context = event.getServletContext();

String resource = "공유데이터"; //여러 web component(servlet/jsp) 들이 사용하는 자원(공통자원)

//ServletContext의 Attribute 저장소에 resource를 속성으로 binding(등록)

context.setAttribute("resource", resource);

System.out.println("MyListener.contextInitialized() 실행");

}

/**

* Application이 종료되고 호출 되는 event handler 메소드.

*/

public void contextDestroyed(ServletContextEvent event) {

System.out.println("MyListener.contextDestroyed() 실행");

}

}


index.html


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<!-- 전체경로 -->

<a href="http://127.0.0.1:8088/myweb/lifecycle/counter">Counter 서블릿 호출</a><br>

<!-- 절대경로 -->

<a href="/myweb/lifecycle/counter">Counter 서블릿 호출</a><br>

<!-- 상대경로 -->

<a href="lifecycle/counter">Counter 서블릿 호출</a><br>



</body>

</html>




● 결과 화면






'BACKEND > Servlet&JSP' 카테고리의 다른 글

[JSP/Servlet] Cookie 기본 예제  (0) 2017.05.11
[JSP/Servlet] Cookie 예제 -숫자 누적처리  (0) 2017.05.11
[JSP/Servlet] Form 예제  (0) 2017.05.10
[JSP/Servlet] Session 관리  (0) 2017.05.10
[Tomcat] 설치 메뉴얼 자료  (0) 2017.05.10

댓글

Designed by JB FACTORY