Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

TOMCAT 5.5에서 GET방식으로 한글파라미터 사용하기

JEUS를 사용하다가 톰캣으로 넘어왔더니 GET방식으로 한글 파라미터를 넘기는 것이 되지 않았다. POST전송이야 알아서 되니까 괜찮고 GET방식으로 파라티터를 넘길 때 URL Encoding과정을 거쳐야 된다. 영문,숫자는 괜찮지만 특수기호나 한글이 들어가게 될 경우 주소창에 표시되는데 문제가 있기 때문에 URL Encoding해서 보내준다.

주소창에 %BF%D5%B1%E2%C3%E1 같은 형태로 쓰여진 것을 본적이 있을텐데 이것이 인코딩을 해준 것이다. 당연히 받을때는 디코딩을 해주고... 그냥 파라미터는 엔코딩한다고 생각하는게 차라리 맘편하다.

String encode(String s,String enc) 의 형태를 띄고 있다. 첫번째 파라미터는 엔코딩할 스트링이고 두번째 파라미터는 캐릭터 엔코딩 타입이다. URLEncoder.encode("블로그","utf-8") 와 같은 형태로 사용한다. URLEncoder는 java.net에 정의되어 있다.

근데 잘 돌아가던 것이 WAS를 변경해서 톰캣 5.5로 넘어왔더니 별 짓을 다해도 한글 GET파라미터가 도저히 먹지를 않았다.

톰캣설치폴더\conf\server.xml 파일에서 90~100라인정도에 보면 다음과 같은 내용이 있다.


<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8090" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector className="org.apache.catalina.connector.http.HttpConnector"
           port="8443" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" disableUploadTimeout="true"
           acceptCount="100" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"  >


서버 설정에 따라서 세부 내용은 약간 다를 수는 있다. 이곳에 URIEndode부분을 추가해 준다.





<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8090" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector className="org.apache.catalina.connector.http.HttpConnector"
           port="8443" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" disableUploadTimeout="true"
           acceptCount="100" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" URIEncoding="utf-8" >



이렇게 설정해 주고 톰캣을 restart시키면 한글 GET파라미터가 먹는다. 원칙상으로는 디코딩을 해주어야 하지만 <% request.setCharacterEncoding("utf-8"); %>를 상단에 선언했을 경우 자동으로 처리해 주기 때문에 굳이 디코딩까지는 안해주어도 상관없다.

이 부분에 대해서는 권남님의 포스팅에 잘 정리되어 있으니 자세한 내용은 그곳에서 참고...
2008/08/13 16:26 2008/08/13 16:26