JSP

서블릿 필터와 리스너

yoooon1212 2024. 7. 2. 09:34

1. 필터 (Filter)

서블릿이나 JSP에 요청이 도달하기 전에 요청과 응답을 가로채서 처리하는 컴포넌트입니다.

요청을 수정하거나, 응답을 변경하거나, 로깅 및 인증 등의 작업을 수행할 수 있습니다.

클라이언트와 자원 사이에 여러개의 필터가 모여서 하나의 체인(Chain)을 형성할수 도 있습니다.

 

 

 

WAS 서버에 필터를 설정하는 방법

  1. web.xml 파일에서 설정
  2. 자바 코드측에 애노테이션을 사용

 

예시 코드 - web.xml 파일에 설정

<filter>
	<filter-name>IPBlockFilter</filter-name>
	<filter-class>com.tenco.filters.IPBlockFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>IPBlockFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

 

예시 코드 - java 파일에서 애노테이션 사용

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class LoggingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 필터 초기화 작업
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 요청 전 처리
        System.out.println("Request received at " + new java.util.Date());
        chain.doFilter(request, response); // 다음 필터나 서블릿으로 요청 전달
        // 응답 후 처리
        System.out.println("Response sent at " + new java.util.Date());
    }

    @Override
    public void destroy() {
        // 필터 종료 작업
    }
}

 

코드 예시 - 필터 클래스 생성

 

 

필터의 주요 기능

  • 요청 및 응답의 전처리 및 후처리
  • 로깅 처리
  • 인증 및 권한 부여
  • 데이터 압축

 

2. 서블릿 리스너 

리스너

컨테이너에서 발생하는 이벤트를 모니터링하다가 특정 이벤트가 발생하면 실행되는 특수한 서블릿(자바 객체)으로,

'이벤트 리스너'라고도 한다.

즉, 리스너는 웹 애플리케이션에서 특정한 사건이 일어났을 때 그것을 알아차리고 적절한 처리를 하는 역할을 합니다.

예를 들어 애플리케이션이 시작되거나 종료될 때 발생하는 사건이나 사용자가 웹사이트에 로그인하거나 로그아웃하는 등의 사건 또는 사용자가 웹페이지를 요청하거나 특정 작업을 수행할 때 발생하는 사건 등 리스너는 이러한 다양한 사건들을 감지하고, 필요한 작업을 자동으로 수행하는 중요한 역할을 합니다.

 

사용하는 이유?

리스너는 웹 애플리케이션의 상태 변화(예: 시작, 종료, 세션 생성 및 소멸)를 감지하여 다음과 같은 작업을 수행할 수 있도록 도와줍니다.

  • 초기화 작업 (애플리케이션 시작 시 필요한 리소스 로드)
  • 정리 작업 (애플리케이션 종료 시 리소스 해제)
  • 세션 관련 작업 (로그인/로그아웃 로깅, 세션 속성 변경 감지)

 

주요 리스너 인터페이스

  • ServletContextListener: 애플리케이션 시작 및 종료 이벤트를 처리합니다.
  • HttpSessionListener: 세션 생성 및 소멸 이벤트를 처리합니다.
  • ServletRequestListener: 요청 객체의 생성 및 소멸 이벤트를 처리합니다.

 

리스너의 주요 기능

  • 애플리케이션 시작 및 종료 감지
  • 세션 생성 및 소멸 감지
  • 요청 시작 및 종료 감지
  • 애플리케이션 속성 변경 감지

 

WAS 서버에 리스너를 설정하는 방법

  1. web.xml 파일에서 설정
  2. 자바 코드측에 애노테이션을 사용

 

예시 코드 - web.xml 파일에 설정

<web-app ..>
	<listener>
	    <listener-class>com.example.AppContextListener</listener-class>
	</listener>
</web-app>

 

예시 코드 - 자바 코드 애노테이션으로 설

@WebListener
public class AppContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 애플리케이션 시작 시 처리 작업
        System.out.println("Application started at " + new java.util.Date());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // 애플리케이션 종료 시 처리 작업
        System.out.println("Application stopped at " + new java.util.Date());
    }
}

 

 

코드 예시 - Filter 구현 클래스

 

 

코드 예시 - ServletContextListener 구현 클래스

 

 

코드 예시 - HttpSessionListener 구현 클래스