JSP/서블릿 흝어 보기

한글처리 필터

전달 받은 페이지에서 한글 처리하기 위해서는 매번 페이지마다 한글처리를 해야 하지만, 필터 하나를 이용해 한글처리 기능을 일괄적으로 적용할 수 있습니다. 

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. 실행결과

댓글

댓글 본문
버전 관리
DongHyun Kim
현재 버전
선택 버전
공동공부
graphittie 자세히 보기