Filter 를 이용한 한글 인코딩 적용 - 심우곤님 at www.jlab.net

1.5.4. Tomcat에서의 한글문제

작성자: 심 우곤 (wgshim@greenbell.co.kr)
본 문서는 JLab (http://www.jlab.net) 홈페이지에서도 보실 수 있습니다.

Tomcat의 악명 높은 한글 문제입니다. HTML의 <FORM>을 통해 한글 정보를 전달하면 이 값이 깨져버리는데, 이 문제는 Tomcat이 넘어오는 데이터를 내부적으로 변환해 버리기 때문이지요. 물론, 한글을 변환하는 빈을 만들어서 처리하는 방법도 있습니다만, 매 페이지마다 빈을 불러서 처리해야 하는 것이 귀찮지요.


여기서 알려드리려 하는 방법은 Tomcat으로 하여금 <FORM>을 통해 전달하는 값을 URL 인코딩을 하지 않고 EUC_KR로 변환하여 넘기도록 합니다. 이는 한글문제에 대해 고민을 하지 않아도 된다는 것이지요.


물론, 매 페이지는 한글을 잘 표현할 수 있도록 다음과 같은 지시문을 둘 거라 생각합니다.
<%@ page language="java" contentType="text/html; encoding=euc_kr"%>
이제 본격적으로 Tomcat의 한글문제를 다루도록 합시다. 사실 여기서 다루려는 해결방안은 Tomcat을 설치하면서 딸려 들어오는 예제코드(4.0.5나 4.1.12 모두에서 찾아볼 수 있습니다)에서 내용을 찾을 수 있었습니다. -_-;; 놀라셨다구요? 저도 놀랐습니다. 정말 등잔 밑이 어둡다고 하더니만, 이렇게 가까운 곳에 해결책이 있을 줄이야!


%CATALINA_HOME%\webapps\examples\WEB-INF에 존재하는 web.xml을 열어보면, 다음과 같은 부분을 찾을 수 있습니다.
이 방법은 Filter를 사용하는 방법으로 사용자의 입력을 서블릿이 처리하기 전에 해당 정보를 Filter가 적절한 방식으로 변환할 수 있도록 합니다.


그림 20. Tomcat 예제의 web.xml

참 이런걸 보면, 2 Bytes 문자체계를 지원하는 솔루션은 일본인들을 위해서 먼저 만들어진다는 것이 안타깝습니다. 하지만 이로 인해서 우리나라도 유사한 방법으로 한글문제를 쉽게 해결할 수 있지만요.. 잠깐 푸념이었습니다.


물론 위에 보이는 <filter>의 encoding 파라미터의 값을 EUC_JP에서 EUC_KR로 변경해야겠죠? 여기서 한글변환을 위해 사용된 SetCharacterEncodingFilter 클래스는 %CATALINA_HOME%\webapps\examples\WEB-INF\classes\filters에서 찾을 수 있습니다
[그림 21].

그럼 정리하겠습니다.


[ Filter를 사용하여 Tomcat에서의 한글문제 해결방안 ]


1. 구축하고자 하는 여러분의 웹 어플리케이션의 WEB-INF\classes 폴더에 filters라는 새로운 폴더를 생성합니다.


2. 이제 WEB-INF\classes\filters에 SetCharacterEncodingFilter.class 파일을 %CATALINA_HOME%\webapps\examples\WEB-INF\classes\filters 폴더에서 복사합니다.


3. 그 후 여러분의 웹 어플리케이션의 WEB-INF\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>EUC_KR</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

※ 참고: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 인지를 확인합니다. 간혹 2.2버전의 파일이 있는데, 이 때는 아래의 <filter> 및 <filter-mapping>인지하지 못합니다.)

매번 SetCharacterEncodingFilter.class 파일을 WEB-INF\classes\filters에 복사하는 것이 귀찮으시다구요?


