관리 메뉴

I LOVE EJ

jsp, 서블릿, 데이타베이스 한글문제 총정리 본문

Web Development/JSP

jsp, 서블릿, 데이타베이스 한글문제 총정리

BeOne 2007. 10. 15. 15:34

다음은 모든 분들이 짜증내하는 한글 인코딩에 대해서 모든 것을 정리해 보았다.

이 문서로 한글 문제에 더 이상 시간을 뺏기질 않길 바란다.

이 문서를 정확히 이해하신다면 어떤 환경에서도 원하는 문자셋을 설정하실 수 있으실 것입니다.


저작 : 이상윤


---- 기본개념 ----


한글문제를 해결하기 위해서는 기본 개념을 아셔야 합니다.

자 기본개념 들어갑니다.


ms949 는 윈도우에서 돌아가는 캐릭터 셋입니다. 아햏햏은 표시가 가능합니다만, 유닉스 환경에서는 지원불가입니다.

euc-kr 은 윈도우 리눅스에서 돌아가지만 [ 믜 , 아햏햏 ] 등의 글 사용시 한글깨짐 현상이 나타납니다.

그럼 utf-8 은 어떨까요?  이것은 모든문자를 지원합니다. 글자가 깨지지 않죠. 하지만 3byte를

차지합니다. 오라클의 최신버전인 10G XE  V 10.2.0.1.0 을 보시면 기본 default 로

UTF 로 설정되어 있습니다.

자 이제 강좌 시작합니다.


한글 처리에는  JSP 와 서블릿 한글처리 두 가지가 있습니다.


---------- JSP 에서 한글 처리 ----------------

jsp 의 한글을 컨테이너가 웹에 [표현 or 뿌려줄때] 할 때는 다음과 같이 사용합니다.

1. <%@ page contentType="text/html;charset=euc-kr" %>

위에는 pageEncoding 속성이 없습니다. 그렇다면 pageEncoding="euc-kr" 을 사용하게 됩니다.


만약 다음과 같이 pageEncoding 가 들어있다면 utf-8 로 읽어들이고 euc-kr 로 웹에 뿌려주죠.

2. <%@ page contentType="text/html;charset=euc-kr" pageEncoding="utf-8" %>


현제 jsp 페이지 안에 믜 라는 글자가 있다면 어떨까요?

1번일 경우 [믜] 를 읽기 위해 pageEncoding 을 읽어야 하지만 없으므로 charset의

 euc-kr 을 이용합니다. 그럼 euc-kr 은 이 글자를 인식못하겠죠?

그렇다면 원하는 문자를 출력하기 어렵습니다.


2번일 경우는 어떨까요. 글을 읽기 위해 utf-8 을 사용하므로 컨테이너에 잘 들어갈 것입니다.

하지만 뿌려줄때는 euc-kr 을 사용하므로 다시 글이 깨지겠죠....


만약 jsp1 --> jsp2 로 <input type=text value='값'>으로 처리하면 어떨까요?

[학교]라는 글자라면   jsp2 에서 euc-kr 로 표현하면 됩니다.

[믜] 라는 글자라면 캐릭터셋으로 읽고 jsp2 에서 utf-8 또는 ms949로 표현하면 됩니다

jsp1 에서는 어떻게 처리해야 될까요?


jsp2 의 내부처리를 자세히 보시면

1단계 --> jsp2 에서는 <%request.setCharacterEncoding("utf-8"); %> 을 해야 됩니다.

이 뜻은 보낸(jsp1) 페이지가 utf-8 로 되어 있다라는 뜻입니다. 즉 utf-8 로 인식하겠다는 뜻입니다.

2단계 --> pageEncoding 을 합니다. 이때 pageEncoding 할 때 euc-kr 로 되있다면 글자깨짐..

3단게 --> charset 를 사용하여 표현. 이때도 euc-kr 로 되있으면 깨지겠죠?


자 jsp 에서 jsp 로 넘겨줄때 <%request.setCharacterEncoding("utf-8"); %> 을 사용했듯이

jsp 에서 서블릿으로 넘겨줄때도 마찬가지로 인코딩을 하셔야 한다는 것입니다.


------- 서블릿의 한글 처리 -------------

서블릿의 한글 인코딩에는 post 한글 인코딩, get 방식 한글 인코딩이 있습니다.

서블릿 내부에서 변환한다면 모든 서블릿마다 처리를 해줘야 하므로 불편합니다.

따라서 필터를 이용하여 설정해주시면 되겠습니다.


다음은 post 값에 대하여 다음과 같이 인코딩 시키는 방법입니다.

web.xml 의 webapp 엘리먼트 안에 다음과 같이 넣습니다.

SetCharacterEncodingFilter.java 를 만든다. package는 편의를 위해 filters 로 하겠습니다.


 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>filters.SetCharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>EUC-KR</param-value>  <!-- 원하는 문자셋 설정(주석은 한글 안됩니다)  -->
  </init-param>
 </filter>


 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

2. get 방식으로 서블릿에 전달하신다면 다음과 같이 처리하셔야 합니다.

server.xml 의 connector 엘리먼트를 찾아서 URLEncoding 를 다음과 같이 추가한다.


<Connector port="8080"      maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"  URLEncoding="UTF-8" />

'Web Development > JSP' 카테고리의 다른 글

JSP 커스텀 태그 라이브러리  (0) 2007.10.15
JSP태그라이브러리  (0) 2007.10.15
JSP + tomcat + mysql 한글깨짐 현상 완벽정리  (0) 2007.10.15
jsp에서 ms-sql연동  (0) 2007.10.15
Jakarta POI 읽기  (0) 2007.10.15