在不同页面之间共享数据的最常见方法是使用ServletContext和application对象,通过在一个用户那里设置一个属性,在另一个用户那里可以获得这个属性。
1.使用ServletContext
在JSP页面中可以通过getServletContext()方法获得ServletContext对象。
在这种情况下,不同用户的页面之间可以通过ServletContext共享数据,当然同一个用户的不同页面也可以通过ServletContext共享数据。
聊天室程序是非常常见的,下面我们使用ServletContext创建一个非常简单的聊天室,如例程10-8所示。
例程10-8 使用ServletContext对象创建一个简单的聊天室
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.*, com.jspdev.ch10.*" errorPage="" %> <% request.setCharacterEncoding("gb2312"); %> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body>
|
一个简单的聊天室
<br><hr><font color=red> <% String content=(String)getServletContext().getAttribute(new String("chatTopic_1")); out.println(content); getServletContext().setAttribute("chatTopic_1",content+(String)request.getParameter ("content")+"<br>"); %> </font> <hr> <form action="Servlet Context_chat.jsp"> <input type=text name=content> <input type=submit value="说话呀"> </form> </body> </html>
|
其实,正在聊天的代码只有黑体字所示的3行程序。这种程序的思路非常简单:当提交一些内容后,首先获得ServletContext中的chatTopic_1属性的值,这个属性的值就是当前聊天的内容,然后把这个值显示在客户端,最后连同当前用户说话的内容一起设置为ServletContext中的chatTopic_1属性。
在浏览器里输入:http://127.0.0.1:8080/ch10/Servlet Context_chat.jsp。在表单中填写一些信息后提交。然后另外打开一个浏览器,输入同样的URL,这样就可以通过这个简单的程序聊天了,如图10-1所示。
 |
| 图10-1 一个非常简单的聊天室 |
2.使用application对象
application对象对于每个Web应用来说只有一个,它的使用和ServletContext差不多。下面我们简单地看一个应用。我们使用application对象把例程10-8所示的聊天程序重新写一遍,如例程10-9所示。
例程10-9 使用application对象编写的聊天程序(testApplication.jsp)
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.*" errorPage="" %> <% request.setCharacterEncoding("gb2312"); %> … <br><hr><font color=red> <% String content=(String)application.getAttribute(new String("chatTopic_1")); out.println(content); application.setAttribute("chatTopic_1",content+(String)request.getParameter("content")+"<br>"); %> …
|
可以看出,application的实现机制和ServletContext的实现机制基本上是一样的。
【责任编辑:
火凤凰 TEL:(010)68476606-8007】