• Session对象


    session:

      * 问题:
        * 一个用户的不同请求处理的数据共享怎么办?
      * 解决:
        * 使用session技术
      * 原理:
        * 用户第一次访问服务器,服务器会创建一个session对象给此用户,并将
        * 该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证
        * 用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获取到共享的数据
      * 特点:
        * 存储在服务器端
        * 服务器进行创建
        * 依赖Cookie技术
        * 一次会话默认存储时间是30分钟
      * 作用:
        * 解决了一个用户不同请求处理的数据共享问题
      * 使用:
        * 创建session对象/获取session对象
          HttpSession hs=req.getSession();
          如果请求中拥有session的标识符也就是JSESSIONID,则返回其对应的session队形
          如果请求中没有session的标识符也就是JSESSIONID,则创建新的session对象,并将其JSESSIONID作为从cookie数据存储到浏览器内存中
          * 如果session对象是失效了,也会重新创建一个session对象,并将其JSESSIONID存储在浏览器内存中。
        * 设置session存储时间
          * hs.setMaxInactiveInterval(int seconds);
      * 注意:
        * 在指定的时间内session对象没有被使用则销毁,如果使用了则重新计时。
      * 设置session强制失效
        * hs.invalidate();
      * 存储和获取数据
        * 存储:hs.setAttribute(String name,Object value);
        * 获取:hs.getAttribute(String name) 返回的数据类型为Object
      * 注意:
        * 存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行。
      * 使用时机:
        * 一般用户在登陆web项目时会将用户的个人信息存储到Sesion中,供该用户的其他请求使用。
      * 总结:
        * session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下。
        * 用户的任意请求在处理时都能获取到同一个session对象。
      * 作用域:
        * 一次会话
        * 在JSESSIONID和SESSION对象不失效的情况下为整个项目内。
      * session失效处理:
        * 将用户请求中的JSESSIONID和后台获取到的SESSION对象的JSESSIONID进行比对,如果一致
        * 则session没有失效,如果不一致则证明session失效了。重定向到登录页面,让用户重新登录。
      * 注意:
        * JSESSIONID存储在了Cookie的临时存储空间中,浏览器关闭即失效。

    ServletContext对象:

      * 问题:
        * 不同的用户使用相同的数据
      * 解决:
        * ServletContext对象
      * 特点:
        * 服务器创建
        * 用户共享
      * 作用域:
        * 整个项目内
      * 生命周期:
        * 服务器启动到服务器关闭
      * 使用:
        * 获取ServletContext对象
          * //第一种方式:
            ServletContext sc=this.getServletContext();
           //第二种方式:
            ServletContext sc2=this.getServletConfig().getServletContext();
           //第三种方式:
            ServletContext sc3=req.getSession().getServletContext();
      * 使用ServletContext对象完成数据共享
        * 数据存储
          * sc.setAttribute(String name, Object value);
        * 数据获取
          * sc.getAttribute("str") 返回的是Object类型
      * 注意:
        * 不同的用户可以给ServletContext对象进行数据的存取。
        * 获取的数据不存在返回null。
      * 获取项目中web.xml文件中的全局配置数据
        * sc.getInitParameter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。
        * 如果数据不存在返回null。
        * sc.getInitParameterNames();返回键名的枚举
      * 配置方式:注意 一组<context-param>标签只能存储一组键值对数据,多组可以声明多个 <context-param>进行存储。
        * <context-param>
          <param-name>name</param-name>
          <param-value>zhangsan</param-value>
         </context-param>
        *作用:将静态数据和代码进行解耦。
      *获取项目webroot下的资源的绝对路径。
        *String path=sc.getRealPath(String path);
        *获取的路径为项目根目录,path参数为项目根目录中的路径
      *获取webroot下的资源的流对象
        *InputStream is = sc.getResourceAsStream(String path);
      *注意:
        *此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。
        *path参数为项目根目录中的路径

    ServletConfig对象:

      * 问题:
        * 如何获取在web.xml中给每个servlet单独配置的数据呢?
      * 解决:
        * 使用ServletConfig对象
      * 使用:
        * 获取ServletConfig对象
        * 获取web.xml中的配置数据

  • 相关阅读:
    js获取当前日期
    Mysql错误1452
    数字输入框禁止输入字母
    laravel关联外键报错
    golang for range channel
    golang实现简单哈希表(拉链法解决冲突)
    K个一组反转链表(golang)
    golang 少见的语法问题(无用)
    golang实现循环队列
    数组中连续序列和最大值(循环数组)
  • 原文地址:https://www.cnblogs.com/kilig/p/12215623.html
Copyright © 2020-2023  润新知