2009. 12. 22. 11:44

JSP에서 request로 전송되는 parameter 한글처리 방법





1. HTTP의 POST메소드 전송(요청):  요청을 페이지마다 내장객체 request를 이용해서 한글처리한다.
 이때 request.getParameter()메소드 또는 액션태그의 setProperty 태그 보다는 앞에서 처리해야 한다.

<% request.setCharacterEncoding("EUC-KR"); %>
<%
     request.getParameter("name");
     .
     .
     .
%>
<jsp:useBean id="boardBean" class="test.BoardBean">
 <jsp:setProperty name="boardBean" property="*" />
</jsp:useBean>

2.  HTTP의 POST메소드 전송(요청):  web.xml파일에 filter element로 추가해서 모든 페이지에서 개별적으로 한글 처리 하지 않고 사용할 수 있다.

<filter>element와  <filter-mapping>element를 추가한다.

엘레먼트의 순서는다음과 같다.
Content Model : (((description*, display-name*, icon*)) | distributable | context-param | filter | filter- mapping | listener | servlet | servlet-mapping | session-config | mime-mapping | welcome-file-list |  error-page | jsp-config | security-constraint | login-config | security-role | ((env-entry*, ejb-ref*, ejb-local-ref*, ((service-ref*)), resource-ref*, resource-env-ref*, message-destination-ref*, persistence- context-ref*, persistence-unit-ref*, post-construct*, pre-destroy*)) | message-destination | locale-encoding-mapping-list)*


  <filter>
   <filter-name>encoding_euckr</filter-name>
   <filter-class>test.filters.SetCharacterEncodingFilter</filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>euc-kr</param-value>
   </init-param>
  </filter>
 
  <filter-mapping>
   <filter-name>encoding_euckr</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>


이때 사용하는 SetCharacterEncodingFilter.java 파일은 인스톨 버전으로 톰캣을 설치할때 옵션으로 example을 설치했다면 
%CATALINA_HOME%\webapps\examples\WEB-INF\classes\filters폴더안에 있다.
binary버전으로 설치한 경우에는 위의 폴더가 항상 있다.



3.  HTTP의 GET메소드 전송(요청): HTTP의 GET전송 방식은 binary방식이 아니고 queryString방식이기 때문에 필터에 의한 방식에 parameter를 제대로 전송할 수 없다.
이유는 queryString은 URI에 추가적으로 덧붙여져서 전송되는 방식이어서 변수처리되기 이전에 전송되어지기 때문이다.
위에서 사용한   SetCharacterEncodingFilter.java 파일은 parameter를 받기 이전에encoding이라는 변수를 사용해서 한글처리를 하는 것인데 URI 주소값은 그 이전 시점에 동작하기 때문이다.

해결방법 : server.xml의 <Server>   ->  <Service>  ->  <Connector> element에 다음의 내용을 추가해주면 HTTP의 GET방식에서도 한글 처리가 된다.

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"  URIEncoding="euc-kr"/>

주의: <Connector> element가 두개 있으므로 잘 보고 자신이 사용하고 있는 HTTP 서비스 포트에 해당하는 Connector에 추가한다.