《JSP入门教程(DOC格式)》第10章


里使用。
4。 如果把变量放到 application 里,就说明它的作用域是 application,它 
的有效范围是整个应用。
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到 
服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务 
器,就会把上面所有的应用都关闭了。
application 作用域里的变量,它们的存活时间是最长的,如果不进行手 
工删除,它们就一直可以使用。
与上述三个不同的是,application 里的变量可以被所有用户共用。如果 
用户甲的操作修改了 application 中的变量,用户乙访问时得到的是修改 
后的值。这在其他 scope 中都是不会发生的,page; request; session 
都是完全隔离的,无论如何修改都不会影响其他人的数据。
我们使用 public Object getAttribute(String name)获得变量值,使用 public
void setAttribute(String name; Object value)将变量值保存到对应作用域中。 
举个 pageContext 的例子就是:
37 / 148
…………………………………………………………Page 38……………………………………………………………
// page
Integer countPage = (Integer) pageContext。getAttribute(〃countPage〃);
if (countPage == null) {
pageContext。setAttribute(〃countPage〃; 1);
} else {
pageContext。setAttribute(〃countPage〃; countPage + 1);

这里先从 pageContext 中取出名为 countPage 的整数,因为返回的都是 
java。lang。Object 类型,所以需要强制转换成我们需要的整形。这里取得的变 
量如果不存在就会返回 null,通过判断 countPage == null 来辨别变量是否存 
在,如果不存在就设置为 1,如果存在就进行累加,最后使用 setAttribute() 
方法将修改后的变量值放入 pageContext。
将其中的 pageContext 换成 request; session; application 就可以操作其他三 
个作用域中的变量。
在显示这些变量值的时候,我们没有写 
而是使用了{countPage}的形 
式,这种{}的形式叫做 el 表达式,是 jsp…2。0 规范的一部分,tomcat 里正好 
可以使用。
使用 el 有以下几个好处:
1。 代码量小,并且不需要使用尖括号。
2。 支持从 pageContext; request; session; application 中取值,它会自 
动检查四个作用域,不需要特别指定。
3。 如果变量不存在,会输出空字符串〃〃,而不是 null,省去了手工判断的 
工作。
4。2。 例子:在线列表
我们做一个新手级的在线用户列表,原理是这样:
1。 用户登录,并把登录使用的用户名保存到 session 中,通过 session 中是 
否存在用户名判断用户是否已登录。
session 可以在整个会话过程中保存用户信息,不必每次刷新页面都重新 
登录。
2。 用户登录后,将用户名添加到 application 中的在线用户列表。
用户注销时,讲用户名从 application 中的在线列表删除。
38 / 148
…………………………………………………………Page 39……………………………………………………………
只要服务器还在运行着,application 就会保存所有登录用户的信息,所 
有用户都可以看到这个在线用户列表。
可以尝试一下 lingo…sample/04…02/中的例子:
1。 进入登录页面,登陆一个用户。
2。 登录成功既看到已登录的用户名,和当前的在线用户列表。
3。 再登录一个用户。
4。 然后就可以看到在线用户列表增加了,可以看到里面包含上次登录的用户 
和当前登录的用户。
这时,如果第一个用户刷新页面,也会看到在线用户列表中变成两个人。
39 / 148
…………………………………………………………Page 40……………………………………………………………
5。 现在任何一个用户点击注销,将返回登录页面。另一个用户刷新页面会发 
现在线用户列表减少了。
让我们从登录页面 index。jsp 开始,复习一下目前学到的知识。
index。jsp 中显示的是用户登录表单,为了显示 index。jsp 中包含的中文,需要 
加上,这里使用的文件 
编码是默认的 gb2312。
用户名:
在这个 form 里我们可以输入一个 username 的值,提交的url 是 login。jsp,使 
用 post 方法是为了更简单的解决中文问题。在填写了用户名之后,点击登录按 
钮,将数据提交到 login。jsp。
login。jsp 中进行的是对用户名的操作,包括获得请求中的用户名,将用户名添 
加到 session 和在线用户列表中。
中文编码设置和获得请求参数都已经熟识了。在获得在线用户列表时,先获得 
application 中的 onlineUserList,强制转换成 List 类型。如果 onlineUserList 
并不存在,我们还需要先对它做初始化,并添加到 application 里。这时有一个 
小技巧,因为 onlineUserList 已经放在application 中了,将username 添加进 
去后,不必再使用 setAttribute()也可?
小说推荐
返回首页返回目录