JSP 有四种范围,分别为Page、Request、Session、Application。所谓的Page,指的是单单一
页JSP Page 的范围。若要将数据存入Page 范围时,可以用pageContext 对象的setAttribute( )
方法;若要取得Page范围的数据时,可以使用pageContext对象的getAttribute( )方法。
一:Page
这个范例主要用来说明一个概念:若数据设为Page范围时,数据只能在同一个JSP网页上取得,其他JSP网页却无法取得该数据。
二:Request
Request 的范围是指在一JSP 网页发出请求到另一个JSP 网页之间,随后这个属性就失效。
现在将Name和Password的属性范围设为Request,当RequestScope1.jsp转向到RequestScope2.jsp时,RequestScope2.jsp也能取得RequestScope1.jsp设定的Name和Password值。不过其他的JSP网页无法得到Name和Password值,除非它们也和RequestScope1.jsp有请求的关系。
除了利用转向(forward)的方法可以存取request 对象的数据之外,还能使用包含(include)的方法。
假若我将RequestScope1.jsp 的<jsp:forward page="RequestScope2.jsp"/>
改为
<jsp:include page="RequestScope2.jsp" flush="true"/>
执行RequestScope1.jsp 时,结果还是和图5-4 一样。表示使用<jsp:include>标签所包含进来的网页,同样也可以取得Request 范围的数据。
三:Session、Application
当 我们使用getAttribute(String name)取得name 属性的值时,它会回传一个java.lang.Object,因此,我们还必须根据name 属性值的类型做转换类型(Casting)的工作。例如:若要取得String 类型的Name 属性时:
String Name = (String)pageContext.getAttribute("Name");
若是Integer 类型的Year 属性时:
Integer Year = (Integer)session.getAttribute("Year");
到目前已大约介绍完JSP 中四种范围(Scope):Page、Request、Session 和Application。假若我的数据要设为Page 范围时,则只需要:
pageContext.setAttribute("Year", new Integer(2001));
若要为Request、Session 或Application 时,就分别存入request、session 或application对象之中,如下:
request.setAttribute("Month", new Integer(12) );
session.setAttribute("Day", new Integer(27) );
application.setAttribute("Times", new Integer(10));