错误代码:
package Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet(value = "/lasttime")
public class LastTimeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Cookie[] cookies = request.getCookies();
Cookie cookie1 = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("time".equals(cookie.getName())) {
cookie1 = cookie;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String format = sdf.format(date);
cookie.setValue(format);
response.getWriter().println("上次登陆时间为:" + cookie.getValue());
}
}
}
if (cookie1 == null){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String format = sdf.format(date);
System.out.println(format);
Cookie cookie = new Cookie("time",format);
response.addCookie(cookie); <----报错位置:java.lang.IllegalArgumentException: Cookie值中存在无效字符[32]
response.getWriter().println("你是第一次登录!!");
}
}
}
复制代码
报错详情:
错误分析: 通过报错位置之前进行时间字符串进行打印输出发现内容输出正常 因此导致错误的只可能是报错前后的两行代码:
Cookie cookie = new Cookie("time",format); response.addCookie(cookie);
前一句是创建Cookie对象,后者则是将对象添加到响应体中,而报错提示为无效字符,因此只能是format字符串的问题,通过查询资料发现,Cookie是禁止使用空格字符的,因此format字符串中的空格被识别为非法字符,那么解决方法就很简单了
解决方法: 为时间格式解析中的空格使用其他合法字符进行替换
成功解决: