servlet中如何使用Session?

servlet中Session的用法

使用Servlet中的request对象获取session对象并输出其属性:HttpSession session = request.getSession();

request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象,如果没有,则创建一个
HttpSession session = request.getSession();

什么是Session?

服务器端为了保存用户的状态而创建的一个特殊的对象(即session对象)。

当浏览器第一次访问服务器时,服务器会创建session对象(该对象有一个唯一的id,一般称之为sessionId),接下来服务器会将
sessionId以cookie的方式发送给浏览器。当浏览器再次访问服务器时,会将sessionId发送过来,服务器就可以依据sessionId找到对应的sessinon对象。

如何获得session对象?

HttpSession s = request.getSession(boolean flag);

HttpSession是一个接口。
a.当flag为true时,先查看请求当中有没有sessionId,如果没有,就会创建一个session对象。如果有sessionId,就会依据sessionId去查找对应的session对象,如果找到了就返回该对象,找不到则会创建一个新的session对象。
b.当flag为false时,先查看请求当中有没有sessionId,如果没有,返回null。如果有sessionId,就会依据sessionId去查找对应的session对象,如果找到了就返回该对象,找不到,返回null。

HttpSession s = request.getSession();等价于 request.getSession(true);

session常用方法

  • session.setAttribute(String name,Object obj);
  • Object session.getAttribute(String name);
  • session.removeAttribute(String name);

session超时

服务器会将空闲时间过长的session对象删除掉。
注:
为了节省内存空间。
大部分服务器默认的超时时间长度为30分钟。

如何修改超时时间长度?

方式一 修改web.xml

方式二 编程的方式

session.setMaxInactiveInterval(int seconds);
设置两次请求之间最大的时间间隔

删除session

session.invalidate();

session验证

step1. 登录成功之后,在session对象上绑订一些数据,比如

session.setAttribute("user",user);

step2.当用户访问需要保护的资源时,进行session验证,比如

Object obj = session.getAttribute("user");
if(obj == null){
          //没有登录
         response.sendRedirect("login.jsp");
}

session与cookie比较

session相对于cookie,优点:安全、可以存放大量的数据、支持更丰富的数据类型。

缺点是session会占用服务器端的内存空间,如果session对象过多,会占用过多的内存空间。

练习:

写一个servlet,输出用户上一次访问的时间。如果是第一次访问,输出“你是第一次访问”。

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/4593.html

(1)
江山如画的头像江山如画管理团队
上一篇 2020年4月4日 下午6:33
下一篇 2020年4月5日 上午8:10

99%的人还看了以下文章

  • 5分钟快速入门AJAX

    什么是AJAX? 第一步:如何发出一个HTTP请求第二步:处理服务器的响应第三步:一个简单的例子第四步:与XML响应协同工作 什么是AJAX AJAX是一个新的合成术语,隐含了两个已经存在多年的JavaScript特性,但是直到最近,随着一些诸如Gmail、Google Suggest以及Google Maps的轰动,才被许多网络开发者所注意到。 我们所讨论…

    2020年4月4日
    1.6K0
  • Python数据分析及可视化,科学计算练习题

    第一章 单元测试 1、 问题:数据分析是指通过分析手段、方法和技巧对准备好的数据进行探索、分析,从中发现因果关系、内部联系和业务规则,为商业提供决策参考。( )选项:A:对B:错答案: 【对】 2、 问题:Anaconda中包含了conda、Python在内的超过18个科学包及其依赖项。( )选项:A:对B:错答案: 【对】 3、 问题:数据分析是一个有目的…

    2022年1月29日
    16.9K1
  • String、StringBuffer、StringBuilder的区别?

    String在实例化之后,其内存空间的内容大小是不能够被修改的;而StringBuffer是一个线程安全的可变字符序列,在实例化之后可以动态的修改堆内存中的内容,所以内存长度和大小是可变的;StringBuilder实例化之后内存大小长度也是可变的,不同之处在于StringBuilder不是线程同步,因此操作起来必然比StringBuffer更加高效。

    2018年10月24日
    2.0K0
  • Ubuntu在线体验(不用安装) 

    Ubuntu是一个以桌面应用为主的Linux操作系统,是非常轻量级的操作系统,全球领先的用于个人电脑、平板及手机的操作系统。 想过要体验下Ubuntu,其实不用那么麻烦,在线就能体验该系统!! 在任意浏览器打开链接https://www.ubuntu.org.cn/tour/zh-CN/ (中文)、https://www.ubuntu.org.cn/tour…

    2022年9月1日
    7.4K0
  • Pandas读取excel:Excel file format cannot be determined解决方法

    Pandas读取excel时报错,excel表格不能被指定,是什么原因? 这个问题我搞了很久,最后终于搞明白了,网上各种什么utf-8呀,格式化或者另存都不行,我都试过了。 Excel file format cannot be determined解决方法 首先要确定excel已经放在项目目录下,路径是正确的。 一、然后确保安装了所需要的模块 pip in…

    2022年9月11日
    11.9K0
  • IntelliJ IDEA 设置代码提示或自动补全的快捷键 (附IntelliJ IDEA常用快捷键)

    IntelliJ Idea 常用快捷键列表 Alt+回车 导入包,自动修正Ctrl+N  查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L  格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get,set方法,构造函数等)Ctrl+E或者Alt+Shift+C  最近更改的代码Ctrl+R 替换文本Ctrl+F …

    2020年8月20日
    2.6K0

发表回复

登录后才能评论