您当前的位置: 首页 > 网站编程 > JSP教程 > JSP内置对象的范围和属性

JSP内置对象的范围和属性

作者:guanchaofeng 来源:本站整理 发布时间: 2009-11-02 09:26 点击:
●●●范围(Scope) 有些JSP程序员会将request、session、application和pageContext归为一类,原因在于:它们皆能借助setAttribute()和getAttribute()来设定和取得其属性(Attribute),通过这两种方法来做到数据分享。 我们先来看下面这段小程序: Page1.jsp %

JSP内置对象的范围和属性

  ●●●范围(Scope)
  有些JSP程序员会将request、session、application和pageContext归为一类,原因在于:它们皆能借助setAttribute()和getAttribute()来设定和取得其属性(Attribute),通过这两种方法来做到数据分享。
  我们先来看下面这段小程序:
  Page1.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  <html>
  <head>
  <title>Page1.jsp</title>
  </head>
  <body>
  </br>
  <%
  application.setAttribute("Name","mike");
  application.setAttribute("Password","browser");
  %>
  <jsp:forwardpage="Page2.jsp"/>
  
  </body>
  </html>
  在这个程序中,我们设定两个属性:Name、Password,其值为:mike、browser。然后再转交(forward)到Page2.jsp。我只要在Page2.jsp当中加入application.getAttribute(),就能取得在Page1.jsp设定的数据。
  Page2.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  <html>
  <head>
  <title>Page2.jsp</title>
  </head>
  <body>
  <%
  StringName=(String)application.getAttribute("Name");
  StringPassword=(String)application.getAttribute("Password");
  out.println("Name="+Name);
  out.println("Password="+Password);
  
  %>
  </body>
  </html>
  执行结果为:
  Name=mikePassword=browser
  由这个例子可以看出,JSP提供给开发人员一项传递数据的机制,那就是利用setAttribute()和getAttribute()方法,如同Page1.jsp和Page2.jsp的做法。
  在上面Page1.jsp和Page2.jsp的程序当中,是将数据存入到application对象之中。除了application之外,还有request、pageContext和session,也都可以设定和取得属性值,那它们之间有什么分别吗?
  它们之间最大的差别在于范围(Scope)不一样,这个概念有点像C、C++中的全局变量和局部变量的概念。接下来就介绍JSP的范围。
  JSP有四种范围,分别为Page、Request、Session、Application。
  
  (1)JSPScope—Page
  所谓的Page,指的是单单一页JSPPage的范围。若要将数据存入Page范围时,可以用pageContext对象的setAttribute()方法;若要取得Page范围的数据时,可以使用pageContext对象的getAttribute()方法。我们将之前的范例做小幅度的修改,将application改为pageContext。
  PageScope1.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  <html>
  <head>
  <title>PageScope1.jsp</title>
  </head>
  <body>
  <h2>Page范围-pageContext</h2>
  <%
  pageContext.setAttribute("Name","mike");
  pageContext.setAttribute("Password","browser");
  %>
  <jsp:forwardpage="PageScope2.jsp"/>
  </body>
  </html>
  PageScope2.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  <html>
  <head>
  <title>CH5-PageScope2.jsp</title>
  </head>
  <body>
  <h2>Page范围-pageContext</h2>
  </br>
  <%
  StringName=(String)pageContext.getAttribute("Name");
  StringPassword=(String)pageContext.getAttribute("Password");
  out.println("Name="+Name);
  out.println("Password="+Password);
  %>
  </body>
  </html>
  执行结果为:
  Name=nullPassword=null
  这个范例程序和之前有点类似,只是之前的程序是application,现在改为pageContext,但是结果却大不相同,PageScope2.jsp根本无法取得PageScope1.jsp设定的Name和Password值,因为在PageScope1.jsp当中,是把Name和Password的属性范围设为Page,所以Name和Password的值只能在PageScope1.jsp当中取得。若修改PageScope1.jsp的程序,重新命名为PageScope3.jsp,如下:
  PageScope3.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  
  <html>
  <head>
  <title>CH5-PageScope3.jsp</title>
  </head>
  <body>
  <h2>Page范围-pageContext</h2>
  </br>
  <%
  pageContext.setAttribute("Name","mike");
  pageContext.setAttribute("Password","browser");
  
  StringName=(String)pageContext.getAttribute("Name");
  StringPassword=(String)pageContext.getAttribute("Password");
  
  out.println("Name="+Name);
  out.println("Password="+Password);
  %>
  </body>
  </html>
  PageScope3.jsp的执行结果为:
  Name=mikePassword=browser
  经过修改后的程序,Name和Password的值就能顺利显示出来。这个范例主要用来说明一个概念:若数据设为Page范围时,数据只能在同一个JSP网页上取得,其他JSP网页却无法取得该数据。
  
  (2)JSPScope—Request
  Request的范围是指在一JSP网页发出请求到另一个JSP网页之间,随后这个属性就失效。设定Request的范围时可利用request对象中的setAttribute()和getAttribute()。我们再来看下列这个范例:
  RequestScope1.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  <html>
  <head>
  <title>CH5-RequestScope1.jsp</title>
  </head>
  <body>
  <h2>Request范围-request</h2>
  <%
  request.setAttribute("Name","mike");
  request.setAttribute("Password","browser");
  %>
  <jsp:forwardpage="RequestScope2.jsp"/>
  </body>
  </html>
  RequestScope2.jsp
  <%@pagecontentType="text/html;charset=GB2312"%>
  <html>
  <head>
  <title>RequestScope2.jsp</title>
  </head>
  <body>
  <h2>Request范围-request</h2>
  <%
  StringName=(String)request.getAttribute("Name");
  StringPassword=(String)request.getAttribute("Password");
  out.println("Name="+Name);
  out.println("Password="+Password);
  %>
  </body>
  </html>
  执行结果为:
  Name=mikePassword=browser
  RequestScope1.jsp转向到RequestScope2.jsp时,RequestScope2.jsp也能取得RequestScope1.jsp设定的Name和Password值。不过其他的JSP网页无法得到Name和Password值,除非它们也和RequestScope1.jsp有请求的关系。
  除了利用转向(forward)的方法可以存取request对象的数据之外,还能使用包含(include)的方法。
  假若我将RequestScope1.jsp的
  <jsp:forwardpage="RequestScope2.jsp"/>
  改为
  <jsp:includepage="RequestScope2.jsp"flush="true"/>
  执行结果还是一样的。表示使用<jsp:include>标签所包含进来的网页,同样也可以取得Request范围的数据。
  (3)JSPScope—Session、Application
  下表介绍了最后两种范围:Session、Application。
  
  
  ●●●属性(Attribute)
  下表列出了一般储存和取得属性的方法,以下pageContext、request、session和application皆可使用(注意:pageContext并无getAttributeNames()方法)。
  
  
  当我们使用ObjectgetAttribute(Stringname)取得name属性的值时,它会回传一个java.lang.Object,因此,我们还必须根据name属性值的类型做转换类型(Casting)的工作。
  例如,若要取得String类型的Name属性时:
  StringName=(String)Sessio.getAttribute("Name");
  若要取得Integer类型的Year属性时:
  
  IntegerYear=(Integer)session.getAttribute("Year");
  假若我们的数据要设为Page范围时,则只需要:
  pageContext.setAttribute("Year",newInteger(2001));
  若要为Request、Session或Application时,就分别存入request、session或application对象之中,如下:
  request.setAttribute("Month",newInteger(12));
  session.setAttribute("Day",newInteger(27));
  application.setAttribute("Times",newInteger(10));

分享到:
本文"JSP内置对象的范围和属性"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4