博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet入门(六)Cookie的使用与实践
阅读量:3699 次
发布时间:2019-05-21

本文共 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/

你可能感兴趣的文章
JenKins+GitLab服务应用
查看>>
初识 HTML5
查看>>
nginx服务器
查看>>
git命令
查看>>
Intellij IDEA快捷键整理
查看>>
Python算法学习: 竞码编程-蓝桥杯模拟赛2题解
查看>>
Day47 Java框架 Struts框架(二)
查看>>
Day54 Java框架 SSH案例_CRM(二)
查看>>
Day55 Java框架 SSH案例_CRM(三)
查看>>
Day56 Java框架 SSH案例_CRM(四)
查看>>
Day58 Java框架 SSH案例_CRM(六) Easyui&列表展示
查看>>
Day63 Maven(一)Maven安装.
查看>>
Day64 Maven(二)Maven整合SSH
查看>>
C/C++课程设计 之货物管理系统
查看>>
IDEA连接mysql报"Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' "的错误
查看>>
C语言小游戏之推箱子
查看>>
Java GUI 实现登录注册界面
查看>>
C语言 实现登录注册功能
查看>>
C/C++课程设计 之职工管理系统
查看>>
C/C++编程题 输入学号,输出学号的后三位,并输出并求出0到后三位之前数的和
查看>>