在Tomcat7下不支持中文cookie,否则将会报错:
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
at org.apache.tomcat.util.http.CookieSupport.isV0Separator(CookieSupport.java:153)
at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:340)
at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:168)
at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:106)
at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:972)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:729)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
解决办法,在设置Cookie时将中文参数进行UTF-8编码,在接收Cookie时将中文参数解码。
URLEncoder.encode(name, "utf-8"); // 设置Cookie时对中文参数编码
URLDecoder.decode(cookies[i].getName(),"utf-8") // 读取Cookie时对中文参数解码
我遇到的应用场景是,因为前端将中文参数值未进行UTF-8编码直接存储Cookie,这样发送到后端服务器时就一直报错。
直接在前端JS存Cookie时将中文参数值进行UTF-8编码再进行存储即解决。