解决Cookie乱码问题
Posted 雪山非猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Cookie乱码问题相关的知识,希望对你有一定的参考价值。
写了一个cookie的定义和获取,结果我输入中文后,页面报错
报错信息如下:
type Exception report message An exception occurred processing JSP page /demo1/page3.jsp at line 16 description The server encountered an internal error that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: An exception occurred processing JSP page /demo1/page3.jsp at line 16 13: </form> 14: <% 15: Cookie cookie=new Cookie("message","涓枃"); 16: response.addCookie(cookie); 17: %> 18: </body> 19: </html> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:575) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) root cause java.lang.IllegalArgumentException: Control character in cookie value or attribute. org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:205) org.apache.tomcat.util.http.CookieSupport.isHttpToken(CookieSupport.java:229) org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCookie.java:185) org.apache.catalina.connector.Response.generateCookieString(Response.java:1054) org.apache.catalina.connector.Response.addCookie(Response.java:996) org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:380) org.apache.jsp.demo1.page3_jsp._jspService(page3_jsp.java:97) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
解决方案:cookie也要转码的
定义一个cookie:
1 <%@page import="java.net.URLEncoder"%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>page3</title> 9 </head> 10 <body> 11 <form action="page3.jsp"> 12 <input type="text" name="text" value=""/> 13 <input type="submit" name="提交"/> 14 </form> 15 <% 16 //转码 17 Cookie cookie=new Cookie("message",URLEncoder.encode("中文", "utf-8")); 18 response.addCookie(cookie); 19 %> 20 </body> 21 </html>
page4.jsp(获取cookie)
1 <%@page import="java.net.URLDecoder"%> 2 <%@page import="java.net.URLEncoder"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>page4</title> 10 </head> 11 <body> 12 <% 13 String text = request.getParameter("text"); 14 out.print("text------------->"+text); 15 Cookie[] cookies=request.getCookies(); 16 if(cookies!=null){ 17 for(Cookie cookie:cookies){ 18 if(cookie.getName().equals("message")){ 19 //cookie解码 20 out.print("cookie value------>"+URLDecoder.decode(cookie.getValue(), "utf-8")); 21 } 22 } 23 %> 24 25 </body> 26 </html>
以上是关于解决Cookie乱码问题的主要内容,如果未能解决你的问题,请参考以下文章