admin 管理员组

文章数量: 887021


2024年2月28日发(作者:奥数二进制转换成十进制)

Jsp的隐式对象和EL的隐式对象学习

2009-09-02 21:48

JSP共有九大内置对象:

(1) HttpSession类的session对象

作用:主要用于来分别保存每个用户信息,与请求关联的会话;

会话状态维持是Web应用开发者必须面对的问题。

(2) HttpServletRequest类的request对象

作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。

(3) HttpServletResponse类的respone对象

作用:代表响应对象,主要用于向客户端发送数据

(4) JspWriter类的out对象

作用:主要用于向客户端输出数据;

Out的基类是ter

(5) ServletContext类的application对象

作用:主要用于保存用户信息,代码片段的运行环境;

它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.

(6) PageContext类的pageContext对象

作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。

(7) ServletConfig类的config对象

作用:代码片段配置对象,表示Servlet的配置。

(8) Object类的page(相当于this)对象

作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。

(9)Exception

作用:处理JSP文件执行时发生的错误和异常

EL共有11大内置对象:

JSP开发人员可以在EL表达式中使用EL隐式对象,而无须任何显式的编码活声明。隐式对象就是设计用

来为 JSP 编程提供方便的,通过隐式对象,用EL编写的代码就可以直接使用JSP页面的一些最常用的地方。总共有11个隐式对象,这11个隐式对象可以分为5大类:

*JSP隐式对象。

*作用域访问隐式对象。

*参数访问隐式对象。

*首部访问隐式对象。

*初始化参数访问隐式对象。

JSP隐式对象类中只有一个EL隐式对象,这就是pageContext隐式对象。这与同名的JSP隐式对象实际上就是同一个对象。余下的EL隐式对象都是Java映射(map),他们只是提供了更容易的途径来访问pageContext隐式对象的某些性质。

共有4个作用域隐式对象,分别为pageScope, requestScope, sessionScope和applicationScope. 这些隐式对象都是映射,利用他们可以很容易的访问作用域属性。例如:附加到request作用域的username属性可以通过EL表达式${ me}来直接访问。

有两个参数访问隐式对象,可以用来访问HTTP请求参数(表单提交参数),即param和paramValues. param

是一个用于访问单值参数的映射, paramValues则可用于访问可能包含多个值的参数。接下来的实验会展示这将如何处理。

有3个首部访问隐式对象,可以用于访问HTTP首部,分别是header, headerValues和cookie。如果想以原始的方式访问HTTP首部或cookie, 这些映射就很有用。

另外还有一个初始化参数访问隐式对象:initParm。这个映射可以用于访问初始化参数的值,初始化参数的值一般都在中设置。

类别

JSP

作用域

标识符

pageContext

pageScope

requestScope

sessionScope

描述

PageContext 实例对应于当前页面的处理

与页面作用域属性的名称和值相关联的 Map

与请求作用域属性的名称和值相关联的 Map

与会话作用域属性的名称和值相关联的 Map

applicationScope 与应用程序作用域属性的名称和值相关联的

Map 类

请求参数 param

paramValues

请求头 header

headerValues

Cookie

初始化参数

cookie

initParam

按名称存储请求参数的主要值的 Map 类

将请求参数的所有值作为 String 数组存储的

Map 类

按名称存储请求头主要值的 Map 类

将请求头的所有值作为 String 数组存储的

Map 类

按名称存储请求附带的 cookie 的 Map 类

按名称存储 Web 应用程序上下文初始化参数的 Map 类

其实我的主要目的是为了搞清楚pageContext对象,如下:

Jsp中pageContext的作用

pageContext 隐含物件对应於ntext型态之物件,,隐含物件都自动的被加入至pageContext中,您可以藉由它来取得与JSP相关的隐含物件对应之Servlet物件,像是getRequest()可以取得ServletRequest, getServletConfig()可以取得ServletConfig,getSession()可以取得HttpSession等等。提供取得隐含物件对应之Servlet物件并不是pageContext的主要作用,它的主要功能在提供一个单一个介面,以管理各种的公开物件(像是 HttpSession、ServletContext、ServletConfig、ServletRequest、ServletResponse等等),提供一个单一的API来管理属性作用范围等等。

我们之前曾经使用过session的setAttribute()等方法设定一个进程可以共用的属性物件,使用session设定的属性在同一个进程中可以共用,除了session之外,还有pageContext、 request、application也都可以使用setAttribute()之类的方法(详请查阅API文件)来设定可以共用的属性物件,只不过这四个物件所设定的属性其共用范围各不相同。

使用pageContext所设定的属性物件,其共用范围限於同一个 JSP页面,使用request所设定的属性物件,其在同一个request处理期间可以共用(包括forward给其它JSP页面),session物件所设定的属性物件则限於同一个进程作用期间可以共用,而application物件所设定的属性,则在整个Web应用程式中的JSP页面都可以共用。

