Servlet Listener (이벤트)

최주영·2023년 5월 23일
0

Servlet

목록 보기
5/9

✅ 서블릿 리스너

  • 라이프 사이클 사이에 발생하는 이벤트를 감지하여 해당 이벤트 발생 시 이벤트 대한 로직을 처리하는 인터페이스
  • ServletRequestListener 인터페이스
  • ServletRequestAttributeListener 인터페이스
    ex) 현재 접속자 수를 구할 때 리스너 사용
package com.filtertest.common.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ContextListenerTest implements ServletContextListener{
									// ServletContextListener 인터페이스 구현해야함
	
//	ctrl+alt+s+v -> 두개 메소드 다 체크 
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// 톰켓의 servletContext 객체가 소멸됐을 때 실행
		// 톰켓종료시 == 서버 종료시
		System.out.println("서버 죽음");
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// 톰켓의 servletContext 객체가 생성됬을 때 실행
		// 톰켓실행시 == 서버킬때
		System.out.println("서버 실행");
	}
	
}


// web.xml 파일에서 등록해줘야함!
	<!-- 리스너 등록 -->	
	<listener>
		<listener-class>
			com.filtertest.common.listener.ContextListenerTest
		</listener-class>
	</listener>

✅ 새파일에서 리스너 만들기

package com.filtertest.common.listener;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;

@WebListener
public class RequestListenerTest implements ServletRequestListener, ServletRequestAttributeListener {

    public void requestInitialized(ServletRequestEvent sre)  { 
    	// 요청이 들어왔을 때 무조건 실행
         System.out.println("요청이 왔다!");
         String uri = ((HttpServletRequest)sre.getServletRequest()).getRequestURI();
         System.out.println(uri);
    }

    public void attributeAdded(ServletRequestAttributeEvent srae)  { 
    	// setAttribute로 값 넣었을 때 무조건 실행
         System.out.println("setAttribute()메소드로 데이터 추가");
         String key = srae.getName();
         Object value = srae.getValue();
         System.out.println(key+" "+value);
    }

}
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글