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>