在跟着demo学习时,测试的时候遇到这个问题:
Type Exception Report
Message An invalid character [32] was present in the Cookie value
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:182)
org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:115)
org.apache.catalina.connector.Response.generateCookieString(Response.java:1019)
org.apache.catalina.connector.Response.addCookie(Response.java:967)
org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:386)
com.itheima.lastaccesstime.LastAccessTimeServlet.doGet(LastAccessTimeServlet.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/8.5.23
异常报在:
response.addCookie(cookie);
这一行!
cookie这个对象存储的是:
"yyyy-MM-dd hh:mm:ss"
这个格式的字符串,那么在查询相关资料后,有提到:name参数不能保存含有逗号、分号、美元($)、空格等符号,否则会出现:
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
这个异常!
所以,在我们获得当前时间:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String currentTime = sdf.format(date);
//1、创建Cookie 记录当前的最新的访问时间
Cookie cookie = new Cookie("lastAccessTime",currentTime);
时间的时候,有格式化输出yyyy-MM-dd hh:mm:ss,那么,在这里面就包含了一个 (空格),所以会报这个异常!
解决思路:去掉空格,用其他合法的符号代替!比如就用个 - 吧!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
运行一下:
您上次的访问的时间是:2018-10-23-11:23:00
解决了!