记住上一次的访问时间
需求:
1.访问一个servlet,如果第一次访问,则提示:您好,欢迎首次访问
2.如果不是第一次访问,则提示:欢迎回来,您上一次访问时间为:显示时间
分析:
1.可以采用Cookie来完成
2.在服务器中的Servlet判断是否有一个名为lastTime的Cookie
——有:不是比一次访问
————欢迎回来,您上一次访问时间为:显示时间
————写回Cookie:lastTime=时间
——没有:是第一次访问
————响应数据:您好欢迎首次访问
————写回Cookie:lastTime=时间
写的时候一直报错:HTTP状态 500 - 内部服务器错误,Cookie值中存在无效字符[32]
搜索一下:
项目报错:java.lang.IllegalArgumentException:Cookie值中存在无效字符[32]
在Cookie中,某些特殊字符不能存在。例如:空格、逗号、等于号、双引号、斜杠等特殊符号
解决方法:
1.存Cookie之前先将需要传的字符串编码,使用的时候在解码,需要用到下面的两个方法
URLEncoder类的静态方法encode()
URLDecoder类的静态方法decode()
2.在tomcat的根目录的conf目录context.xml加上下面的代码
我是在 SimpleDateFormat("yyyy-MM-ddHH:mm:ss")中有空格
答:
package com.qiku.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet(name = "zyCookie" , urlPatterns = "/zycookie")
public class zyCookie extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
boolean sessionNew = session.isNew();
Cookie[] cookies = req.getCookies();//获取所有的cookie
if (cookies != null ){
for (Cookie c : cookies){
String name = c.getName();//获取cookie的名字
if (name.equals("lastTime")){
String format = sdf.format(date);
c.setValue(format);
resp.addCookie(c);
String cvalue = c.getValue();
System.out.println("欢迎回来,您上一次访问时间为:" + cvalue);
break;
}
}
}
if (sessionNew){
String s = sdf.format(date);
Cookie cookie = new Cookie("lastTime", s);
cookie.setValue(s);
resp.addCookie(cookie);
System.out.println("您好,欢迎首次访问");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}



