주소창에 %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"); %>를 상단에 선언했을 경우 자동으로 처리해 주기 때문에 굳이 디코딩까지는 안해주어도 상관없다.
이 부분에 대해서는 권남님의 포스팅에 잘 정리되어 있으니 자세한 내용은 그곳에서 참고...
이게 또 파이어폭스에서는 잘 됩니다만.
전 IE 사용할때는 또 깨지더라구요..
OTL..
그래서 자바 스크립트에서 encodeURI()로 변경해서 넘겨 줍니다.
저는 IE기반으로 하고 있어서 문제없이 잘 사용하고 있는중이었거든요.
서버측 코드라서 브라우저 종류에 따라 문제가 생기지는 않을꺼라고 생각했는데 먼가 다른 요소가 있나보군요.