HttpSession接口

  public interface HttpSession

  (https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html)

  一、介绍

  HttpSession接口提供了一种方式,使得用户在多个网页间浏览或请求时,他的身份信息可以得到验证,Server可以据此返回与他关联的内容。 

  Server容器通过这个接口,在一个HTTP客户端和一个HTTP服务端之间创建一个session(会话)。这个会话会跨越来自该用户的多个连接or页面请求,持续一段指定的时间(可以编程设定)。

  在一个用户多次访问某个站点时(其中不同的页面),Server容器中创建一个session,对应这一个特定的用户。Server能以多种方式维持一个会话,如cookies技术和重写URL。

  HttpSession接口允许servlet:

  • 查看和操作session相关的信息,如session识别码,创建时间以及上次被访问的时间;
  • 将对象绑定到session,这样的话,用户的相关信息就能在来自这个用户的多个连接中存在;

  当一个应用从一个session中存储一个对象或移除一个对象,session会检查这个对象是否实现了HttpSessionBindingListener。若它实现了该接口,servlet会通知该对象:您已经绑定到session或从session解绑了。通知消息会在绑定方法完成后发送,而对于将要失效或到期的会话,通知会在session失效或到期后发送。

  

  在分布式容器配置下,当容器在VM之间迁移session时,所有实现HttpSessionActivationListener接口的属性都会被通知。

  Servet必须处理这样一种情况:当客户端选择不加入session,如浏览器关闭cookies功能。在客户端加入session前,isNew方法都会返回true。而如果客户端不加入session,getSession方法将为每个来自该client的不同的request返回不同的session,isNew方法也会总是返回true。

  

  会话的作用域局限在当前的Web应用中(即一个ServletContext内),所以存储在一个上下文中存储的信息不会被另一个直接访问。

  二、接口方法

  1、long getCreationTime( )

  返回session的创建时间。

  

  2、String getId( )

  返回分配给这个session的唯一识别码,它由Servlet容器分配且依赖于实现。

  

  3、long getLastAccessedTime()

  返回上次被访问的时间,即Web容器上一次收到这个session所关联的client发送来的请求的时间。

  4、ServletContext getServletContext( )

  返回这个session所在的应用的ServletContext。

  5、void setMaxInactiveInterval(int interval)

  指定这个session的空闲存活时间,以秒为单位。

  即隔了指定时间后该session,server没有收到源自该session关联client的请求,Servlet容器就会清理该session。

  interval为0或者负数,表示该session一直有效。

  6、int getMaxInactiveInterval()

  返回上述的interval,即session的有效时间。

  7、Object getAttribute(String name)

  返回指定名称的对象,即绑定到这个session的对象。

  没有返回null。

  

  8、Enumeration<String> getAttributeNames()

  返回绑定到该session的所有对象的名字。

  Enumeration接口已经基本被Iterator接口替代了,功能是其子集,用于遍历。

  9、void setAttribute(String name, Object value)

  Binds an object to this session, using the name specified.

  If an object of the same name is already bound to the session, the object is replaced.

  10、void removeAttribute(String name)

  Removes the object bound with the specified name from this session.

  If the session does not have an object bound with the specified name, this method does nothing.

  11、void invalidate()

  Invalidates this session then unbinds any objects bound to it.

  12、boolean isNew()

  返回true——如果client还没有与这个session关联,或者client选择不加入session。

  例如,Server只使用了基于cookie的session机制,而client又禁用了cookie,那么每个请求的session都会是新的。

