2013년 2월 3일 일요일

Eclipse / MySql / JSP / Tomcat - UTF-8 설정

※ 검색한 내용 확인, 적용하면서 정리해 보았습니다.

- Eclipse
 
Text file encodingUTF-8, 파일마다 확인.

  
- MySQL
 
- JSP
 

1
2
3
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

- Tomcat

server.xml (GET 방식으로 넘길 때 유효하다고 합니다. 추가된 속성은 다음과 같습니다.)

URIEncoding="UTF-8" 
useBodyEncodingForURI="true"
URIEncoding="UTF-8"


1
2
3
4
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" 
  redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />



1
2
3
4
5

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" 
  redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
 
projectweb.xml (filter 등록)
 
파일마다
 

1
2
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
 
대신
 

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
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;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        this.encoding = null;
        this.filterconfig = null;
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // 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);
    }
    @Override
    public void init(FilterConfig filterconfig) throws ServletException {
        // TODO Auto-generated method stub
        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);
    }
}
 
작성 후, projectweb.xml에 등록.
 

1
2
3
4
5
6
7
8
9
10
11
12
13
<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>
 
- 위 내용을 모두 확인, 적용해도 안되고, 혹시 MultipartRequest를 사용하신다면 생성자 encoding 매개변수에 “UTF-8” 넣어 주세요! (저는 이것 때문에 ㅠㅠ)
 

1
MultipartRequest mRequest = new MultipartRequest(request, folderPath, maxByteSize, "UTF-8");
 
  대부분의 검색 결과는 방법만 나와 있습니다. 왜 그런지, 위 내용 중 어떤 부분이 설정 되지 않았을 때 어떤 결과를 보여주는지 알기가 힘듭니다. 필터링 부분을 빼 보았는데 한글이 깨졌습니다. 그에 따른 페이지 에러도 발생합니다. 하지만 DB에는 정상적으로 한글이 저장되었습니다.MultipartRequest encoding 설정이 안 된 경우에는, 페이지 에러는 발생되지 않지만, 한글이 깨진 상태로 DB에 저장되었습니다. 시간을 내어 각 경우에 대해 연구를 해야 내공이 강해지겠지요? 일단 위 모든 내용을 적용, 확인하면 될 듯 합니다.

댓글 없음:

댓글 쓰기