Servlet Cookie 处理学习笔记

什么是Cookie?

Cookie是一小段文本信息,由服务器发送给客户端浏览器,浏览器把它保存下来,并在每次请求同一网站时,将这些信息发送给服务器。Cookie常用于记录一些用户的偏好设置、登录状态等信息。

如何创建和发送Cookie?

在Servlet中,可以通过javax.servlet.http.Cookie类来创建和发送Cookie。

javaCopy Code
Cookie cookie = new Cookie("name", "value"); response.addCookie(cookie);

以上代码创建了一个名为"name",值为"value"的Cookie并将其发送到客户端浏览器。

如何获取和使用Cookie?

在Servlet中,可以通过javax.servlet.http.HttpServletRequest对象的getCookies()方法来获取客户端发送的所有Cookie。

javaCopy Code
Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { String name = cookie.getName(); String value = cookie.getValue(); //... } }

以上代码获取了所有客户端发送的Cookie,并遍历打印了每个Cookie的名字和值。

实例

下面是一个简单的例子,展示如何使用Cookie记录用户的登录状态。

javaCopy Code
@WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String USERNAME = "admin"; private static final String PASSWORD = "123456"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if (USERNAME.equals(username) && PASSWORD.equals(password)) { // 登录成功,创建Cookie并发送到客户端浏览器 Cookie cookie = new Cookie("loginUser", username); cookie.setMaxAge(60 * 60 * 24 * 7); // 有效期1周 response.addCookie(cookie); response.sendRedirect(request.getContextPath() + "/main.jsp"); // 跳转到主页 } else { // 登录失败,返回错误信息 request.setAttribute("error", "用户名或密码不正确"); request.getRequestDispatcher("/login.jsp").forward(request, response); } } }

以上代码处理了用户登录请求,如果用户名和密码正确,则创建一个名为"loginUser",值为当前登录用户的Cookie并将其发送到客户端浏览器,有效期为1周。在主页中,可以通过获取这个Cookie来判断用户是否已经登录,从而展示不同的内容。

javaCopy Code
@WebServlet("/main") public class MainServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); boolean hasLogin = false; if (cookies != null) { for (Cookie cookie : cookies) { if ("loginUser".equals(cookie.getName())) { // 找到了名为"loginUser"的Cookie,表示用户已经登录 String username = cookie.getValue(); request.setAttribute("username", username); hasLogin = true; break; } } } if (!hasLogin) { // 用户未登录,跳转到登录页 response.sendRedirect(request.getContextPath() + "/login.jsp"); return; } request.getRequestDispatcher("/main.jsp").forward(request, response); } }

以上代码处理了用户访问主页的请求,首先通过获取所有Cookie来查找是否有名为"loginUser"的Cookie,如果找到了,则表示用户已经登录,可以展示主页的内容;否则跳转到登录页。在主页中,可以通过${username}来获取当前登录用户的用户名并展示在页面上。

以上是Servlet Cookie处理的学习笔记和实例,希望对你有所帮助。