Dev/JSP & Servlet

Servlet - ServletContextListener 구현

창문닦이 2019. 3. 6. 00:54

서블릿은 다양한 시점에서 발생하는 이벤트와 이벤트를 처리하기 위한 인터페이스가 존재한다 .그 중 HttpSessionListener, ServletContextListener 를 활용하고자 한다. 이벤트와 인터페이스를 이용하면 웹 어플리케이션에서 필요로하는 데이터의 초기화나 요청처리등을 추적할 수 있게 한다.

 

HttpSessionListener 인터페이스를 구현한 클래스 - CountManager.java

package com.event;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

 

//서블릿의 라이프 사이클과 속성 이벤트

//HTTPSessionListenr: 세션이 생성, 종료될 때

//ServletContextListener : 서버가 시작, 중지될 때

 

public class CountManager implements HttpSessionListener {

private static CountManager countManager;

private static int count;

 

public CountManager(){

countManager = this; //자기자신

}

 

//싱글톤

public static synchronized CountManager getInstance() throws Exception{

if(countManager==null)

countManager = new CountManager();//null이면 객체생성

 

return countManager;

}

public static int getCount(){

return count;

}

@Override

public void sessionCreated(HttpSessionEvent evt) {

//SID 키값을 가져와서 할당을 해줌

HttpSession session = evt.getSession();

session.setMaxInactiveInterval(10*60);

 

count++;

System.out.println(session.getId()+": 세션 생성, ");

System.out.println("접속자수 : " + count);

}

@Override

public void sessionDestroyed(HttpSessionEvent evt) {

HttpSession session = evt.getSession();

 

count--;

System.out.println(session.getId()+": 세션 소멸, ");

System.out.println("접속자수 : " + count);

}

}

 

 

작성한 클래스를 등록

web.xml - 세션이 시작되고 종료될 때 체크하는 리스너를 등록
<!-- 리스너 -->
<listener>
<listener-class>com.event.CountManager</listener-class>
</listener>

 

 


 

ServletContextListener인터페이스를 구현한 클래스

ContextListenerTest.java
public class ContextListenerTest implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent evt) {
System.out.println("서버 죽는다..");
}
@Override
public void contextInitialized(ServletContextEvent evt) {
System.out.println("서버 살아난다..");


ServletContext sc = evt.getServletContext();
//어떤 소스에서도 접근 가능한 데이터
sc.setAttribute("name", "한예슬");
}
}
서버 startup

서버 shutdown


작성한 클래스를 등록

web.xml
<!-- ContextListener 리스너 -->
<listener>
<listener-class>com.event.ContextListenerTest</listener-class>
</listener>

 

하기 JSP 페이지를 통해서 어떤 소스에서도 접근 가능한 데이터를 확인할 수 있다.

 

contextListenerTest.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
ContextListenerTest 데이터 <br>
이름: ${name }<br>