본문으로 바로가기

Filter(필터)

category Servlet&JSP 2020. 1. 10. 12:59

Filter(필터) 란?


  • client부터 요청이 들어 오면 filer 통해 원하는 세팅을 미리 해줄 수 있다.
  • 어떤 요청에 대해서 Filter 가 동작하게 할지 @WebFilter("요청경로 페턴") 어노테이션을 지정한다.
  • doFilter()  메소드에서 원하는 동작을 한다. 
  • FilterChain 객체는 필터 기능이 완료되고 다음 페이지로 연결하는 기능에 사용한다.

 

 

 

Filter 만드는 방법


  1. Filter 인터페이스를 implements 한다.
  2. 메소드를 오버라이드 한다.
  3. @WebFilter("요청경로 페턴") 어노테이션을 지정한다.
@WebFilter("요청경로 작성")
public class EncodingFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
	//필터가 동작 되면 호출되는 메소드 
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

 

[예시]

post 방식으로 전송되는 모든 요청에 대해 한글인코딩이 되도록 필터를 만든다

@WebFilter("/*")
public class EncodingFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
	//필터가 동작 되면 호출되는 메소드 
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		//1. 인코딩이 설정되지 않았다면 
		if(request.getCharacterEncoding()==null) {
			//post 방식 요청 했을때 한글 인코딩 설정을 해준다.  
			request.setCharacterEncoding("utf-8");
		}
		
		//요청의 흐름 계속 이어가기 
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

 

post 방식으로 전송되는 input요소를 만들고 한글이 잘 출력되는지 확인해본다

//post 방식으로 입력 정보 전달
<body>
<h1>필터 테스트 home</h1>
<form action="insert.jsp" method="post">
	<input type="text" name="name" placeholder="이름 입력..."/>
	<input type="text" name="addr" placeholder="주소 입력..."/>
	<button type="submit">저장</button>
</form>
</body>
// post 방식으로 전달된 내용 출력 jsp 페이지
<body>
<%
	// 요청에 대한 한글 인코딩 setCharacterEncoding() 메소드 생략
	// post 방식 전송된 파라미터 읽어오기
	String name=request.getParameter("name");
	String addr=request.getParameter("addr");
%>
<p> 이름 : <strong><%=name %></strong></p>
<p> 주소 : <strong><%=addr %></strong></p>
</body>

필터를 통해 이미 인코딩 작업이 이루어졌기 때문에 

jsp 페이지에서 따로 한글에 대해 인코딩 작업을 해주지 않아도 정상적을 출력된다.