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%的人还看了以下文章

  • python pywifi库破解wifi密码提示“No module named ‘comtypes’”的解决方法

    在免费蹭网!破解WiFi密码的Python程序源码分享一文中,125建站网提供了详细的程序代码。 python中的pywifi库,利用它可以暴力破解一些简单的wifi密码,有些同学运行程序时提示错误:“No module named ‘comtypes’”! python中的No module named ‘comtypes’ 解释是…

    2023年1月29日
    2.8K0
  • 上机实战六 Servlet的开发 

      建议学时:6 2学时 一、编写Servlet,FirstServlet.java 通过URL访问该Servlet,显示这是我的第一个Servlet。 二、使用servlet实现求圆的面积,在r4.jsp页面提交表单,servlet负责接收用户请求、计算并显示圆的面积。 具体页面效果如下: 三、jsp+javabean+servlet实现求三角形的面积和周…

    2018年11月13日
    7.4K0
  • 实用sql查询语句详解1:给列取别名、查询部分行、多列排序

    SQL(Structured Query Language)是用于访问和处理数据库的标准计算机语言,是所有数据库查询的语言,无论是高级查询还是低级查询,SQL查询语句的需求都是最常用的。 文章介绍了包括查询全部的行和列、给列取别名、查询部分行、多列排序、使用函数查询等。 SQL数据查询-SELECT语句基本结构 语句语法简单归纳为: SELECT selec…

    2018年2月5日
    4.1K0
  • UEditor编辑器如何设置代码高亮?

    如果是一个编程或IT类网站,页面上会有大量代码,而让代码高亮显示,显示行号等,可以使页面更美观,用户体验更好。如果后台用百度编辑器(ueditor)可以使用自带的SyntaxHighlighter来实现代码高亮。

    2018年2月9日
    3.9K1
  • 开发软件,编程语言Java和C++选哪个?

    根据网络调查数据:编程语言排名前三的是Java、C#、C++。 其中Java使用者比例最高,为42.82%,是C#的两倍还要多。 紧跟其后的是C#,比例为17.33%。 排名第三的C++则有14.35%的比例。 JAVA和C++都是面向对象语,都能够实现面向对象思想(封装,继乘,多态)。而由于C++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带…

    2021年2月16日
    1.4K0
  • oracle 计算时间差,包含年、月、日、时、分、秒

    在做系统时,如图书管理系统、车辆管理系统、事务管理系统等,经常需要我们计算两个日期相差多少天,图书是否应该归还,事情是否完成等。 今天给大家分享oracle 中如何计算时间差! oracle时间差是以天数为单位,所以换算成年月,日 select floor(to_number(sysdate-to_date(‘2018-11-02 15:55:03’,’yy…

    2018年2月13日
    3.2K0

发表回复

登录后才能评论