Java四⼤作⽤域总结
⼀、ServletContext
    1、⽣命周期:当Web应⽤被加载进容器时创建代表整个web应⽤的ServletContext对象,当服务器关闭或Web应⽤被移除
时,ServletContext对象跟着销毁。
    2、作⽤范围:整个Web应⽤。
    3、作⽤:
      a)在不同Servlet 之间转发
        ServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request, response);
        ⽅法执⾏结束,service就会返回到服务器,再有服务器去调⽤⽬标servlet,其中request会重新创建,并将之前的request 的数据拷贝进去。
      b)读取资源⽂件。
       1、由于相对路径默认相对的是java虚拟机启动的⽬录,所以我们直接写相对路径将会是相对于tomcat/bin⽬录,所以是拿不到资源的。如果写成绝对路径,当项⽬发布到其他环境时,绝对路径就错了。
        2、为了解决这个问题ServletContext提供了:
            ServletContext().getRealPath("/1.properties"),给进⼀个资源的虚拟路径,将会返回该资源在当前环境下的真实路径。       
            ServletContext().getResourceAsStream("/1.properties"),给⼀个资源的虚拟路径返回到该资源真实路径的流。
        3、当在⾮servlet下获取资源⽂件时,就没有ServletContext对象⽤了,此时只能⽤类加载器
            ResourceAsStream("../../1.properties"),此⽅法利⽤类加载器直接将资源加载到内存中,有更新延迟的问题,以及如果⽂件太⼤,占⽤内存过⼤。
            Resource("../1.properties").getPath(),直接返回资源的真实路径,没有更新延迟的问题。
⼆、Request 域
    1、⽣命周期:在service ⽅法调⽤前由服务器创建,传⼊service⽅法。整个请求结束,request⽣命结束。
    2、作⽤范围:整个请求链(请求转发也存在)。
    3、作⽤:在整个请求链中共享数据。最常⽤到:在Servlet 中处理好的数据交给Jsp显⽰,此时参数就可以放置在Request域中带过去。
三、Session 域
    HttpSession 在服务器中,为浏览器创建独⼀⽆⼆的内存空间,在其中保存会话相关的信息。
    1、⽣命周期:在第⼀次调⽤ Session() ⽅法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建⼀个session并返回。
          当⼀段时间内session没有被使⽤(默认为30分钟),则服务器会销毁该session。
          如果服务器⾮正常关闭(强⾏关闭),没有到期的session也会跟着销毁。
          如果调⽤session提供的invalidate(),可以⽴即销毁session。
      注意:服务器正常关闭,再启动,Session对象会进⾏钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。如果JavaBean 数据在session钝化时,没有实现则当Session活化时,会消失。
    2、作⽤范围:⼀次会话。
四、PageContext 域
    1、⽣命周期:当对JSP的请求时开始,当响应结束时销毁。
    2、作⽤范围:整个JSP页⾯,是四⼤作⽤域中最⼩的⼀个。
    作⽤:
        (1)获取其它⼋⼤隐式对象,可以认为是⼀个⼊⼝对象。
        (2)获取其所有域中的数据
            pageContext  操作所有域中属性的⽅法
              public java.lang.Object getAttribute(java.lang.String name,int scope)
              public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
              public void removeAttribute(java.lang.String name,int scope)
              pageContext 中代表域的常量
                PageContext.APPLICATION_SCOPE
                PageContext.SESSION_SCOPE
                PageContext.REQUEST_SCOPE
                PageContext.PAGE_SCOPE
              findAttribute⽅法,在四⼤域中搜寻属性,搜寻的顺序是page域、request域、session域、application域,从⼩域到⼤域开始搜索,如果搜索到就直接获取该值,如果所有域中都不到,返回⼀个null(与el表达式不同,此处返回null,对⽹页是不友好的)
        (3)跳转到其他资源其⾝上提供了forward和include⽅法,简化重定向和转发的操作
引⽤原⽂:
写博客是为了记住⾃⼰容易忘记的东西,另外也是对⾃⼰⼯作的总结,⽂章可以转载,⽆需版权。希望尽⾃⼰的努⼒,做到更好,⼤家⼀起努⼒进步!
如果有什么问题,欢迎⼤家⼀起探讨,代码如有问题,欢迎各位⼤神指正!el表达式获取session中的值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。