您的位置:首页 > 其它

DRP之旅第三站--Web 开发的四个范围

2012-03-05 16:36 148 查看
在进行DRP项目的过程中接触到与Web开发有关的四个范围的相关概念.这四个范围分别是pageContext,Request,Session,application,这四个范围主要是在Jsp页面中,当然其他语言的WEB开发也是类似的四个范围.
  这里所说的范围概念用另一个词来说是"域",再具体一些就是一个对象的生命周期.在上述四个对象共同之处是可以承载一些"内容",但不同之处是他们承载这些内容的域(生命周期)是不同的.
  本文主要来描述四个对象的作用域并用代码进行验证.
  pageContext对象是代表与一个页面相关的对象和属性,它的范围只适用于当前页面范围,如果超过这个页面就不能够使用了。也就是说使用pageContext对象是无法向其他页面传递参数的.

  接下来的示例有两个页面test_scope_pageContext.jsp和test_scope_pageContext2.jsp两个页面通过forward标签进行跳转.在两个页面中对pageContext作用域中的变量进行累加1,随后跳转到test_scope_pageContext2.jsp在进行累加并显示结果,通过对显示的结果我们可以进行相应的判断.

  test_scope_pageContext.jsp页面代码  
<%@ page language="java" contentType="text/html;charset=GB18030"
   pageEncoding="GB18030"%>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=GB18030">
<title>pageContext</title>
<%
	Integer countPage = (Integer)pageContext.getAttribute("countPage");
	//先判断这个变量是不是存在,如果变量不存在,则要把变量初始化为1,如果存在则累加1.
	if (countPage == null) {
		pageContext.setAttribute("countPage", 1);
	} else {
		pageContext.setAttribute("countPage", countPage + 1);
	}
%>
<!--跳转页面 -->        
<jsp:forwardpage="test_scope_pageContext2.jsp"></jsp:forward>
 
</head>
	<body>        
	</body>
</html>




test_scope_pageContext2.jsp页面代码



<%@ page language="java" contentType="text/html;charset=GB18030"
   pageEncoding="GB18030"%>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=GB18030">
<title>pageContext</title>
<%
	Integer countPage = (Integer)pageContext.getAttribute("countPage");
      //先判断这个变量是不是存在,如果变量不存在,则要把变量初始化为1,如果存在则累加1.
	if (countPage == null) {
		pageContext.setAttribute("countPage", 1);
	} else{
		pageContext.setAttribute("countPage", countPage + 1);
	}      
%>
</head>
	<body>
		<div>跳转页面后的变量值为:<%=pageContext.getAttribute("countPage")%></div>
	</body>
</html>






执行结果如下:





也就是说在第一个页面中的变量countPage并没有传到第二个页面,而是通过第二个页面中的计数器所初始化1.countPage 的生命周期只在当前的页面之中.



request对象是代表与 Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,它的范围是指在一JSP网页发出请求到另一个JSP网页之间,当请求结束的时候就生命周期结束。

代码示例方面,核心代码与pageContext所示例的代码一样,只需要将pageContext的地方改为request,执行的结果如下:



通过代码测试可以得到request对象里的变量可以跨越forward前后两个页面,但是再进行刷新的话,他们将会重新计算,如果将值打印在服务器里的话,多次刷新的结果为





session是与某个 Web客户端的一个用户相关的对象和属性。它的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。比如断网或者关闭浏览器。

还是同样的核心代码,需要更改的是将countPage 改为session,执行的结果如下:





初次的执行结果和request对象的结果没有什么区别但是当多次刷新得到的结果是:







关闭,或者换一个浏览器再次执行的结果为:



也就是会话结束的时候session的生命周期结束,当然也可以通过代码或者服务器设置来设置session生命周期.



application是与整个 Web应用程序相关的对象和属性的范围,在服务器一开始执行服务,到服务器关闭为止。它包括了整个Web应用中的多个页面,请求,会话.

代码还是同pageContext一样,需要更改的是将pageContext改为application,执行结果如下:



当多次刷新之后的结果为:



刷新后的结果同session一样,没有什么大的区别,但是当关闭浏览器,或换浏览器的时候结果为:



变量值会继续增加,作用范围仍在继续.当关闭服务器(我用的是Tomcat)并重启时,变量重新开始计数,可以得到application的生命周期为整个web应用.

通过上述的代码和执行结果我们可以从中体会到jsp页面编程中pageContext,Request,Session,application四个对象的作用范围和生命周期.


最后我将用一张图对本文进行总结,如下:









                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: