这是我的老师课堂的讲课内容,现在整理出来送给大家。网上转了一圈,貌似这是最精简的网络计数器的代码了,核心只有几行而已。当然重点不在于此。
第一,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共享数据达到的效果
共同学习,写下你的评论
评论加载中...
作者其他优质文章