Spring 환경에서 JSON 사용시 한글 Encoding 에러 처리

자바(JAVA)

Spring 환경에서 JSON 사용시 한글 Encoding 에러 처리

 

개발환경 : JDK 1.5, Spring 2.0, window 7 32bit

 

간만에 스프링 환경에서 프로젝트를 시작하게 됬다.

나이가 들어 잊어버리는 것도 양이 많아졌다. 예전에 셋팅한

내용들이 하나도 기억이 안나고 어떻게 찾아야 될지도 모르겠다.

하지만 포기할수 없지.  결국엔 해결책을 찾긴 했지만

시간이 많이 걸렸다.

 

1. 첫번째는 로컬에서 스크립트로 보낼 때 setting 값을 맞추는 것이다.

 

Ajax 를 편리하게 사용하기 위한 API 가 아닌 생짜로 사용했을 때

쓰이는 함수들인데, 서버에서 Encoding 하고 클라이언트(브라우저) 에선

Decoding 하면 된다.

서버에서 보낼때 함수는 java.net.URLEncoder.encode(), decode() 메소드 사용하고

클라이언트(자바스크립트)decodeURIComponent(), encodeURIComponent()

사용한다. 그리고 Ajax 에서는 기본인코딩이 UTF-8 이다.

 

jsp/servlet 환경에서 사용한 예제이다.

클라이언트에서 받는 부분의 자바스크립트는 다음과 같다.

 

var operatorParam = encodeURIComponent("operator");

var operatorValue = encodeURIComponent(document.getElementById("operator").value);

   

var fullParameter =

        "?" + nameParam + "=" + nameValue

        + "&" + oper1Param + "=" + oper1Value

        + "&" + oper2Param + "=" + oper2Value

        + "&" + operatorParam + "=" + operatorValue;

   

request.onreadystatechange = function() {

   if (request.readyState == 4) {

       alert("Response : " + request.responseText);

       eval("var result = " + request.responseText);

       alert(result.name + "님 계산결과는 " + result.value + "입니다.");

   }

}

request.open("GET", "AjaxProcessor.jsp" + fullParameter);

request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

request.setRequestHeader('Ajax', 'true');

request.send("");

 

 

서버측 인코드는 다음 헤더값을 셋팅하면된다. 그리고 받은 값을 request 에서

꺼내서 쓰면 된다.

 

<%@ page contentType="text/plain; charset=utf-8" pageEncoding="EUC-KR"%>

 

String name = request.getParameter("name");

String oper1 = request.getParameter("oper1");

String oper2 = request.getParameter("oper2");

String operator = request.getParameter("operator");

 

double oper1Value = Double.parseDouble(oper1);

double oper2Value = Double.parseDouble(oper2);

 

2. 두번째는 WAS 설정을 바꿔준다

 

아파치일 경우인데 다른 WAS 도 비슷한 옵션이 있으므로 찾아 셋팅하면 된다.

두가지가 있는데 JAVA_OPTS 값을 셋팅해서 넘기는 것과 Connector 설정이 있다.

옵션값은 –Dfile.encoding = “UTF-8” 인데 이것을

Set JAVA_OPTS = %JAVA_OPT% -Dfile.encoding=UTF-8 로 한다.

그리고 Connector 설정은 <Connector connectionTimeout=”20000” port=”80”

Protocol=”HTTP/1.1” redirectPort=”8443”

URLEncoding=”UTF-8” UseBodyEncodingForURL=”true” /> 로 하면된다.

 

3. 세번째는 Spring 환경이라 web.xml 에서 필터설정을 한다.

 

<filter>

    <filter-name>Encoding Filter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>Encoding</param-name>

 

      <!-- UTF-8 인경우 아래와 같이 해보구 UTF-8로도 변경하여 테스트 -->

      <param-value>EUC-KR</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>Encoding Filter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

 

4. 네번째는 Spring 에 포함되어있는 JsonView contentType 값을 UTF-8 로 넘기는 것이다

 

여러가지 방법을 셋팅하고 테스트 해보았지만

한글 깨짐을 해결하지 못했다. 하지만 이 마지막 방법으로 가뿐하게

처리 할수 있었다.

 

<bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView">

     <property name="contentType" value="application/json;charset=UTF-8" />

</bean>

 

Posted by 녹두장군

댓글을 달아 주세요