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

JSP共有九大内置对象:

(1) HttpSession类的session对象
作用:主要用于来分别保存每个用户信息,与请求关联的会话;
         
会话状态维持是Web应用开发者必须面对的问题。

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

(3) HttpServletResponse
类的respone对象
作用:代表响应对象,主要用于向客户端发送数据

(4) JspWriter
类的out对象
作用:主要用于向客户端输出数据
        Out
的基类是JspWriter

(5) ServletContex
类的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, sessionScopeapplicationScope. 这些隐式对象都是映射,利用他们可以很容易的访问作用域属性。例如:附加到request作用域的username属性可以通过EL表达式${ requestScope.username}来直接访问。
     
有两个参数访问隐式对象,可以用来访问HTTP请求参数(表单提交参数),即paramparamValues. param 是一个用于访问单值参数的映射, paramValues则可用于访问可能包含多个值的参数。接下来的实验会展示这将如何处理。
    
3个首部访问隐式对象,可以用于访问HTTP首部,分别是header, headerValuescookie。如果想以原始的方式访问HTTP首部或cookie, 这些映射就很有用。
    
另外还有一个初始化参数访问隐式对象:initParm。这个映射可以用于访问初始化参数的值,初始化参数的值一般都在web.xml中设置。

164837_uhTz_255939.png


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

 

JsppageContext的作用

pageContext 隐含物件对应於javax.servlet.jsp.PageContext型态之物件,,隐含物件都自动的被加入至pageContext中,您可以藉由它来取得与JSP相关的隐含物件对应之Servlet物件,像是getRequest()可以取得ServletRequest getServletConfig()可以取得ServletConfiggetSession()可以取得HttpSession等等。提供取得隐含物件对应之Servlet物件并不是pageContext的主要作用,它的主要功能在提供一个单一个介面,以管理各种的公开物件(像是HttpSessionServletContextServletConfigServletRequestServletResponse等等),提供一个单一的API来管理属性作用范围等等。 
我们之前曾经使用过sessionsetAttribute()等方法设定一个进程可以共用的属性物件,使用session设定的属性在同一个进程中可以共用,除了session之外,还有pageContext requestapplication也都可以使用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中作为属性,所以我们可以在上面这个页面中取得之前设定的物件,同样的道理,您也可以用相同的方式设定属性给pageContextrequestsession等物件,只要在允许的作用范围中,就可以取得所设定的属性物件。 

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

getAttribute(String name, int scope) 
setAttribute(String name, Object value, int scope) 
removeAttribute(String name, int scope) 



其中的scope可以使用以下的常数来进行指定:pageContext.PAGE_SCOPEpageContext.REQUEST_SCOPEpageContext.SESSION_SCOPEpageContext.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); 
%>


转载于:https://my.oschina.net/u/255939/blog/474589

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值