1. 웹 동작 과정
톰캣(WAS)에서 Servlet Container에 있는 Servlet에 접근하기 전에 필터를 거치게된다.
해당 필터에서 추가적인 내용을 수행하거나, 다음 서블릿 또는 필터가 작동하거나 작동하지 못 하게 할 수 있다.
(필터는 여러개 있을 수 있다.)
2. 필터 생성
public class CharacterEncodingFilter implements Filter {
//기존보다 더 추가된 추상 메소드
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request
, ServletResponse response
, FilterChain chain)
throws IOException, ServletException {
//다음 필터나 서블릿 실행 전 인코딩 설정
request.setCharacterEncoding("UTF-8");
//다음 필터나 서블릿이 실행되기 전에 before filter 출력
System.out.println("before filter");
//조건 검사를 통해 다음 필터나 서블릿을 실행시키는 함수
chain.doFilter(request, response);
//다음 필터나 서블릿이 실행된 후 after filter 출력
System.out.println("after filter");
}
//기존보다 더 추가된 추상 메소드
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
doFilter 메소드에서 해당 필터가 작동하기 전, 후 작업을 추가하거나 다음 필터를 실행시키거나
실행하지 않도록 할 수 있다. (다음 필터 또는 서블릿은 메소드 내에서 chain.doFilter를 사용하여 실행시킨다.)
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>com.newlecture.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml에 추가하는 내용으로
/* 경로 밑에 있는 모든 서블릿 클래스들은 실행 전 characterEncodingFilter라는 필터를 적용시킨다는 의미이다.
3. 실행 결과
필터를 통해 다음 서블릿 및 필터 적용 전, 인코딩이 되어 한글이 올바르게 표기된 것을 확인할 수 있다.
또한 서블릿이나 다음 필터가 작동 전후, 미리 입력해두었던 문자열이 출력되는 것을 확인할 수 있다.
'서블릿&JSP > 뉴렉쳐 서블릿&JSP강의' 카테고리의 다른 글
[서블릿/jsp] 상태 유지 (0) | 2023.06.18 |
---|---|
[서블릿/jsp] 여러 개의 Submit 버튼 사용 및 입력 데이터 배열로 받기 (0) | 2023.06.17 |
[서블릿/jsp] POST 요청 (0) | 2023.06.17 |
[서블릿/jsp] GET 요청과 쿼리스트링 (0) | 2023.06.17 |
[서블릿/jsp] 한글과 콘텐츠 형식 출력하기 (0) | 2023.06.17 |