Coding Planet

[Servlet] 서블릿 필터(Filter) - 인코딩 필터 예제 본문

카테고리 없음

[Servlet] 서블릿 필터(Filter) - 인코딩 필터 예제

jhj.sharon 2023. 3. 23. 20:12
반응형

 

 

 

1. 필터(Filter)란?

  • 클라이언트 요청 시 생성되는  HttpServletRequest, HttpServletResponse가  요청을 처리하는 Servlet에 도달하기 전에 특정코드를 수행하는 Class
  • 즉, 서블릿에서 공통적으로 처리되어야할 요청의 전처리 또는 후처리를 담당한다.
  • 따라서 암호화, doPost의 인코딩, 이미지 변환 등 공통적으로 처리해야할 코드를 수행하도록 한다.

 

2. 필터(Filter)의 요청흐름, 라이프사이클

1)요청흐름:   클라이언트 -> 요청 -> HttpServletRequest, HttpServletResponse 생성 -> Filter -> 요청처리 Servlet

 

2) 라이프사이클: 생성->초기화 -> 필터 -> 종료

 

 

 

 

 

 

3.Filter code

  • @WebFilter("url 패턴") : 해당 클래스를 filter class로 등록한다. url 패턴에 일치하는 요청이 있을 경우 해당 요청을 필터링 한다.
  • filterName: 필터의 이름과 순서를 지정한다.
  • urlPatterns : 요청주소의 패턴 
  • Filter class는 HttpFilter 추상클래스와 Filter 인터페이스를 상속한다
package edu.kh.community.common.filter;

import java.io.IOException;

@WebFilter(filterName="encodingFilter", urlPatterns="/*")
public class EncodingFilter extends HttpFilter implements Filter {
	
	
	// 서버 실행 시 또는 필터 코드 변경 시 
	// 필터 객체가 자동 생성되는데 
	// 그때, 필터에 필요한 내용을 초기화 하는 메서드
	public void init(FilterConfig fConfig) throws ServletException {
		System.out.println("문자 인코딩 필터 초기화");
	}
	
	// 서버 실행 중 필터코드가 변경되서
	// 기존 필터를 없애야 할 때 수행되는 메서드
	public void destroy() {
		System.out.println("문자 인코딩 필터 파괴");		
		
	}
	
	// 필터 역할을 수행하는 메서드
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		//ServletRequest는 HttpServletrequest의 부모타입, 
		//ServletResponse은 HttpServletresponse의 부모타입
		// 필요시 다운 캐스팅해서 사용
		
		//모든 요청의 문자 인코딩을 UTF-8로 지정
		request.setCharacterEncoding("UTF-8");
		
		//모든 응답의 문자 인코딩을 UTF-8로 지정
		response.setCharacterEncoding("UTF-8");
		
		//-----------------------------------------------------------
		
		//application scope으로 최상위 경로를 얻어올 수 있는 값 세팅하기
		
		//1) application 내장객체 얻어오기
			ServletContext application = request.getServletContext();
			
		//2) 최상위 주소 얻어오기
			String contextPath = ((HttpServletRequest)request).getContextPath();
			
			
		//3) 세팅
			application.setAttribute("contextPath", contextPath);
		
		//연결된 다음 필터 수행(없으면 Servlet 수행)
			chain.doFilter(request, response);

			
		
		
		
	}
	
	

}

 

 

 

 

 

반응형
Comments