源代码
package cookie;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class LastAccessServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 指定服务器输出内容的编码方式UTF-8,防止发生乱码
response.setContentType("text/html;charset=utf-8");
String lastAccessTime=null;
// 获取所有的cookie,并将这些cookie存放在数组中
Cookie[] cookies = request.getCookies();
// 遍历cookies数组
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if ("lastAccess".equals(cookies[i].getName())) {
// 如果cookie的名称为lastAccess,则获取该cookie的值
lastAccessTime = cookies[i].getValue();
break;
}
else {
System.out.println(cookies[i].getName()+cookies[i].getValue());
}
}
// 判断是否存在名称为lastAccess的cookie
if (lastAccessTime == null) {
response.getWriter().print("您是首次访问本站!!!");
} else {
response.getWriter().print("您上次的访问时间是:"+ lastAccessTime);
}
// 创建cookie,将当前时间作为cookie的值发送给客户端
String currentTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
Cookie cookie= new Cookie("lastAccess",currentTime);
response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
}
点击运行后刷新网页发现并没有成功发送cookie也就是
response.addCookie(cookie);
这一句并没有运行。
检查Tomcat Localhost log 日志发现,cookie中存在无效字符(空格)。
解决方案:
在tomcat的根目录的conf目录context.xml加上下面的代码即可解决问题
<!-- 解决Cookie中不允许出现非法字符--> <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />

还有另一种解决办法,存Cookie之前先将需要传的字符串编码,使用的时候在解码,需要用到下面的俩个方法
URLEncoder类的静态方法encode()
URLDecoder类的静态方法decode()
String one=",,,,,";//全是逗号
//1.先编码
one=URLDecoder.decode(one,"utf-8") ;
//2.存Cookie
response.addCookie(new Cookie("name",one));
//3.后面需要获取Cookie中的one值,解码后再输出
one=URLDecoder.decode(one,"utf-8");
System.out.println(one);
这篇博客讨论了在Java Servlet中处理Cookie时遇到的问题,即Cookie无法正确发送到客户端。原因在于Cookie值中存在非法字符导致。解决方案包括在Tomcat配置中启用LegacyCookieProcessor或者在存取Cookie前进行URL编码和解码。博客还提供了具体的操作代码示例。

2722

被折叠的 条评论
为什么被折叠?



