Outsider's Dev Story

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

JSP환경에서 AJAX로 파라미터 한글로 보내기

파라미터를 한글로 던지는게 일반적이라고 생각하지는 않지만 어쩔수 없이 그런 상항이 생겼다. DB에는 한글로 들어 있었고 DB수정을 요구할 수는 없는 상황에서 어쩔수 없이 파라미터를 한글로 던져야 했다.

환경은 JSP에 WAS로 Weblogic이 올라가 있었고 AJAX에는 prototype.js를 사용하고 있었다. OS는 AIX와 Windows에서의 테스트 결과 동일했기 때문에 큰 영향은 없을 것이라고 본다. 이렇게 환경을 거론하는 이유는 다른 환경에서 어떻게 돌아갈지 잘 모르기 때문이다.

물론 JSP파일은 euc-kr기반이다. UTF-8로 인코딩된 환경이라면 한글이라고 큰 문제가 생기진 않겠지.... UTF-8로 개발하기가 만만치 않아서 문제이지만......

정확한 문제는 euc-kr로 된 JSP파일에서 AJAX를 통해서 파라미터를 던지는데(GET방식이다.) AJAX는 전송을 UTF-8로 하기 때문에(전혀 없진 않은것 같지만 AJAX통신을 다른 인코딩으로 하는건 만만찮은 일인것 같다.) 요청받은 JSP에서 받은 parameter가 인코딩문제로 읽을 수 없게 되어서 결국 쿼리도 날릴수 없게 된 상황이다.

JAVA에서 getByte로 인코딩을 바꿔보고 별의 별짓을 다해봐도 안되었는데 생각보다 쉽사리 해결했다. 역시 안될때는 동작원리를 잘 고민해봐야하는것 같다...

간단히 봤을때 파라미터를 던질때 UTF-8로 던진다. 이걸 euc-kr로 받는게 문제였는데 JSP인코딩관련해서 올린 포스팅이 있었다. 우린 이걸 묻지마 3줄이라고 부른다.. ㅋ 단순히 여기서 인코딩을 UTF-8로 바꾸어 주었다.


<%@ page contentType="text/html; charset=utf-8" %>
<% request.setCharacterEncoding("utf-8"); %>
<% response.setContentType("text/html; charset=utf-8"); %>

대충보면 알수 있다시피 현재페이지의 인코딩을 설치하고 Requet와 Response의 인코딩을 설정해 주었다. 즉 파라미터를 받을 때 여기서 설정된 인코딩형태로 받는 것이기 때문에 여기서 UTF-8로 설정해서 AJAX로 던진 파라미터를 올바른 인코딩으로 받았다.

이렇게 한뒤에 JSP파일에서는 별다른 인코딩없이 필요한 String을 만들어서 화면에 출력해 주었더니 한글을 포함한 AJAX데이터 전송에 아무런 문제가 일어나지 않았다.


덧) 내가 맡은 부분이 아니어서 처음부터 붙잡고 있었던건 아니지만 해결할때는 꽤 고생했었는데 이렇게 설명하자니 되게 뻔한내용같네.. ㅡ..ㅡ

2008/01/30 02:02 2008/01/30 02:02