클라이언트 -> 요청 -> HttpServletRequest -> 필터 -> 요청처리 Servlet
HttpServletResponse 생성
index.jsp -> main.js(addEventListenser) -> Servlet -> EncodingFilter-> Servlet -> main.js($.Ajax)
filterName 속성 : 필터의 이름 지정, 필터 순서 지정 시 사용
urlPatterns 속성 : 요청 주소 패턴
/community, /
최상위 주소
*
모든
/*
최상위 주소 하위 모든 == 모든 요청
@WebFilter(filterName="encodingFilter", urlPatterns="/*")
public class EncodingFilter extends HttpFilter implements Filter{
// 서버 실행 시 또는 필터 코드 변경 시
// 필터 객체 자동 생성됨
// -> 그때, 필터에 필요한 내용을 초기화하는 메서드
public void init(FilterConfig fConfig) {
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로 최상위 경로를 얻어올 수 있는 값 세팅
// application 내장 객체 얻어오기
ServletContext application = request.getServletContext();
// 최상위 주소 얻어오기
String contextPath = ((HttpServletRequest)request).getContextPath();
// 세팅
application.setAttribute("contextPath", contextPath);
// 연결된 다음 필터 수행(없으면 Servlet 수행)
chain.doFilter(request, response);
}
}