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

14 篇文章 0 订阅
13 篇文章 0 订阅

   在进行DRP项目的过程中接触到与Web开发有关的四个范围的相关概念.这四个范围分别是pageContextRequestSessionapplication,这四个范围主要是在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>



 

执行结果如下:

计算机生成了可选文字: ageConteXt作用域国test--scope夕ageconte国testwscope,pplicati国test--Scope_pageconte、不口矛http://localhost:8080/drp3.1/test--scope_pageContext.jsp转页面后的变量值为:l

 

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

 

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

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

计算机生成了可选文字: 国test--scope--request.j‘图test--scope一request2.旦pagecontext作用域eCOnte口矛http://Iocalhost:8080/drp3.1/testwscope_requestjsp跳转页面后的变量值为:2

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

计算机生成了可选文字: }.一甲画test--scope一re百而j而百test--scope一request2.诬pagecontextn用域f国test--scope--pagecon全10we。瑕的四惋围回矛http://localhost:8080/drp3.1/testwscope_request.jsp跳转页面后的变量值为:2汽Prob'emsl@,avadoc国Dec,a画吵里conso,e邑白__.:狡}民翻回画}巴日,肖口口Tomcatv7.DServeratlocalhost【ApacheTomcat】C:\ProgramFiles\JavaMdk16.0_10\b,n勺avaw.exe(2012一3一S下午12:SD:32)121212121212121212一』一卜反廿价卜卜』

 

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

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

计算机生成了可选文字: 黔罗黯赢蠢豁恶…。[转页面后的变量值为:2l国test-Scope_applicatiQweb开发的四个范围,web、的四个范围宙至http://localhost:8080/drp3.1/test--scope一essionjsp

 

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

 

计算机生成了可选文字: l图test--Scope--applicati土竺web开发的四个范围少web开发的四个范围中哗回矛http://localhost:808(,跳转页面后的变量值为:20聂proo.e而石J,,,口。:卫pec.aration一日c。nsole蕊汉。x礼}匕二翻履图}甘日,肖,巴口Tomcatv7.0Serveratlocalhost【ApacheTomcat】C:\ProgramFiles\Java勺d吐.6.0-10\binMavaw.exe(2012一3一5下午3:29:42)123456引―-―一01气L几J411}6780护0789月1111月11月11112

 

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

计算机生成了可选文字: 黔罗黯赢蠢豁恶…。[转页面后的变量值为:2l国test-Scope_applicatiQweb开发的四个范围,web、的四个范围宙至http://localhost:8080/drp3.1/test--scope一essionjsp

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

 

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

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

计算机生成了可选文字: 严恕磊磊霖:架曳鼎黑黔围一。卜转页面后的变量值为:,二竺畔匕开发的四个范国」Qweb开发的四个范围

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

计算机生成了可选文字: 国test--scope--app.i品云障test--scope一pp:cat.二亘we。开发的四个范围lweb瑕的四惋围孙we。开发的四惋围口沙ope_application.jsp,跳转页面后的变量值为:20丽石画s问avad叫酉丽喻ation.0console霉山亘一川,旦匿图},吏尸雪,巴口Tomcatv7.0Serveratlocalhost【ApacheTomcat】l2C:\programFile刃avaMdkl.6.0--10\binMavaw.exe(2D12一3一5下午3:43:19)门门目日曰*、j40月12lj411一67890一』}6780护11Jl1jl11111,乙L口口口口口口一…......口口口口口口口口口口口口口口口口口口口......

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

计算机生成了可选文字: 奋()丹b☆Jolocalhost-跳转页面后的变量值为:22

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

 

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

 

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

计算机生成了可选文字: 会话Session」印页面1jSP页面2requestWeb应用ApplicationpageContext

 

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值