DRP之旅第三站--Web 开发的四个范围
2012-03-05 17:16
267 查看
在进行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>web开发的四个范围</title>
<%
Integer countPage = (Integer) pageContext.getAttribute("countPage");
//先判断这个变量是不是存在,如果变量不存在,则要把变量初始化为1,如果存在则累加1.
if (countPage == null) {
pageContext.setAttribute("countPage", 1);
} else {
pageContext.setAttribute("countPage", countPage + 1);
}
%>
<!--跳转页面 -->
<jsp:forward page="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>
执行结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715292228.png)
也就是说在第一个页面中的变量countPage 并没有传到第二个页面,而是通过第二个页面中的计数器所初始化1.countPage 的生命周期只在当前的页面之中.
request对象是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,它的范围是指在一JSP网页发出请求到另一个JSP网页之间,当请求结束的时候就生命周期结束。
代码示例方面,核心代码与pageContext所示例的代码一样,只需要将pageContext的地方改为request,执行的结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715452180.png)
通过代码测试可以得到request对象里的变量可以跨越forward前后两个页面,但是再进行刷新的话,他们将会重新计算,如果将值打印在服务器里的话,多次刷新的结果为
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715519634.png)
session是与某个 Web 客户端的一个用户相关的对象和属性。它的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。比如断网或者关闭浏览器。
还是同样的核心代码,需要更改的是将countPage 改为session,执行的结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715567503.png)
初次的执行结果和request对象的结果没有什么区别但是当多次刷新得到的结果是:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715582222.png)
关闭,或者换一个浏览器再次执行的结果为:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716034758.png)
也就是会话结束的时候session的生命周期结束,当然也可以通过代码或者服务器设置来设置session生命周期.
application是与整个 Web 应用程序相关的对象和属性的范围,在服务器一开始执行服务,到服务器关闭为止。它包括了整个Web应用中的多个页面,请求,会话.
代码还是同pageContext一样,需要更改的是将pageContext改为application,执行结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716067460.png)
当多次刷新之后的结果为:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716093607.png)
刷新后的结果同session一样,没有什么大的区别,但是当关闭浏览器,或换浏览器的时候结果为:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716193008.png)
变量值会继续增加,作用范围仍在继续.当关闭服务器(我用的是Tomcat)并重启时,变量重新开始计数,可以得到application的生命周期为整个web应用.
通过上述的代码和执行结果我们可以从中体会到jsp页面编程中pageContext,Request,Session,application四个对象的作用范围和生命周期.
最后我将用一张图对本文进行总结,如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716224347.png)
这里所说的范围概念用另一个词来说是"域",再具体一些就是一个对象的生命周期.在上述四个对象共同之处是可以承载一些"内容",但不同之处是他们承载这些内容的域(生命周期)是不同的.
本文主要来描述四个对象的作用域并用代码进行验证.
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>web开发的四个范围</title>
<%
Integer countPage = (Integer) pageContext.getAttribute("countPage");
//先判断这个变量是不是存在,如果变量不存在,则要把变量初始化为1,如果存在则累加1.
if (countPage == null) {
pageContext.setAttribute("countPage", 1);
} else {
pageContext.setAttribute("countPage", countPage + 1);
}
%>
<!--跳转页面 -->
<jsp:forward page="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>
执行结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715292228.png)
也就是说在第一个页面中的变量countPage 并没有传到第二个页面,而是通过第二个页面中的计数器所初始化1.countPage 的生命周期只在当前的页面之中.
request对象是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,它的范围是指在一JSP网页发出请求到另一个JSP网页之间,当请求结束的时候就生命周期结束。
代码示例方面,核心代码与pageContext所示例的代码一样,只需要将pageContext的地方改为request,执行的结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715452180.png)
通过代码测试可以得到request对象里的变量可以跨越forward前后两个页面,但是再进行刷新的话,他们将会重新计算,如果将值打印在服务器里的话,多次刷新的结果为
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715519634.png)
session是与某个 Web 客户端的一个用户相关的对象和属性。它的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。比如断网或者关闭浏览器。
还是同样的核心代码,需要更改的是将countPage 改为session,执行的结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715567503.png)
初次的执行结果和request对象的结果没有什么区别但是当多次刷新得到的结果是:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051715582222.png)
关闭,或者换一个浏览器再次执行的结果为:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716034758.png)
也就是会话结束的时候session的生命周期结束,当然也可以通过代码或者服务器设置来设置session生命周期.
application是与整个 Web 应用程序相关的对象和属性的范围,在服务器一开始执行服务,到服务器关闭为止。它包括了整个Web应用中的多个页面,请求,会话.
代码还是同pageContext一样,需要更改的是将pageContext改为application,执行结果如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716067460.png)
当多次刷新之后的结果为:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716093607.png)
刷新后的结果同session一样,没有什么大的区别,但是当关闭浏览器,或换浏览器的时候结果为:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716193008.png)
变量值会继续增加,作用范围仍在继续.当关闭服务器(我用的是Tomcat)并重启时,变量重新开始计数,可以得到application的生命周期为整个web应用.
通过上述的代码和执行结果我们可以从中体会到jsp页面编程中pageContext,Request,Session,application四个对象的作用范围和生命周期.
最后我将用一张图对本文进行总结,如下:
![](http://images.cnblogs.com/cnblogs_com/jnqqls/201203/201203051716224347.png)
相关文章推荐
- DRP之旅第三站--Web 开发的四个范围
- Web开发中的四个域对象(范围由小到大)
- Web开发中的四个域对象(范围由小到大)
- 笔记:学习JavaWeb开发第三课
- 天猫品牌街Web前端开发第三阶段设计 模仿前端开发的通杀神技
- web开发中的四个域对象
- DRP-Web开发的四个范围
- Web开发中的四个域对象: page(jsp有效) request(一次请求) session(一次会话) application(当前web应用)
- 新闻: 传MySpace秘密开发Web邮件产品 或成行业第三
- DRP-Web开发的四个范围
- web开发中的四个域对象生命周期 作用域详细介绍
- DRP之javaweb开发模型Model1&Model2
- 学习Mac开发第三弹 通过WebView加载网页
- JavaWeb-JSP 四个属性的作用范围
- Web前端开发基础 第三课(与浏览者交互)
- web开发中web对象影响范围和生命周期
- web开发中四个域的生命周期和作用域
- Java WEB开发实战 之 第三部分:Servlet开发(1)【私塾在线原创】
- Web开发的四个域
- 使用Ruby on Rails快速开发web应用的教程实例