Servlet第五篇Cookie
Posted kwdlh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet第五篇Cookie相关的知识,希望对你有一定的参考价值。
Cookie的基本使用
public class MyServletA extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("name", URLEncoder.encode("张三", "utf-8"));
cookie.setMaxAge(1000);
resp.getWriter().write("服务器返回了Cookie!");
resp.addCookie(cookie);
}
}
public class MyServletB extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("服务器拿到Cookie:");
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
resp.getWriter().write(name + "------" + URLDecoder.decode(cookie.getValue(), "utf-8") + " ");
}
}
}
Cookie的有效期
通过setMaxAge(int expiry)进行设置
- expiry为正数,浏览器会把Cookie写到硬盘中,只要还在expiry秒之前,登陆网站时该Cookie就有效。
- expiry为负数,浏览器不会把Cookie写到硬盘中,Cookie是临时性的,仅在本浏览器内有效,默认值为-1。
- expiry为0,相当于删除Cookie。Cookie机制没有提供删除Cookie对应的方法,把expiry设置为0等同于删除Cookie。
Cookie的方法
setPath(String uri),只有该资源路径才能获取Cookie
Cookie记录上次登录时间
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
Cookie[] cookies = req.getCookies();
if(cookies==null){
resp.getWriter().write("第一次访问!");
}else{
resp.getWriter().write("上次访问时间:");
for (Cookie cookie : cookies) {
if ("previousTime".equals(cookie.getName())) {
System.out.println(cookie.getValue());
resp.getWriter().write(URLDecoder.decode(cookie.getValue(),"utf-8"));
break;
}
}
}
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = simpleDateFormat.format(new Date());
String encode = URLEncoder.encode(time,"utf-8");
Cookie cookie=new Cookie("previousTime",encode);
resp.addCookie(cookie);
}
注意事项:
Cookie cookie=new Cookie(String name,String value)的value值中不能包含特殊字符,包括分号(;)、逗号(,)、等号(=)以及空格( )等。如果有特殊符号,则会报500
解决方案:
方案1. 如上: 先进行URLEncoder.encode(str,"utf-8"),在URLDecoder.decode(str,"utf-8")
方案2. 使用resp.setHeader("Set-Cookie","name=tom")
以上是关于Servlet第五篇Cookie的主要内容,如果未能解决你的问题,请参考以下文章