100일 챌린지/빅데이터기반 인공지능 융합 서비스 개발자

Day 38 - Filter / Listener

ksyke 2024. 9. 13. 17:52

Filter

MyFilter01

package com.home.config;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class MyFilter01 implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter init...");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("filter1 before...");
        HttpServletRequest req=(HttpServletRequest) request;
        if(req.getMethod().equals("POST"))
            request.setCharacterEncoding("utf-8");
        System.out.println("filter1: "+req.hashCode());
        chain.doFilter(request, response);
        System.out.println("filter1 after...");

    }

    @Override
    public void destroy() {
        System.out.println("filter destroy...");

    }

}

MyFilter02

package com.home.config;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class MyFilter02 implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter2 init...");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("filter2 before...");
        HttpServletRequest req=(HttpServletRequest) request;
        HttpSession session = req.getSession();
        System.out.println(session.getId());
        chain.doFilter(request, response);
        System.out.println("filter2 after...");
    }

    @Override
    public void destroy() {
        System.out.println("filter2 destroy...");

    }

}

web.xml

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


  <display-name>Archetype Created Web Application</display-name>
  <welcome-file-list>
      <welcome-file>index.do</welcome-file>
  </welcome-file-list>

  <filter>
      <filter-name>filter1</filter-name>
      <filter-class>com.home.config.MyFilter01</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>filter1</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter>
      <filter-name>filter2</filter-name>
      <filter-class>com.home.config.MyFilter02</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>filter2</filter-name>
      <url-pattern>/emp/*</url-pattern>
  </filter-mapping>
</web-app>

Listener

Request Listener

package com.home.config;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ReqListener implements ServletRequestListener{

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {

    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("request listener..."); // 웹페이지 불러올때 필터보다 먼저 호출된다.
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">


  <display-name>Archetype Created Web Application</display-name>
  <welcome-file-list>
      <welcome-file>index.do</welcome-file>
  </welcome-file-list>

  <listener>
      <listener-class>com.home.config.ReqListener</listener-class>
  </listener>

</web-app>

Context Listener

package com.home.config;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class CtxtListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("context listener..."); // 서버를 구행했을때 필터보다 먼저 수행된다. 

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }

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


  <display-name>Archetype Created Web Application</display-name>
  <welcome-file-list>
      <welcome-file>index.do</welcome-file>
  </welcome-file-list>

  <listener>
      <listener-class>com.home.config.CtxtListener</listener-class>
  </listener>

</web-app>