文档章节

Java 四大域对象总结

Simon丶Ma
 Simon丶Ma
发布于 2016/04/14 14:45
字数 984
阅读 2
收藏 1

一、ServletContext

1、生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

2、作用范围:整个Web应用。

3、作用:

a)在不同Servlet 之间转发

this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request, response);

方法执行结束,service就会返回到服务器,再有服务器去调用目标servlet,其中request会重新创建,并将之前的request的数据拷贝进去。

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(),直接返回资源的真实路径,没有更新延迟的问题。

二、Request 域

1、生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

2、作用范围:整个请求链(请求转发也存在)。

3、作用:  在整个请求链中共享数据。最常用到:在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。

三、Session 域

HttpSession 在服务器中,为浏览器创建独一无二的内存空间,在其中保存会话相关的信息。

1、生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存  中创建一个session并返回。

当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。

如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。

如果调用session提供的invalidate() ,可以立即销毁session。

注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,

则活化后session还是存在的。否则Session不存在。  如果JavaBean 数据在session钝化时,没有实现Serializable 则当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方法,简化重定向和转发的操作

© 著作权归作者所有

Simon丶Ma
粉丝 4
博文 134
码字总数 299850
作品 0
深圳
程序员
私信 提问
ANDROID JNI之JAVA域与c域的互操作

本文讲述AndroidJava域与C域互操作:Java域调用c域的函数;c域访问Java域的属性和方法;c域生成的对象的保存与使用。重点讲解c域如何访问Java域。 虽然AndroidJNI实现中,c实现与c++实现是有...

垂盆草
2012/10/13
457
0
EL表达式的JavaBean导航功能

EL表达式 1. EL是JSP内置的表达式语言! jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本! EL替代的是<%= ... %>,也就是说,EL只能做输出! 2. EL表达式来读取...

小和尚敲代码
2015/03/06
640
2
002_JVM内存结构及调优学习

常遇到关于内存溢出的错误 java.lang包下 StackOverflowError 很少 OutOfMemoryError: heap space(堆空间) 比较常见 OutOfMemoryError: PermGen space 经常出现 2. Java虚拟机结构和属性...

英年求肥
2014/11/11
140
0
线上应用故障排查之二:高内存占用

搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模...

MZHS
2015/11/13
280
0
Java并发之ThreadLocal使用和源码分析

本篇文章首先给出了ThreadLocal常用的方法,并举例来说明ThreadLocal的使用。然后分析了ThreadLocal的源代码中的get()方法,初始化方法,ThreadLocalMap的实现等来理解ThreadLocal的原理。 ...

第四单元
2018/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.6K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部