博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet入门(七)Session对象
阅读量:3700 次
发布时间:2019-05-21

本文共 2867 字,大约阅读时间需要 9 分钟。

前言

      本章学习Session对象的相关知识

方法

1.概念

我们知道,request对象解决了同一个请求不同servlet的数据共享问题。那么,同一用户下的不同请求的数据该如何共享呢?那么就需要用到Session对象的相关知识了!实质上,它也用到了cookie技术。为什么这么说呢,用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的 Servlet 进行处理。在处理过程中会给用户创建一个 session 对象,用来存储用户请求处理相关的公共数据,并将此 session 对象的 JSESSIONID 以 Cookie 的形式存储在浏览器中(临时存储,浏览器关闭即失效)。用户在发起第二次请求及后续请求时,请求信息中会附带 JSESSIONID,服务器在接收到请求后,调用对应的 Servlet 进行请求处理,同时根据 JSESSIONID 返回其

对应的 session 对象。

2.特点

1)它存储在服务器端,这与cookie不同(cookie存储于浏览器端)

2)它依赖于cookie,存储浏览器端JSSESSIONID

3)它的有效期为一个会话,即浏览器关闭即消失

3.使用

1)获取session对象

我们知道,用户发送一次请求,如果没有session对象就会自动创建新的session对象,我们可以通过request对象间接获取session对象

HttpSession session = request.getSession();

2)设置session对象的有效时间

cookie可以设置有效时间,那么session依赖于cookie,同样可以设置有效时间,但是浏览器关闭session仍然消失

仍然需要注意的是session在浏览器关闭后会立刻失效,它代表着一次会话!

session.setMaxInactiveInterval(时间(s));

误区:

     大家可能认为,我设置了session的有效期是30s,那么30s之后就会自动销毁!这是不对的,前提是你没有发新的请求,才在30s之后进行销毁,如果你在30s之内发送了新的请求,那么session的有效期将重新变为30s

3)强制session失效

我们可以通过session对象的一个方法强行让该session失效

session.invalidate();

4)使用session存储公共数据

我们知道,cookie可以存储共享的数据,那么session又是怎么存储一个会话的共享数据呢?

它使用setAttribute(键,值);设置数据,使用getAttribute(键)获取数据

实例:使用session存储登录用户名

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.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;@WebServlet("/login.do")public class UserServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response){        try {            String username = request.getParameter("username");            String password = request.getParameter("password");            HttpSession session = request.getSession();            request.setCharacterEncoding("UTF-8");            UserService userService = new UserServiceImpl();            User user = new User("01", username, password);            if (userService.login(user)) {                session.setAttribute("username",username);                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);    }}

这样,前台就能获取到后台传递的session对象的值

注意:使用cookie同样实现了数据的共享,相对而言,session存储更加安全,cookie适合存储无关重点的数据!

总结

session和cookie异同

  • session依赖于cookie技术
  • session是服务器端的存储数据方式,cookie是浏览器端的数据存储方式
  • session可以存储大量的数据且安全,cookie只能存储少量数据且不安全
  • session对象浏览器关闭即失效,它属于临时cookie,cookie可以通过设置有效时间的方式达到关闭浏览器仍然生效的目的

 

转载地址:http://duacn.baihongyu.com/

你可能感兴趣的文章
计算机组成原理总结
查看>>
1.3 QT界面美化
查看>>
2 QT数据传输(MVC)
查看>>
3.QT逻辑交互(信号槽)
查看>>
4 QT功能模块
查看>>
(4)功能模块(文件)
查看>>
@Component 和 @Bean 的区别
查看>>
jmeter模拟不同ip对接口进行请求访问
查看>>
javaWeb从入门到放弃——Http基础知识
查看>>
依赖注入
查看>>
Springboot 自动装配原理2
查看>>
Springboot 自动装配原理1
查看>>
Springboot 自动装配流程图详解
查看>>
Springboot 整合mybatis
查看>>
Springboot+mongodb本地环境正常,生产环境报错{java.lang.NoClassDefFoundError: jdk/net/ExtendedSocketOptions}
查看>>
你真的知道get方法与post方法的区别吗?论get方法与post方法上传下载文件的区别
查看>>
swagger配置及升级版swagger-bootstrap-ui配置+访问账号密码登录限制
查看>>
网易云Api,轻松获取音乐数据
查看>>
List与String相互转换
查看>>
阿里巴巴fastjson api使用教程
查看>>