您的位置:首页 > Web前端 > JavaScript

Jsp隐式对象 和 EL隐式对象

2012-07-29 09:50 381 查看
JSP共有九大内置对象:
(1) HttpSession类的session对象

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

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

(2) HttpServletRequest类的request对象

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

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

(4) JspWriter类的out对象

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

Out的基类是javax.servlet.jsp.JspWriter

(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表达式${ requestScope.username}来直接访问。

有两个参数访问隐式对象,可以用来访问HTTP请求参数(表单提交参数),即param和paramValues. param 是一个用于访问单值参数的映射, paramValues则可用于访问可能包含多个值的参数。接下来的实验会展示这将如何处理。

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

另外还有一个初始化参数访问隐式对象:initParm。这个映射可以用于访问初始化参数的值,初始化参数的值一般都在web.xml中设置。
类别
标识符
描述
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 类
其实我的主要目的是为了搞清楚pageContext对象,如下:
Jsp中pageContext的作用
pageContext 隐含物件对应於javax.servlet.jsp.PageContext型态之物件,,隐含物件都自动的被加入至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 = "字串物件";

out.println("设定属性给application:" + attr);

application.setAttribute("str", attr);

%>

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

<%

String attr = (String) application.getAttribute("str");

out.println("取得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可以使用以下的常数来进行指定:pageContext.PAGE_SCOPE、pageContext.REQUEST_SCOPE、 pageContext.SESSION_SCOPE、pageContext.APPLICATION_SCOPE,常数的名称已经直接指明属性范围,我们可以将上面的两个JSP页面改为以下的形式:

<%

String attr = "字串物件";

out.println("设定属性给application:" + attr);

pageContext.setAttribute("str", attr, pageContext.APPLICATION_SCOPE);

%>

<%

String attr = (String) pageContext.getAttribute("str", pageContext.APPLICATION_SCOPE);

out.println("取得application属性:" + attr);

%>

JSP隐式对象和EL隐式对象
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.xml 部署描述符文件指定的,该文件位于应用程序的 WEB-INF 目录中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: