전달 받은 페이지에서 한글 처리하기 위해서는 매번 페이지마다 한글처리를 해야 하지만, 필터 하나를 이용해 한글처리 기능을 일괄적으로 적용할 수 있습니다.
init( ) 메소드의 인자값으로 전달되는 filterConfig 객체를 이용해 필터에 대한 정보값(초기값)을 추출할 수 있는데 이 초기값에 문자코드를 저장하고 한글처리 필터를 작성하면서 이 정보를 추출하여 인코딩에 적용해 볼 것이다.
여기서 한글처리 필터를 적용할 필터는 '필터 구현하기' 토픽에서 작성한 'flow2' 필터이다. 그러므로 아래의 초기값을 설정하는 방법으로 애노테이션에 작성하는 방법을 이용한다.
1. 초기값 설정
web.xml를 이용해 필터를 등록한 경우 아래처럼 init-param으로 초기값을 정할 수 있다.
1 2 3 4 5 6 7 8 | <filter> <filter-name>flow2</filter-name> <filter- class >job.study.web.FlowFilterTwo</filter- class > <init-param> <param-name>enc</param-name> <param-value>UTF- 8 </param-value> </init-param> </filter> |
@WebFilter 애노테이션을 이용해 필터를 등록한 경우에는 다음과 같이 지정할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 | /** * Servlet Filter implementation class FlowFilterTwo */ @WebFilter ( filterName= "flow2" , initParams= { @WebInitParam (name= "enc" , value= "UTF-8" ) }) public class FlowFilterTwo implements Filter { .... 생략 .... } |
2. 초기값 추출와 적용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package job.study.web; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; /** * Servlet Filter implementation class FlowFilterTwo */ @WebFilter ( filterName= "flow2" , initParams= { @WebInitParam (name= "enc" , value= "UTF-8" ) }) public class FlowFilterTwo implements Filter { String charset; /** * Default constructor. */ public FlowFilterTwo() { // TODO Auto-generated constructor stub } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub // 인코딩 초기 값을 추출하여 멤버변수인 charset에 저장한다. charset = fConfig.getInitParameter( "enc" ); System.out.println( "init() 호출 ......... two" ); } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here //초기값을 추출하여 멤버 변수인 charst에 저장한 값으로 문자코드를 설정한다. request.setCharacterEncoding(charset); System.out.println(charset); System.out.println( "doFilter() 호출 전 ......... two" ); // pass the request along the filter chain chain.doFilter(request, response); System.out.println( "doFilter() 호출 후 ......... two" ); } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub System.out.println( "destory () 호출 ......... two" ); } } |
3. 입력페이지 작성
index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> < html > < head > < title >Insert title here</ title > </ head > < body > Hello World! < form method = "post" action = "encFilter" > < input type = "text" name = "myName" > < input type = "submit" value = "인사하기" > </ form > </ body > </ html > |
4. 출력을 담당하는 서블릿 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package job.study.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class EncFilterServlet */ @WebServlet ( "/encFilter" ) public class EncFilterServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public EncFilterServlet() { super (); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType( "text/html;charset=UTF-8" ); PrintWriter out = response.getWriter(); out.print(request.getParameter( "myName" )); out.close(); } } |
5. 실행결과