为了账号安全,请及时绑定邮箱和手机立即绑定

通过网络计数器验证jsp的作用域(page,request,session,application)

标签:
Java 产品 测试

这是我的老师课堂的讲课内容,现在整理出来送给大家。网上转了一圈,貌似这是最精简的网络计数器的代码了,核心只有几行而已。当然重点不在于此。

第一,page 页面范围 pageContext (setAttribute getAttribute)

page指当前页面。只在一个jsp页面里有效 。page里的变量没法从a.jsp传递到b.jsp。只要页面跳转了,它们就不见了。

 如果我们把变量setAttribute 到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 你可以通过getAttribute得到页面内的这个变量。
代码验证如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 

Integer count=(Integer) pageContext.getAttribute("count");

if(count !=null){
count=1+count;
}else
count=1;
pageContext.setAttribute("count", count);

 %>

 <% 

 Integer a=(Integer)pageContext.getAttribute("count");
 out.print("您是"+a+"位用户");

  %>
</body>
</html>

图片描述
每一刷新,总是显示你是第一个客户。这是因为刷新就是重载,相当于另一个页面请求。所以count计数重新开始。

第二,request 请求的范围 request (setAttribute getAttribute)
请求的范围是指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。

还是上面的代码,我们只需要pageContext改为request就行,不过我们是否发现输出的那一段变量有些冗余啊,可以直接用<%=%>实现输出啊。现在修改如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 

Integer count=(Integer) request.getAttribute("count");

if(count !=null){
count=1+count;
}else
count=1;
request.setAttribute("count", count);

 %>

 <%="您是"+count+"位用户" %>
</body>
</html>

图片描述
第三, session 会话的范围 session (setAttribute getAttribute)

回话的范围是指从浏览器打开到浏览器关闭这个过程。
这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。代码如上,将request改为session。

图片描述

如图所示,换一个浏览器相当于打开了一个新的浏览器,计数从零开始,同样我们关闭浏览器,计数也是从零开始。

第四: application 项目启动--项目关闭 application (setAttribute getAttribute)

它的有效范围是整个应用。一般都是以服务器的关闭为结束标志。而一般服务器都不关闭, 
所以它们的存活时间是最长的,存进变量的数据如果不进行手工删除,它们就一直可以使用 。

代码省略。
图片描述
如图所示。

如果我们不关闭浏览器,只修改密码,则application可能共享session的数据,这个可能因为浏览器的不同有稍微差别。

如果我们关闭所有的浏览器,计数将从零开始,再打开谷歌浏览器,计数将共享360的数据从14开始.而非从零开始。

application里的变量不仅存活的时间最长,关键的一点是可以被所有同一服务器的用户共享。

如果用户a的操作修改了application中的变量,用户b访问时得到的是修改后的值。

而另外的三大内置对象page, request, session都是完全独有的,无论如何修改都不会影响其他人的数据。

而这一点也被用在很多web开发当中,比如聊天室中,一个人发出的对话,可以被聊天室内的所有人看到。一个人进入聊天室,在线会员的变化也会被所有会员看到,这些都是application共享数据达到的效果

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消