通过cookie保存用户信息并显示时,报错 An invalid character [32] was present in the Cookie value

slowside45 2017-07-31 04:50:33
按照教材例程学习用cookie保存用户信息并传递cookie值时,遇到了如下问题:

信息输入、保存界面代码:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.net.URLDecoder" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>通过cookie保存并读取用户信息</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
String user="";
String date="";
if(cookies != null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("mrCookie")){
user=URLDecoder.decode(cookies[i].getValue().split("#")[0]);
date = cookies[i].getValue().split("#")[1];
}
}
}
if("".equals(user)&&"".equals(date)){
%>
游客您好,欢迎初次光临。
<form action="deal.jsp"method="post">
请输入姓名:<input name="user"type="text">
<input name="button"type="submit"value="确定">
</form>
<% }else{
%>
欢迎[<b><%= user%></b>]再次光临<br>
您注册的时间是:<%= date %>
<%
}
%>


</body>
</html>


信息处理页面代码:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.net.URLEncoder" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>写入cookies</title>
</head>
<body>
<%
request.setCharacterEncoding("GB18030");
String user=URLEncoder.encode(request.getParameter("user"),"utf-8");
Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString());
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
%>
<script type="text/javascript">window.location.href="index.jsp"</script>
</body>
</html>


错误信息如下:
严重: Servlet.service() for servlet [jsp] in context with path [/第六章JSP内置对象] threw exception [An exception occurred processing JSP page [/deal.jsp] at line [17]

14: String user=URLEncoder.encode(request.getParameter("user"),"utf-8");
15: Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString());
16: cookie.setMaxAge(60*60*24*30);
17: response.addCookie(cookie);
18: %>
19: <script type="text/javascript">window.location.href="index.jsp"</script>
20: </body>


Stacktrace:] with root cause
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:182)
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:115)
at org.apache.catalina.connector.Response.generateCookieString(Response.java:1010)
at org.apache.catalina.connector.Response.addCookie(Response.java:962)
at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:385)
at org.apache.jsp.deal_jsp._jspService(deal_jsp.java:127)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:625)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1372)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)




Internet选项中关于cookie使用的权限已全部设置为允许,请各位帮帮忙
...全文
6460 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
verejava 2018-07-14
  • 打赏
  • 举报
回复
是否有中文, 把中文转码 URLEncoder.encode
一字清华 2018-07-14
  • 打赏
  • 举报
回复
引用 10 楼 VBProFan 的回复:
看一下 new java.util.Date().toLocaleString() 的日期和时间之间是不是有个空格,replace(" ","_") 试试



改写这句:Cookie cookie=new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString().replace(" ", "_"));
就好了
House233 2018-03-30
  • 打赏
  • 举报
回复
String user=URLEncoder.encode(request.getParameter("user"),"utf-8"); Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString()); 这里把cookie的value整体进行encode试试,改成 String user=URLEncoder.encode(request.getParameter("user")+"#"+new java.util.Date().toLocaleString(),"utf-8"); Cookie cookie = new Cookie("mrCookie",user);
VBProFan 2018-03-17
  • 打赏
  • 举报
回复
不知道王国辉大神写书的时候是没有测试呢,还是他机子的时间格式没有空格,唉~
VBProFan 2018-03-17
  • 打赏
  • 举报
回复
看一下 new java.util.Date().toLocaleString() 的日期和时间之间是不是有个空格,replace(" ","_") 试试
VBProFan 2018-03-17
  • 打赏
  • 举报
回复
new java.util.Date().toLocaleString()
slowside45 2017-07-31
  • 打赏
  • 举报
回复
引用 7 楼 pany1209 的回复:
[quote=引用 4 楼 slowside45 的回复:] [quote=引用 2 楼 pany1209 的回复:] java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value。。。 降低tomcat版本或者处理掉空格
没有发现空格字符。我的tomcat版本是9.0 需要降低到什么版本?[/quote] tomcat7......[/quote] 很尴尬的是我的jdk是1.8 tomcat7不支持 这个例程我是不是该跳过它了
李德胜1995 2017-07-31
  • 打赏
  • 举报
回复
引用 4 楼 slowside45 的回复:
[quote=引用 2 楼 pany1209 的回复:] java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value。。。 降低tomcat版本或者处理掉空格
没有发现空格字符。我的tomcat版本是9.0 需要降低到什么版本?[/quote] tomcat7......
slowside45 2017-07-31
  • 打赏
  • 举报
回复
引用 5 楼 zc881124 的回复:
String user=URLEncoder.encode(request.getParameter("user"),"utf-8"); 把user的值打印出来看看
不太明白怎么打印出来,我输入的值是a,没有别的符号,然后我把 Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString()); 改成Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toString()); 报错如下:Type Exception Report Message An exception occurred processing JSP page [/deal.jsp] at line [17] Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception org.apache.jasper.JasperException: An exception occurred processing JSP page [/deal.jsp] at line [17] 14: String user=URLEncoder.encode(request.getParameter("user"),"utf-8"); 15: Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toString()); 16: cookie.setMaxAge(60*60*24*30); 17: response.addCookie(cookie); 18: %> 19: <script type="text/javascript">window.location.href="index.jsp"</script> 20: </body>
110成成 2017-07-31
  • 打赏
  • 举报
回复
String user=URLEncoder.encode(request.getParameter("user"),"utf-8"); 把user的值打印出来看看
slowside45 2017-07-31
  • 打赏
  • 举报
回复
引用 2 楼 pany1209 的回复:
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value。。。 降低tomcat版本或者处理掉空格
没有发现空格字符。我的tomcat版本是9.0 需要降低到什么版本?
slowside45 2017-07-31
  • 打赏
  • 举报
回复
引用 1 楼 zc881124 的回复:
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value Ascii 32对应的是空格,检查下是否存在空格。
您指的是获取cookie值的源代码中有无空格 还是网页表单输入内容有无空格? 我排查后没发现空格。 原文中的错误信息是输入用户信息后出现的,若不打开输入用户信息的网页,直接打开处理cookie的网页(原文中第二个代码),错误提示如下: HTTP Status 500 – Internal Server Error -------------------------------------------------------------------------------- Type Exception Report Message An exception occurred processing JSP page [/deal.jsp] at line [14] Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception org.apache.jasper.JasperException: An exception occurred processing JSP page [/deal.jsp] at line [14] 11: <body> 12: <% 13: request.setCharacterEncoding("GB18030"); 14: String user=URLEncoder.encode(request.getParameter("user"),"utf-8"); 15: Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString()); 16: cookie.setMaxAge(60*60*24*30); 17: response.addCookie(cookie); Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:588) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) Root Cause java.lang.NullPointerException java.net.URLEncoder.encode(URLEncoder.java:204) org.apache.jsp.deal_jsp._jspService(deal_jsp.java:124) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) Note The full stack trace of the root cause is available in the server logs.
李德胜1995 2017-07-31
  • 打赏
  • 举报
回复
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value。。。 降低tomcat版本或者处理掉空格
110成成 2017-07-31
  • 打赏
  • 举报
回复
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value Ascii 32对应的是空格,检查下是否存在空格。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