以下举application为例,您可以将一些物件当作属性设定给application,则另一个JSP页面就可以在适当的时候取得这个属性物件,例如:

<%

String attr = "字串物件";

n("设定属性给application:" + attr);

ribute("str", attr);

%>

我们先连上这个JSP网页以执行属性设定,然后我们再连上这个JSP网页:

<%

String attr = (String) ribute("str");

n("取得application属性:" + attr);

%>

由於我们之前已经将字串物件设定在application中作为属性,所以我们可以在上面这个页面中取得之前

设定的物件,同样的道理,您也可以用相同的方式设定属性给pageContext、request、session等物件,只要在允许的作用范围中,就可以取得所设定的属性物件。

您可以使用pageContext物件来设定属性,并指定属性的作用范围,而不用使用个别的pageContext、request、session、 application来进行设定,这就是之前所提的,以pageContext提供一个单一的API来管理属性作用范围,您可以使用以下的方法来进行设定:

getAttribute(String name, int scope)

setAttribute(String name, Object value, int scope)

removeAttribute(String name, int scope)

其中的scope可以使用以下的常数来进行指定:_SCOPE、T_SCOPE、

N_SCOPE、ATION_SCOPE,常数的名称已经直接指明属性范围,我们可以将上面的两个JSP页面改为以下的形式:

<%

String attr = "字串物件";

n("设定属性给application:" + attr);

ribute("str", attr, ATION_SCOPE);

%>

<%

String attr = (String) ribute("str", ATION_SCOPE);

n("取得application属性:" + attr);

%>

JSP隐式对象和EL隐式对象

2008-07-04 16:49:59

JSP隐式对象:

首先要了解什么是JSP隐式对象,它是Web容器加载的一组类的实例,它不像一般的Java对象那样需要“new”去获取实例,而是直接就可以在JSP页面中使用的对象。JSP提供的隐式对象分为4个主要类别,如下介绍:

1、输入和输出对象:request、response和out对象。

2、作用域通讯对象:session、application、pagecontext。

3、servlet对象:config和page。

4、错误对象:exception。

-------------------------------------------

EL 隐式对象的标识符

不要将这些对象与 JSP 隐式对象(一共只有九个)混淆,其中只有一个对象是它们所共有的。

EL 隐式对象

类别 标识符 描述

JSP pageContext PageContext 实例对应于当前页面的处理

作用域 pageScope 与页面作用域属性的名称和值相关联的 Map 类

requestScope 与请求作用域属性的名称和值相关联的 Map 类

sessionScope 与会话作用域属性的名称和值相关联的 Map 类

applicationScope 与应用程序作用域属性的名称和值相关联的 Map 类

请求参数 param 按名称存储请求参数的主要值的 Map 类

paramValues 将请求参数的所有值作为 String 数组存储的 Map 类

请求头 header 按名称存储请求头主要值的 Map 类

headerValues 将请求头的所有值作为 String 数组存储的 Map 类

Cookie cookie 按名称存储请求附带的 cookie 的 Map 类

初始化参数 initParam 按名称存储 Web 应用程序上下文初始化参数的 Map 类

尽管 JSP 和 EL 隐式对象中只有一个公共对象( pageContext ),但通过 EL 也可以访问其它 JSP 隐式对象。原因是 pageContext 拥有访问所有其它八个 JSP 隐式对象的特性。实际上,这是将它包括在 EL 隐式对象中的主要理由。

其余所有 EL 隐式对象都是映射,可以用来查找对应于名称的对象。前四个映射表示先前讨论的各种属性作用域。可以用它们来查找特定作用域中的标识符,而不用依赖于 EL 在缺省情况下使用的顺序查找过程。

接下来的四个映射用来获取请求参数和请求头的值。因为 HTTP 协议允许请求参数和请求头具有多个值,所以它们各有一对映射。每对中的第一个映射返回请求参数或头的主要值,通常是恰巧在实际请求中首先指定的那个值。每对中第二个映射允许检索参数或头的所有值。这些映射中的键是参数或头的名称,但这些值是 String 对象的数组,其中的每个元素都是单一参数值或头值。

cookie 隐式对象提供了对由请求设置的 cookie 名称的访问。这个对象将所有与请求相关联的

cookie 名称映射到表示那些 cookie 特性的 Cookie 对象。

最后一个 EL 隐式对象 initParam 是一个映射,它储存与 Web 应用程序相关联的所有上下文的初始化参数的名称和值。初始化参数是通过 部署描述符文件指定的,该文件位于应用程序的 WEB-INF 目录中。

最近更新时间:2008-07-04 16:49:59 浏览数(136)

下一篇: 奥运再见 上一篇: 由书籍到电子文本

JSP 标准标记库基础知识学习(2)

作者: 来源: 发布时间:07-12-18 浏览: 45939 次

