Tomcat 5.0 ~ 7.0 한글 인코딩 설정
2011년 8월 1일에 devtainer.blogspot.kr 에서 섰던 글입니다. 추억 팔이로 옮겨 놓습니다. 2011년 추억 속으로…. - 원문: http://devtainer.blogspot.kr/2011/08/tomcat-50-70.html
한동안 Tomcat을 사용하지 않다가 오랜만에 사용했더니 인코딩 관련 착각을 해서 한참을 삽질 했습니다. 한글 인코딩에 대하여 간략하게 정리합니다.
톰켓의 기본 인코딩은 ISO-8859-1 입니다. 따라서 한글을 정상적으로 처리하기 위해서는 추가적인 인코딩 설정이 필요합니다. 인코딩 설정은 http get 메서드와 http post 메서드를 개별적으로 설정합니다.
HTTP Get 메서드 인코등 설정
- [TOMCAT_HOME]/conf/server.xml 수정
- Connector port=“8080” 엘레먼트에 URIEncoding=“UTF-8” 속성 추가
<connector port="8080" protocol="HTTP/1.1"
connectiontimeout="20000" redirectport="8443"
uriencoding="UTF-8">
</connector>
HTTP Post 메서드 인코등 설정
- 인코딩 필터 클래스 추가 - tomcat example 애플리케이션의 encoding 클래스 재 사용
- 애플리케이션의 web.xml에 인코딩 필터 설정 추가
인코딩 필터를 적용함으로서 request.setCharacterEncoding() 코드를 제거할 수 있다.
package filters;
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;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig)
throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
위 클래스를 web.xml에 다음과 같이 인코딩 필터로 등록해야 합니다.
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
filters.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>