반응형
서블릿 필터 (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>
이렇게 필터 설정을 완료하면 다음과 같이 한글이 안 깨지게 출력이 됩니다.
반응형
'Servlet, JSP' 카테고리의 다른 글
Parameter, Form Data에 담은 한글이 깨지는 문제 해결 (0) | 2021.01.03 |
---|---|
Get 요청과 쿼리 스트링 (0) | 2021.01.03 |
Servlet에서 인코딩 방식과 컨텐츠 타입을 지정해야 하는 이유 (0) | 2021.01.03 |
Annotation(어노테이션)을 사용한 URL 매핑 (0) | 2021.01.03 |
Eclipse를 사용해 "Hello Servlet" 출력하기 (0) | 2021.01.03 |