因为请求时属性值是用表达式指定的,所以它们往往有和其它脚本元素一样的软件维护问题。因此,JSTL 定制标记支持另一种用于指定动态属性值的机制。可以用简化的表达式语言(EL)而不使用完整的 JSP 表达式来指定 JSTL 操作的属性值。EL 提供了一些标识符、存取器和运算符,用来检索和操作驻留在 JSP 容器中的数据。EL 在某种程度上以 EcmaScript(请参阅参考资料)和 XML 路径语言(XML Path Language,XPath)为基础,因此页面设计人员和程序员都应该熟悉它的语法。EL 擅长寻找对象及其特性,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。但是,与 JSTL 标记一起使用时,它就能使用简单而又方便的符号来表示复杂的行为。EL 表达式的格式是这样的:用美元符号($)定界,内容包括在花括号({})中,如清单 3 所示。 [Page]

清单 3. 说明 EL 表达式定界符的 JSTL 操作

;

此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值,如清单 4 所示。单独的表达式由标识符、存取器、文字和运算符组成。标识符用来引用存储在数据中心中的数据对象。EL 有 11 个保留标识符,对应于 11 个 EL 隐式对象。假定所有其它标识符都引用限制了作用域的变量。存取器用来检索对象的特性或集合的元素。文字表示固定的值 — 数字、字符、字符串、布尔型或空值。运算符允许对数据和文字进

行组合以及比较。

清单 4. 组合静态文本和多个 EL 表达式以指定动态属性值

;

限制了作用域的变量

JSP API 通过 ; 操作允许从 JSP 容器内的四个不同作用域中存储和检索数据。JSTL 通过提供用于指定和除去这些作用域中的对象的附加操作来扩展这一能力。此外,EL 提供将这些对象作为限制了作用域的变量进行检索的内置支持。特别地,任何出现在 EL 表达式中但不对应于任何 EL 隐式对象的标识符,都被自动假定为引用存储在四个 JSP 作用域的其中某个中的对象,这四个作用域是:

页面作用域

请求作用域

会话作用域

应用程序作用域

您可能还记得,只有在为特定请求处理页面期间才能检索存储在该页面作用域中的对象。如果对象是存储在请求作用域中的,可以在处理所有参与处理某请求的页面期间检索这些对象(譬如在对某个请求的处理中遇到了一个或多个 ; 或 ; 操作)。如果对象是存储在会话作用域中的,则在与 Web 应用程序的交互式会话期间,可

以由用户访问的任何页面检索它(即,直到与该用户交互相关联的 HttpSession 对象无效为止)。可以由任何用户从任何页面访问存储在应用程序作用域中的对象,直到卸载 Web 应用程序本身为止(通常是由于关闭 JSP 容器所致)。

通过将字符串映射为期望作用域中的对象来将对象存储到该作用域。然后,就可以通过提供相同字符串来从该作用域检索该对象。在作用域的映射中查找字符串,并返回被映射的对象。在 Servlet API 中,将此类对象称为相应作用域的属性。但是,在 EL 的上下文中,也将与属性相关联的字符串看作变量的名称,该变量通过属性映射的方式获得特定的值。

在 EL 中,与隐式对象无关联的标识符被认为是存储在四个 JSP 作用域中的名称对象。首先对页面作用域检查是否存在这样的标识符,其次对请求作用域、然后对会话作用域、最后对应用程序作用域依次进行这样的检查,然后测试该标识符的名称是否与存储在该作用域中的某个对象的名称匹配。第一个这样的匹配作为 EL 标识符的值被返回。通过这种方法,可以将 EL 标识符看作引用限制了作用域的变量。 [Page]

从更技术的方面来说,没有映射到隐式对象的标识符是用 PageContext 实例的 findAttribute() 方法求值的,该实例表示对页面的处理,在该页面上,当前正在处理用于请求的表达式。标识符的名称作为参数传递给这个方法,然后该方法依次在四个作用域中搜索具有相同名称的属性。并将所找到的第一个匹配项作为 findAttribute() 方法的值返回。如果未在这四个作用域中找到这样的属性,则返回 null。

最终,限制了作用域的变量是四个 JSP 作用域的属性,这些属性具有可以用作 EL 标识符的名称。

只要对限制了作用域的变量赋予由字母数字组成的名称,就可以通过 JSP 中提供的用于设置属性的

任何机制来创建它们。这包括内置的 ; 操作,以及由 Servlet API 中的几个类定义的 setAttribute() 方法。此外,四个 JSTL 库中定义的许多定制标记本身就能够设置作为限制了作用域的变量使用的属性值。

隐式对象

表 1 中列出了 11 个 EL 隐式对象的标识符。不要将这些对象与 JSP 隐式对象(一共只有九个)混淆,其中只有一个对象是它们所共有的。

表 1. EL 隐式对象

类别 标识符 描述

JSP pageContext PageContext 实例对应于当前页面的处理

作用域 pageScope 与页面作用域属性的名称和值相关联的 Map 类


本文标签: 对象 属性 作用域