友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




     里使用。  



  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()也可�
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!