JSP/이론

filter

SEOKIHOUSE 2023. 7. 3. 11:49
  • 서블릿이 호출되기 전 서블렛 요청을 가로채는 기능
  • 서블릿이 호출되기 전 요청내용을 점검
  • 요청 헤더의 수정과 조정기능
  • 서블릿이 호출된 후 서블릿 응답을 가로채는 기능
  • 응답헤더의 수정과 조정기능


1) *  모든 요청에 적용된다

chain.doFilter(request, response);  현재 필터가 다음 필터로 제어를 넘기고자 할 때 호출됩니다. 이 메서드를 호출하면 다음 필터가 실행되며, 만약 다음 필터가 없다면 서블릿으로 제어가 이동하여 해당 서블릿의 service() 메서드가 호출됩니다.


  • jsp -> * filter ->encodingfilter - >servlet 

 

0703practice_filter.zip
2.61MB

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Filter Test Form</h1>
	<hr>
	<form action="testServlet2" method="POST">
		<input type="text" name="username">
		<input type="submit" value="전송">
	</form>
</body>
</html>
package filters;

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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

@WebFilter("/*")
public class FlowFilterOne extends HttpFilter implements Filter {
       
	public FlowFilterOne() {
        super();
    }

	public void init(FilterConfig fConfig) throws ServletException {
		System.out.println("init() 호출...one");
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("doFilter()호출 전 one");
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		chain.doFilter(request, response);
		
		System.out.println("doFilter()호출 후 one");
	}

	public void destroy() {
		System.out.println("destroy()호출..one");
	}


}
package filters;

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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

@WebFilter("/second")
public class FlowFilterTwo extends HttpFilter implements Filter {
       
    public FlowFilterTwo() {
        super();
    }

    public void init(FilterConfig fConfig) throws ServletException {
    	System.out.println("init() 호출...two");
    }

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("doFilter()호출 전 two");
		chain.doFilter(request, response);
		
		System.out.println("doFilter()호출 후 two");
	}

	public void destroy() {
		System.out.println("destroy()호출..two");
	}

}
package filters;

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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

@WebFilter("/second")
public class FlowFilterTwo extends HttpFilter implements Filter {
       
    public FlowFilterTwo() {
        super();
    }

    public void init(FilterConfig fConfig) throws ServletException {
    	System.out.println("init() 호출...two");
    }

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("doFilter()호출 전 two");
		chain.doFilter(request, response);
		
		System.out.println("doFilter()호출 후 two");
	}

	public void destroy() {
		System.out.println("destroy()호출..two");
	}

}
package filters;

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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

@WebFilter("/testServlet2")
public class EncodingFilter extends HttpFilter implements Filter {
       
    public EncodingFilter() {
        super();
    }

	public void destroy() {
		
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// place your code here
		System.out.println("encodingfilter 호출전");
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		// pass the request along the filter chain
		chain.doFilter(request, response);
		System.out.println("encodingfilter 호출후");
		
	}

	public void init(FilterConfig fConfig) throws ServletException {
		
	}

}