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> |
'자바(JAVA)' 카테고리의 다른 글
Java 파일입출력의 다양한 방법들을 배워본다 (1) | 2012.09.28 |
---|---|
자바 난수 발생 랜덤(Random) 클래스로 데이터를 추출하는 다양한 방법 (0) | 2012.09.26 |
이클립스(Eclipse) SWT 샘플 프로젝트 실행 (0) | 2012.09.20 |
이클립스(Eclipse) 로 SWT 설치후 프로젝트 개발 준비하기 (0) | 2012.09.20 |
Java 를 알기위한 기본 용어 정리와 관계도 (1) | 2012.03.18 |
JSTL 의 변수 설정기본 정보와 예제들 (0) | 2010.12.13 |
weblogic.xml 설정 스크립트에 대한 내용 (0) | 2010.08.10 |
스트럿츠 (Struct) 기반 xml 을 WAS 재구동없이 자동으로 로드하기 (0) | 2010.08.07 |