스크린샷 2025-09-03 오전 11.42.35.png

스크린샷 2025-09-03 오전 11.44.05.png

요청 및 응답에 대한 전후처리를 위한 매칭같은 것

필터라는 것은 연달아서 끼울 수 있다. → 필터체인

서블릿 전 필터를 거치게 하고 서블릿에서 응답이 될때 응답에 대한 후처리가 가능하다.

스크린샷 2025-09-03 오후 12.03.01.png

→ 서블릿 패턴으로 여러개의 매핑이 가능

스크린샷 2025-09-03 오후 12.04.56.png

    <filter-mapping>
        <filter-name>firstFilter</filter-name>
        <url-pattern>/first/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>secondFilter</filter-name>
        <url-pattern>/first/*</url-pattern>
    </filter-mapping>

스크린샷 2025-09-03 오후 12.07.01.png

스크린샷 2025-09-03 오후 12.24.51.png

/* 설명.
***   @WebFilter라는 어노테이션을 통해 필터 설정을 할 수 있지만
*   요청시 필터의 동작 순서를 정하기 위해서
*   Servlet에서는 web.xml을 통한 설정 시 작성된 순서로만 바꿔줄 수 있다.
*   (즉 web.xml에 작성한 filter mapping의 순서에 따라 동작한다.)**
*   */
**//@WebFilter(filterName = "firstFilter")
//@WebFilter(filterName = "firstFilter", urlPatterns = "/first/*")
@WebFilter("/first/*")**
public class FirstFilter implements Filter {

    public FirstFilter() {
        System.out.println("Filter 기본 생성자 호출");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("FirstFilter 인스턴스 생성!");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, 
    **FilterChain chain**) throws IOException, ServletException {
        System.out.println("FirstFilter의 doFilter() 호출 돰...");
        **// filterchain 매개변수
        /* 설명. FilterChain에서 제공하는 doFilter를 통해 
			          다음 필터 또는 서블릿으로 진행하라는 의미 */**
        chain.doFilter(request, response); // 다음 필터가 있으면 다음 필터로 가세요
        // 작성하지 않으면 서블릿으로 가지 않음
        System.out.println("First: 서블릿 다녀온 이후 client로 응답 전");
    }

    @Override
    public void destroy() {
        System.out.println("FirstFIlter 삭제 작전!");
    }
}

// 2단 구조 -> 상하위 개념
@WebServlet("/first/filter")
public class FirstFilterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("서블릿으로 get요청 도착 확인 !");

    }
}

스크린샷 2025-09-03 오후 12.15.19.png