톰캣 환경에서 쿠키에 한글 저장시 오류가 나는 경우
Servlet/JSP 톰캣 환경에서 쿠키값으로 한글을 저장하려는 경우 다음과 같은 오류가 발생할 것입니다. 오류 내용으로는 들어가서는 안될 문자값이 쿠키 값으로 들어갔다는 것입니다.
Stacktrace:] with root cause
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
     at org.apache.tomcat.util.http.LegacyCookieProcessor.needsQuotes(LegacyCookieProcessor.java:412)
     at org.apache.tomcat.util.http.LegacyCookieProcessor.generateHeader(LegacyCookieProcessor.java:284)
     at org.apache.catalina.connector.Response.generateCookieString(Response.java:940)
     at org.apache.catalina.connector.Response.addCookie(Response.java:888)
     at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:392)
     at org.apache.jsp.beanTest_jsp._jspService(beanTest_jsp.java:117)


아마 여러분은 이런식으로 쿠키를 저장했을것입니다. 그러나 쿠키는 몇몇 문자를 제외한 ASCII 코드만을 이름과 값으로 사용할 수 있습니다.
<%                                                                                            
     Cookie cookie = new Cookie("message""한글입니다."); 
     response.addCookie(cookie);
%>
cs


따라서 java.net.URLEncoder 클래스를 사용하여 쿠키값을 인코딩 해주어야 합니다.  java.net.URLEncoder 클래스를 page 디렉티브를 사용하여 import하고 UTF-8로 인코딩하여 저장하면 오류가 발생하지 않습니다.
<%                                                                                            
     Cookie cookie = new Cookie("message", URLEncoder.encode("한글입니다.""UTF-8")); 
     response.addCookie(cookie);
%>
 
cs


더욱 자세한 내용은 다음글을 참고합니다.
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,