练习Cookies 报错 出现一个Servlet错误
demo 准备给cookie 添加时间
Date date = new Date();
Cookie c_time = new Cookie("time",date);
response.addCookie(c_time);
报出500错误: 原因时tomcat中cookies不能有空格
HTTP Status 500 – Internal Server Error
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)
cn.itcast.cookie.CookieDemo4.doPost(CookieDemo4.java:43)
cn.itcast.cookie.CookieDemo4.doGet(CookieDemo4.java:48)
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.31
所以使用格式化去除空格就ok 以下:
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd/hh:mm:ss");
String currentTime = format.format(date);
System.out.println(currentTime);
Cookie c_time = new Cookie("time",currentTime);
response.addCookie(c_time);
或者采用URL编码和解码
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd/hh:mm:ss");
//URL编码
curr_date = URLEncoder.encode(curr_date, "utf-8");
//URL解码
//curr_date = URLDecoder.decode(curr_date, "utf-8");
Cookie c_time = new Cookie("time",curr_date);
response.addCookie(c_time);