本文共 3327 字,大约阅读时间需要 11 分钟。
本章学习Cookie的相关知识
1.概念
我们知道,一个http请求可能附带用户自己的参数,如用户名或者密码等等。如果需要多个请求共享同一数据的话,那么就需要Cookie进行存储已达到目的,典型的就是三天免登陆的例子
2.方法
1)首先创建Cookie对象
Cookie cookie = new Cookie("键","值");
Cookie cookie = new Cookie("jwang","haoren");
2)在响应中添加Cookie
response.addCookie(cookie);
经过上面两步之后,我们的浏览器在访问这个应用的时候会自动的带上这个cookie
3)设置cookie的有效时间
上面我们设置的cookie是存储在浏览器内存之中,也就是说,我们关闭浏览器之后,cookie就会失效。但是有些时候我们需要单独的给cookie设置一个有效期,以保证它在一定时间内不会因为关闭浏览器的原因而失效!
//设置cookie的有效时间,单位秒(s) cookie.setMaxAge(1*24*60*60);
这样的话,即使浏览器关闭之后,再次打开执行该应用的请求,仍然带有该cookie
4)设置cookie的有效路径
我们知道,设置了cookie之后,我们对于项目的每一次请求,都会带有该cookie的数据。有些时候我们不需要这样做,只是指定的请求路径下才带有该cookie,那么就要设置cookie的有效路径。
//设置cookie的有效路径,访问该路径请求才带上cookiecookie.setPath("/ss");
5)获取cookie
上面都是介绍的cookie的基本设置,接下来我们来看一下cookie的获取
cookie存储于我们的请求之中,自然通过request对象进行获取
Cookie [] cookies = request.getCookies();for (Cookie ck: cookies) { String name = ck.getName(); String value = ck.getValue(); System.out.println("name="+name+",value="+value);}
注意:该处需要添加cookies非空的判断,否则可能会出现空指针异常!
我们仍然以之前的代码为例,也就是SMS系统
1.设置用户名cookie,当用户登录成功之后,添加三天有效期的用户名cookie
//设置为期三天的cookie,其中保存了用户名的信息Cookie cookie = new Cookie("username",username);cookie.setMaxAge(3*24*60*60);response.addCookie(cookie);request.getRequestDispatcher("/success.jsp").forward(request, response);
注意:当用户成功登录是添加该cookie
2.获取cookie,如果获取到了指定的cookie,那么直接跳转至登录成功页面success.jsp
完整代码如下:
package com.jwang.student.servlet;import com.jwang.student.bo.User;import com.jwang.student.service.UserService;import com.jwang.student.service.impl.UserServiceImpl;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/login.do")public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response){ try { Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie ck : cookies) { if ("username".equals(ck.getName())) { request.getRequestDispatcher("/success.jsp").forward(request, response); return; } } } String username = request.getParameter("username"); String password = request.getParameter("password"); request.setCharacterEncoding("UTF-8"); UserService userService = new UserServiceImpl(); User user = new User("01", username, password); if (userService.login(user)) { //设置为期三天的cookie,其中保存了用户名的信息 Cookie cookie = new Cookie("username", username); cookie.setMaxAge(3 * 24 * 60 * 60); response.addCookie(cookie); request.getRequestDispatcher("/success.jsp").forward(request, response); } else { request.getRequestDispatcher("/login.jsp").forward(request, response); } }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response){ this.doGet(request, response); }}
通过以上方法,设置我们的登录系统的路径为login.do即可实现该功能
转载地址:http://buacn.baihongyu.com/