Servlet入门(六)Cookie的使用与实践

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/84260128

前言

      本章学习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的有效路径,访问该路径请求才带上cookie
cookie.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即可实现该功能

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/84260128