JavaEE(3)—会话管理

会话管理

1.请求转发

req.getRequestDispather("page").forward(req,resp);

作用:实现多个servlet联动操作处理请求。避免代码冗余,让servlet的职责更加明确

地址是相对路径,直接书写servlet的别名

特点:一次请求,浏览器地址栏信息不改变。

注意:请求转发转发后直接return结束即可

2.request对象作用域

问题:使用请求转发后,不同的Servlet之间怎么进行数据的共享
解决:使用request对象的作用域

使用:

  • request.setAttribute(Object name,Object value);
  • request.getAttribute(Object obj);

作用:解决了一次请求内的不同Servlet的数据(请求数据+其他数据)共享问题

作用域:基于请求转发,一次请求中的所有Servlet共享

注意:使用Request对象进行数据流转,数据只在一次请求内有效

特点:1.服务器创建 2.每次都会创建 3.生命周期一次请求

3.重定向

问题:

  • 如果当前的请求servlet无法进行处理怎么办
  • 如果使用请求转发,造成表单数据重复提交怎么办

解决:使用重定向

使用:

resp.sendRedirect(“路径”)

特点:

  • 两次请求,两个request对象
  • 浏览器地址栏信息改变

request作用域:解决了一次请求内的servlet数据共享问题

重定向:解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题

时机:

  • 如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向
  • 如果请求被servlet接收后,无法进行处理,建议使用重定向到可以处理的资源

4.Cookie

作用:解决了发送的不同请求的数据共享问题
使用:

  1. 创建Cookie对象 (key-value键值对)
  2. 添加Cookie信息给客户端

注意:一个Cookie对象存储一条数据,多条数据可以多创建几个Cookie对象进行存储

特点:

  1. 浏览器端的数据存储技术。
  2. 存储的数据声明在服务器.
  3. 临时存储:存储在浏览器的运行内存中,浏览器关闭即失效
  4. 定时存储:设置了Cookie的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息
  5. 默认cookie信息存储好之后,每次请求都会附带,除非设置有效路径
    //创建Cookie对象
    Cookie c = new Cookie(String name, String value);
    //设置Cookie
    c.setMaxAge(int expiry);//Cookie的有效期,保存在硬盘中,单位为秒
    c.setPath(String url);//设置Cookie所应用的url
    //响应Cookie信息
    resp.addCookie(c);
    //Cookie的获取
    Cookie[] cks = req.getCookies();

5.Session

Request

问题:一个用户的不同请求处理的数据共享怎么办

解决:使用session

原理:用户第一次访问服务器,服务器会创建一个session对象给此对象,并将该session对象的id使用Cookie存储到浏览器中,保证用户的其他请求能够获取到同一个session对象,也就保证了不同请求能够获取到共享的数据。

特点:存储在服务器端,服务器进行创建,依赖于Cookie,一次会话,默认30分

作用:解决了一个用户不同请求处理的数据共享问题

注意:JSessionID存储在了cookie的临时存储空间中,浏览器关闭即失效

//创建/获取session对象
HttpSession hs = req.getSession();
//如果请求中拥有session的id,则返回其session对象。如果请求中没有session的id
//则创建新的session对象,并将其JSessionID作为cookie数据存储

//设置session存储时间
hs.setMaxInactiveInterval(int seconds);
//注意:销毁时间为:在指定时间内session对象没有被使用,则销毁。如果使用了,则重新计时

//设置session强制失效
hs.invalidate();

//存储和获取数据
hs.setAttribute(String name,Object value);
hs.getAttribute(String name);//返回类型为Object类型,需要强制转换
//注意:存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行

使用时机:一般用户在登陆web项目时,会将用户的个人信息存储到session中,供该用户的其他请求使用

总结:session解决了一个用户的不同请求的数据共享问题,只要在JSessionID不失效和session对象不失效的情况下,用户的任意请求在处理时都能获取到同一个session对象

作用域:一次会话,在JSessionID和session对象不失效的情况下为整个项目内

session失效处理:将用户请求中的JSessionID和后台获取到的session对象的ID进行比对,如果一致,则session没有失效。如果不一致,则证明session失效了。重定向到登陆页面,让用户重新登陆。

6.ServletContext对象

问题:Request解决了一次请求内的数据共享问题,session解决了用户不同请求的数据共享问题,那么不同用户的数据共享该怎么办呢?

解决:使用ServletContext对象

作用:解决了不同用户的数据共享问题

原理:ServletContext对象由服务器进行创建,一个项目只有一个对象。不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也就是一个对象了,该对象由用户共同拥有

特点:

  1. 服务器创建
  2. 用户共享
  3. 一个项目各只有一个
  4. 声明周期:服务器启动到关闭
  5. 作用域:项目内
  6. 使用:获取ServletContext对象
    //获取ServletContext对象
            //第一种方式
        ServletContext sc = this.getServletContext();
            //第二种方式
        ServletContext sc2 = this.getServletConfig().getServletContext();
            //第三种方式
        ServletContext sc3 = req.getSession().getServletContext();
        
    //数据存储
    sc.setAttribute(String name,Object value);
    //数据获取
    sc.getAttribute(String name,Object value);
    
    //获取项目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>
    //作用:将静态数据和代码进行解耦
    //获取项目web下的资源绝对路径(动态获取)
    String path = sc.getRealPath("/doc.1.txt");
    //获取项目根目录下资源的流对象
    InputStream is = sc.getResourceAsStream("/doc/1.txt");
    //注意:此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取
    

注意:不同用户可以给ServletContext对象进行存取,获取的数据不存在返回null

ServletContext

作用:ServletConfig对象是Servlet的专属配置对象,每个Servlet都单独拥有一个ServletConfig对象,用来获取web.xml中的配置信息

  1. 获取ServletConfig对象
  2. 获取web.xml中的配置数据

Web.xml文件使用总结

作用:存储项目相关的配置信息,保护Servlet。解耦一些数据对程序的依赖

使用位置:

  • 每个Web项目中
  • Tomcat服务器中(在服务器目录conf目录中)

区别:

  • Web项目下的web.xml文件为局部配置,针对本项目的位置
  • Tomcat下的web.xml文件为全局配置,配置公共信息

内容(核心组件):

  • 全局上下文配置
  • Servlet配置
  • 过滤器配置
  • 监听器配置

加载顺序:

ServletContext -> context-param -> listener -> filter -> servlet

server.xml文件:

核心组件:

<Server>
    <service>
        <Connector/>
        <Connector/>
            <Engine>
                <Host>
                   <Context/> 
                </Host>
            </Engine>
    </Service>
</Server>

热部署:

猜你喜欢

转载自blog.csdn.net/wintershii/article/details/83049859
今日推荐