一、ServletContext1、生命周期:当一个web应用程序被加载到容器中时,一个代表整个web应用程序的ServletContext对象被创建。当服务器关闭或Web应用程序被删除时,ServletContext对象被销毁。2.作用范围:整个web应用。3.功能:a)在不同Servlet之间转发this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request,response);方法执行完后,服务会返回到服务器,然后服务器会去调用目标servlet,这里会重新创建请求,把之前请求的数据复制进去。b)读取资源文件。1.由于相对路径默认是相对于java虚拟机启动的目录,所以我们直接写相对路径会相对于tomcat/bin目录,所以无法获取到资源。如果写成绝对路径,当项目发布到其他环境时,绝对路径会出错。2、ServletContext为了解决这个问题,提供了:this.getServletContext().getRealPath("/1.properties"),如果给定一个资源的虚拟路径,就会返回该资源在当前环境中的真实路径.this.getServletContext().getResourceAsStream("/1.properties")在给定资源的虚拟路径的情况下将流返回到资源的真实路径。3、在非servlet下获取资源文件时,没有ServletContext对象可以使用。此时只能使用类加载器classLoader.getResourceAsStream(“../../1.properties”)。这种方式使用类加载器将资源直接加载到内存中,存在更新延迟的问题,而且如果文件过大,会占用过多的内存。classLoader.getResource(“../1.properties”).getPath()直接返回资源的真实路径,没有更新延迟的问题。二、请求域1、生命周期:服务端在调用服务方法前创建,传入服务方法。整个请求结束,请求的生命结束。2.作用范围:整个请求链(也存在请求转发)。3.功能:在整个请求链中共享数据。最常用的:在Servlet中处理的数据交给Jsp显示,参数可以放在Request字段带过来。3、会话域HttpSession在服务器中为浏览器创建一个专用的内存空间,并在其中存储会话相关的信息。1、生命周期:当第一次调用request.getSession()方法时,服务端会检查是否有对应的session,如果没有,则在内存中创建一个session并返回。当session在一段时间内(默认30分钟)没有被使用,服务器会销毁session。如果服务器异常关闭(强行关闭),还没有过期的session也会被销毁。如果调用会话提供的invalidate(),会话可以立即销毁。注意:服务器正常关闭重启后,Session对象会被钝化和激活。同时,如果服务器钝化时间在默认会话销毁时间内,激活后会话仍然存在。否则会话不存在。如果在session钝化时JavaBean数据没有实现Serializable,那么在Session激活时它就会消失。二、活动范围:一次。四、PageContext域1、生命周期:从对JSP的请求开始,响应结束销毁。2、作用范围:整个JSP页面是四个作用域中最小的。功能:(1)获取其他八个隐含对象,可以认为是一个入口对象。(2)获取所有域中的数据pageContext操作所有域中属性的方法publicjava.lang.ObjectgetAttribute(java.lang.Stringname,intscope)publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectvalue,intscope)publicvoidremoveAttribute(java.lang.Stringname,intscope)pageContextPageContext.APPLICATION_SCOPEPageContext.SESSION_SCOPEPageContext.REQUEST_SCOPEPageContext.PAGE_SCOPEfindAttribute方法中代表域的常量,在四大域中搜索属性,搜索order为page域,请求域,session域,应用域,从小域向大域查找,找到则直接取值,所有域均未找到则返回null(与el表达式不同,这里返回null,对网页不友好)(3)跳转到其他资源,它提供了forward和include方法,简化了重定向和转发的操作
