6.Cookie
Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。
如果浏览器被配置为存储 Cookie,它将会保留此信息直到到期日期。如果用户的浏览器指向任何匹配该 Cookie 的路径和域的页面,它会重新发送 Cookie 到服务器。
可在servlet中添加、读取、删除cookie。
Servlet Cookie 处理需要对中文进行编码与解码,方法如下:
String str = java.net.URLEncoder.encode("中文","UTF-8"); //编码
String str = java.net.URLDecoder.decode("编码后的字符串","UTF-8"); // 解码
1. 通过 Servlet 添加 Cookie⚓
@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
resp.setContentType("text/html");
String name = req.getParameter("name");
String url = req.getParameter("url");
Cookie nameCookie = new Cookie("name", URLEncoder.encode(name, "UTF-8"));//中文需要转码存储
Cookie urlCookie = new Cookie("url", url);
nameCookie.setMaxAge(60);
nameCookie.setComment("storaged name");
urlCookie.setMaxAge(60);
urlCookie.setComment("storaged url");
resp.addCookie(nameCookie);
resp.addCookie(urlCookie);
//重定向
resp.sendRedirect("/ReadCookie");
// throw new ServletException();
}
}
2. 通过 Servlet 读取Cookie⚓
@WebServlet("/ReadCookie")
public class ReadCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
resp.setContentType("text/html");
Cookie[] cookies = req.getCookies();
out.write("<ul>\n");
for (Cookie cookie:cookies){
//读取编码的cookie需要解码
out.write( cookie.getName() + ":<li>" + URLDecoder.decode(cookie.getValue(), "UTF-8") + "</li>\n");
}
out.write("</ul>\n");
}
}
3. 通过 Servlet 删除 Cookie⚓
如果想删除一个 cookie,那么您只需要按照以下三个步骤进行:
- 读取一个现有的 cookie,并把它存储在 Cookie 对象中。
- 使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。
- 把这个 cookie 添加到响应头。