기존의 작성된 소스의 수정이 없었는데, 한글이 제대로 나왔다가 깨졌다가 하는 현상이
있는 분들은 아래 글의 jdbc 옵션부분을 잘 보시기 바랍니다.
Tomcat3와 Tomcat4의 한글 charset의 차이점 해결 방법은
[서비스 이용법] 번호:53 제목: Tomcat3 와 Tomcat4의 한글처리 차이점
에서 참조하시길 바랍니다.
jdbc 부분이 가장 중요합니다. 이 부분을 놓치시면 한글이 보였다가 깨졌다가 합니다.
4.1.12 에서는 jdbc 드라이버에 옵션을 지정해 주어야 합니다. 3.3.1 사용자들 중에서도
한글이 제대로 보였다가 깨지는 분들은 이 옵션을 꼭 주셔야 합니다.
page charset 을 euc-kr 로 지정합니다.
<%@ page import="java.sql.*" contentType="text/html;charset=euc-kr"%>
<%
Class.forName("org.gjt.mm.mysql.Driver");
DriverManager.getConnection("jdbc:mysql://db1.guideline.co.kr/Database_name?autoReconnect=true&useUnicode=true&characterEncoding=euc-kr"
,"MySQL_id","MySQL_password");
%>
위의 문구에서 characterEncoding=euc-kr 처럼 DB 에서 가져올 때 인코딩할 charset을 지정해 주어야 합니다.
DB 에 넣을 때와 가져올 때 모두 인코딩은 하지 않아도 됩니다.
위의 내용은 다른 charset 으로도 응용가능합니다. 예를 들면
<%@ page import="java.sql.*" contentType="text/html;charset=8859_1"%>
로 했을 경우는
<%
Class.forName("org.gjt.mm.mysql.Driver");
DriverManager.getConnection("jdbc:mysql://db1.guideline.co.kr/Database_name?autoReconnect=true&useUnicode=true&characterEncoding=8859_1","MySQL_id","MySQL_password");
%>
처럼 jdbc 드라이버의 encoding charset 을 page charset 과 동일하게 8859_1 로 하시면 됩니다.
jdbc 드라이버에 encoding charset 을 지정하지 않았을 경우, DB 에서 가져온 한글값들이 제대로 보였다가 깨졌다가 하니 주의하시기 바랍니다.
db pool 같은 경우 해당 connection의 수를 융통성 있게 조절 하여 사용하시길 바랍니다.
Tomcat 3.3.1 일 경우에는 package화 시킬 필요없는데
Tomcat 4.1.12 을 사용할때에는 WEB-INF/classes/package폴더명
package를 만들어서 import 해 주시길 바랍니다.
[그 외에 한글처리를 요하는 경우에 필요한 function 참조]
// 8859_1을 KSC5601로 변환
public String toKorean(String str) {
String convStr = null;
try {
if(str==null)
return null;
// 현재문자열을 8859_1형식으로 읽어내어 KSC5601형식으로 변환
convStr = new String(str.getBytes("8859_1"),"KSC5601");
} catch (UnsupportedEncodingException e) {
}
return convStr;
}
// KSC5601을 8859_1로 변환
public String fromKorean(String str) {
String convStr = null;
try {
if(str==null)
return null;
// 현재문자열을 KSC5601형식으로 읽어내어 8859_1형식으로 변환
convStr = new String(str.getBytes("KSC5601"),"8859_1");
} catch (UnsupportedEncodingException e) {
}
return convStr;
}