Java EE javax.servlet.http中的HttpSession接口的更多相关文章

  1. Java EE javax.servlet.http中的HttpRequest抽象类

    HttpRequest抽象类 public abstract class HttpServlet extends GenericServlet 实现的接口有:Serializable, Servlet ...

  2. Java EE javax.servlet中的ServletContext接口

    ServletContext接口 public interface ServletContext (https://docs.oracle.com/javaee/7/api/javax/servlet ...

  3. Java EE javax.servlet中的Servlet接口

    Servlet接口 public interface Servlet 其实现类有:FaceServlet.GenericServlet.HttpServlet 一.介绍 Servlet接口定义了所有s ...

  4. Java EE javax.servlet中的ServletResponse接口

    ServletResponse接口 public interface ServletResponse 子接口:HttpServletResponse 实现类:HttpServletResponseWr ...

  5. Java EE javax.servlet中的ServletRequest接口

    ServletRequest接口 public interface ServletRequest 子接口:HttpServletRequest 实现类:HttpServletRequestWrappe ...

  6. Java EE javax.servlet中的RequestDispatcher接口

    RequestDispatcher接口 public interface RequestDispatcher 一.介绍 定义一个对象,从客户端接收请求并将其发送到服务器上的任何资源(例如servlet ...

  7. Java EE javax.servlet中的ServletConfig接口

    ServletConfig接口 public interface ServletConfig 实现类:GenericServlet.HttpServlet 一.介绍 一个供servlet容器使用配置对 ...

  8. Java EE javax.servlet ServletContainerInitializer接口

    ServletContainerInitializer接口 public interface ServletContainerInitializer 一.介绍 该接口,允许在 web 应用程序的启动阶 ...

  9. 1,eclipse导入项目jdk版本不一样解决方案 2,java报javax.servlet.jsp cannot be resolved to a type

    一:eclipse导入项目jdk版本不一样解决方案 参考博文: https://www.cnblogs.com/chenmingjun/p/8472885.html 选中项目右键 --> Pro ...

随机推荐

  1. Leetcode题目55.跳跃游戏(贪心算法-中等)

    题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: ...

  2. 【零基础】搞懂GPU为什么比CPU“快”

    一.前言 近几年深度学习在各领域大显神威,而”GPU加速"也得到了越来越多的篇幅,似乎任何程序只要放到GPU上运行那速度就是杠杠的.GPU代替CPU计算已成了大势所趋?我先告诉你结论”那是不 ...

  3. RHEL防火墙命令

    firewall-cmd --state 查看防火墙状态 firewall-cmd --reload #重启firewall systemctl stop firewalld.service #停止f ...

  4. express使用ejs模板引擎渲染html文件

    小场景小知识点. 在使用express过程中,按照官网教程,利用express生成器很容易初始化express项目模板. 那么初始化项目之后应该如何使用ejs作为模板引擎呢?如下 // 注释掉默认生成 ...

  5. Python Flask,cookie,session ,设置、获取、删除

    使用Response类的set_cookie()方法可以设置cookie: Response.set_cookie( key, //键 value='', //值 max_age=None, //秒为 ...

  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计

    笔记 3.在线教育站点需求分析和架构设计     简介:分析要开发的功能点和系统架构应该怎样架构 1.开发的功能:                     首页视频列表                ...

  7. vue3.x版本安装element-ui、axios及echarts图表插件

    项目中安装使用element-UI 命令行: vue add element 安装成功后,项目会自动将element-UI引入项目中,刷新项目即可 项目中安装使用axios数据请求 vue add a ...

  8. SpringBoot: 2.SpringBoot整合servlet(转)

    整合方式1:通过注解扫描完成 Servlet 组件的注册 1.编写servlet package com.bjsxt.servlet; import javax.servlet.ServletExce ...

  9. 修改Mysql 数据库的密码

    1.修改my.cnf 在这个文件里面加入 skip-grant-tables 修改之后,保存.然后重启数据库 2.由于我的系统是Centos7 ,数据库是mariadb ,所以执行命令如下: 3.重启 ...

  10. 一、linux基础命令

    一. 常用系统工作命令 1.echo 命令 ​ echo命令用于在终端输出字符串或者变量提取后的值 ​ echo $SHELL 2.date命令 ​ date命令用于显示及设置系统的时间或者日期 参数 ...