Tomcat은 여러 웹 어플리케이션들간에 클래스를 공유할 수 있는 공간을 마련해 두었습니다. Tomcat 4.0.5에서는 %CATALINA_HOME%\classes폴더가 Tomcat 4.1.12에서는 %CATALINA_HOME%\common\classes 폴더가 있는데, 이들 폴더가 바로 그 공간입니다. 자 그럼 이곳에 공용 클래스인 SetCharacterEncodingFilter.class를 공유공간에 복사해 봅시다. 절차는 다음과 같습니다:


Tomcat 4.0.5를 사용하시는 분은 %CATALINA_HOME%\classes에, Tomcat 4.1.12를 사용하시는 분은 %CATALINA_HOME%\common\classes에 filters폴더를 만들고SetCharacterEncodingFilter.class 파일을 복사합니다.
혹은, 매번 폴더 만들고 복사하기가 귀찮으시다면 jar로 압축된 파일을 여기( http://ietmserver.greenbell.co.kr/~wgshim/java/TomcatCharacterEncodingFilter.jar )서 받으시기 바랍니다. 그냥 제가 묶어 놓은 것입니다. 여러분도 예제로부터 쉽게 만들어 사용하시면 됩니다. [파일명: TomcatChracterEncodingFilter.jar]

Tomcat 4.1.12를 사용하시는 분은 %CATALINA_HOME%\lib에, Tomcat 4.1.12를 사용하시는 분은 %CATALINA_HOME%\common\lib에 받으신 jar파일을 복사합니다.


이로써 우리는 앞으로 만들게 될 웹 어플리케이션에서 SetCharacterEncodingFilter 클래스를 공유하게 되었습니다. 그 결과, 여러분들은 위에 언급한 세 단계의 절차 중 첫 번째와 두 번째 항목을 매 어플리케이션마다 수행하실 필요가 없어진 것이지요. 단지 web.xml 파일에 내용을 추가하시기만 하면 됩니다.


감격의 순간이지 않습니까? 저는 이런 방법이 있다는 사실을 다수의 국내 개발자들이 모르고 있다는 것이 안타깝습니다. 널리 이 방법을 전파시켜 주시길 바랍니다. 한글 변환 빈을 만들어서 매번 불편하게 사용해 왔다면, 정말 신선한 방법이겠죠? ^_^


작성자: 심 우곤 (wgshim@greenbell.co.kr)
본 문서는 JLab (http://www.jlab.net) 홈페이지에서도 보실 수 있습니다.

Tag
tag는 게시물의 성격을 나타내는 키워드를 입력하는 공간입니다. login 후 사용하실 수 있습니다.
  • 이 필더는 Servlet으로 넘어가는 데이터만 Tomcat 내부에서 한글 처리하는 것입니다. -- 심우곤님 메일중에...
  • kenu
  • 2002-10-29 09:43:33
  • x
  • 이 내용을 다른 게시판에 올려도 되는지요..좋은 내용입니다.한글 해결이 쉬어지겠네요..
  • hyejin
  • 2002-10-29 17:26:43
  • x
  • 심우곤님과 jlab 저작권표시만 제대로 해주세요.
    그럼 될 것입니다.
  • kenu
  • 2002-10-29 20:17:06
  • x
  • 4.X 버전부터 지원이 되었던걸로 알고 있습니다.
    3.3a 버전의 경우는 자동으로 인터셉터를 했었구여...
    참고하시기 바랍니다.
  • ksany
  • 2002-11-05 19:31:53
  • x
  • request.setCharacterEncoding(String encoding)과 같은 것이겠죠?
  • 최재웅
  • 2002-11-19 11:32:25
  • x
  • 예.. 동일한 것입니다.
  • 심우곤
  • 2002-11-27 12:10:51
  • x
  • ㅠㅠ 감사합니다 ㅠㅠ
  • 허접 jsper
  • 2003-07-25 17:45:07

'프로그래밍 > Web' 카테고리의 다른 글

02 실전에서 쓰는 소스  (0) 2007.11.28
01 로그인....  (0) 2007.11.28
context-param  (0) 2007.11.27
밑의 에러 페이지 처리에 이어서.  (0) 2007.11.27
에러 페이지 처리  (0) 2007.11.27