tomcat에서 한글문제 해결 팁
한글을 파라메터로 넘길때 글자가 깨지는것은 다음의 이유에서이다.
HTML(JSP)에서 <FORM>태그를 사용하여 파라메터를 넘길때 아무설정을 하지 않으면
톰캣은 기본문자셋을 ISO8859_1로 인코딩한다.
따라서 브라우저에서 보면 한글이 깨져보인다.
이를 해결하기 위해 모든 JSP파일에 다음과 같이 request에 대해 문자셋인코딩을 설정해주면 한글파라메터가 깨지는 것을 해결할 수 있다.
<% request.setCharacterEncoding("euc-kr"); %>
request.setCharacterEncoding("euc-kr");
그러나 매 페이지마다 위의 코드를 넣어주는것은 비효율적이다.
Filter를 사용하여 이것을 해결할 수 있다.
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.http.HttpServletRequest;
public class EncodingFilter implements Filter {
private FilterConfig m_config = null;
private String m_encoding = "euc-kr";
public void init(FilterConfig config) throws ServletException {
m_config = config;
m_encoding = config.getInitParameter("encoding");
System.out.println("EncodingFilter.init().... " + m_encoding);
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)srequest;
request.setCharacterEncoding(m_encoding);
System.out.println("EncodingFilter.doFilter().... " + request.getRequestURI()+":"+request.getCharacterEncoding());
// move on to the next
chain.doFilter(srequest, sresponse);
}
public void destroy() {
m_config = null;
m_encoding = null;
}
}
web.xml에 넣어야 할 놈..
<web-app>
<display-name>developerclub.com</display-name>
<description>developerclub.com</description>
<filter>
<filter-name>EncodingFilter</filter-name>
<display-name>EncodingFilter</display-name>
<description>no description</description>
<filter-class>EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>euc-kr</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>