본문 바로가기

Servlet, JSP

서블릿 필터 (Servlet Filter) 적용하기

반응형

이전 프로젝트를 참고해주세요.

서블릿 필터 (Servlet Filter) 적용하기

서블릿마다 공통되는 설정을(인코딩, 서블릿 접근 권한 체크) 서블릿마다 하는 것을 불편합니다.

모든 서블릿에서 많이 실행되는 설정들을 서블릿 이전에 필터에서 검사할 수 있습니다.

 

요청 순서는 다음과 같습니다.

클라이언트 → WAS → Filter → Servlet

응답 순서도 반대로 다음과 같습니다.

Servlet → Filter → WAS → 클라이언트

 

필터를 적용하는 데 2가지 방법이 있습니다.

 

방법 1 @WebFilter("") 어노테이션 사용

@WebFilter("/*")를 통해 모든 요청에 대해 해당 필터를 통과하도록 설정합니다.

chain.doFilter(request, response); 를 통해서 서블릿을 실행할 수 있습니다.

여기서는 Reg 서블릿이 실행됩니다.

 

필터에서는 요청, 응답 데이터에 UTF-8 인코딩을 적용하는 것과 콘텐츠 타입을 정하는 것을 적용했습니다.

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

	@Override
	public void doFilter(ServletRequest request
			, ServletResponse response
			, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");

		chain.doFilter(request, response);
	}
}

 

 

Reg 서블릿 입니다.

이미 필터에서 인코딩 설정을 했기 때문에 요청 파라미터를 받고, 출력하는데 한글이 깨지지 않습니다.

 

Reg.java

@WebServlet("/reg")
public class Reg extends HttpServlet {
	@Override
	public void service (HttpServletRequest request
			, HttpServletResponse response) throws IOException, ServletException{
		//response.setCharacterEncoding("UTF-8"); 
		//response.setContentType("text/html; charset=UTF-8");
		//request.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		
		String title=request.getParameter("title");
		String content=request.getParameter("content");
		
		out.println("title : "+title);
		out.println("content : "+content);
		
	}

}

 

방법 2 web.xml 수정

다음과 같이 web.xml에 필터를 적용할 수 있습니다.

<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>com.seung.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

 

 

이렇게 필터 설정을 완료하면 다음과 같이 한글이 안 깨지게 출력이 됩니다.

 

반응형