首页 理论教育使用JSP实现JavaWeb应用开发的在线聊天室

使用JSP实现JavaWeb应用开发的在线聊天室

【摘要】:完成本任务所用到的主要知识点:JSP 内置对象会话跟踪技术使用JSP 技术实现一个简易的即时的在线聊天室。图上机5.2聊天室界面框架如何实现聊天功能。图上机5.3聊天室登录页面登录页面只需要输入昵称就可以了。聊天室主界面index.jsp。图上机5.4聊天室首页显示网站Logo 的页面top.jsp 代码如下。表上机5.1聊天室包含的页面运行测试。

完成本任务所用到的主要知识点:

➢ JSP 内置对象

➢ 会话跟踪技术

使用JSP 技术实现一个简易的即时的在线聊天室。

聊天至少应该包含聊天者,为了辨别说话的用户,每个用户在聊天前必须进行登录。不过可以将登录简单化,只要求用户输入一个昵称就可以了。除此之外,还应该向聊天者提供在线用户列表。所以,一个简易的在线聊天室至少应该包含用户登录、聊天和显示在线用户列表的功能。

(1)聊天室主界面布局。

聊天室主界面采用框架(Frame)进行布局,如图上机5.2 所示为本聊天室的主界面的框架图,这有点类似于QQ 群的布局。

图上机5.2 聊天室界面框架

(2)如何实现聊天功能。

可以提供一个表单供用户输入聊天消息,当用户单击“发送”按钮时就将聊天消息提交到服务器端,服务器端使用一个页面处理提交的聊天消息,使用另一个页面显示聊天消息。在处理聊天消息的页面中,首先获取聊天消息,然后将其存储在application 中;在显示聊天消息的页面中,直接从application 中获取聊天消息显示给用户。

(3)如何实现即时聊天。

即时聊天就要保证一个用户发送的聊天信息在很短的时间内让聊天室的所有用户看到,如果刷新整个聊天室就无法达到即时的效果了。既然是用框架搭建的聊天室界面,就可以只刷新个别需要刷新的页面。下面代码中加粗部分可以让页面自动刷新,content属性用于设置刷新间隔的秒数。

根据图上机5.2 所示的界面结构,聊天室应该包含4 个页面,其中需要自动刷新的页面是显示聊天内容和显示用户列表的页面,因为这两个页面是时常要变化的。显示聊天内容的页面是最需要即时的,所以将其设置为每隔1 s 刷新,而显示用户列表的页面即时性要求不高,可以设置为每隔10 s 刷新。而显示发送消息表单的页面(即发送消息的页面)只需要在用户单击“发送”按钮后再刷新,不必自动刷新。

(1)建立项目sj6_2。

(2)实现登录功能。登录功能包含两个JSP 页面,一个为登录表单页面(login.jsp),另一个为处理登录数据的页面(doLogin.jsp)。

login.jsp 页面的代码如下。

登录页面运行效果如图上机5.3 所示。

图上机5.3 聊天室登录页面

登录页面只需要输入昵称(即用户名)就可以了。处理登录数据的页面doLogin.jsp代码如下。(www.chuimin.cn)

在处理登录数据的页面中对登录用户名进行了验证,只有不为空(null 或空字符串)和没被其他用户占用的用户名才能通过验证。通过验证的用户名将同时存入session和application 中。application 中存储的是所有用户列表,而session 中存储的是当前的会话用户。

(3)聊天室主界面index.jsp。index.jsp 页面由多个页面组成,其代码如下。

index.jsp 被划分成了4 个部分,运行效果如图上机5.4 所示。

图上机5.4 聊天室首页

(4)显示网站Logo 的页面top.jsp 代码如下。

(5)显示用户列表的页面users.jsp 代码如下。

在users.jsp 中首先判断了用户是否登录(根据session 中存储的当前用户名判断),若未登录则转到登录页面。在该页面中,不仅输出了用户列表,也输出了当前用户和在线人数,并且该页面每隔10 s 自动刷新。

(6)发送消息的表单页面(发送消息页面)input.jsp 代码如下。

(7)处理聊天消息的页面doInput.jsp 代码如下。

在处理聊天消息的页面(doInput.jsp)中,实现了对用户发送的消息进行格式化(比如按照一定格式加上发送消息的用户名和时间),然后将消息存入application 中。最后又跳转回input.jsp 页面。

(8)显示聊天消息的页面message.jsp 代码如下。

在显示消息的页面(message.jsp)中,自动从application 中获取用户发送的聊天消息并显示给用户,每隔1 s 自动刷新。这样就保证了用户能即时看到自己或别人发送的聊天消息。

(9)安全退出功能。在发送消息的页面还提供了一个“安全退出”的超级链接,该链接指向的页面loginOut.jsp 就实现了安全退出的功能。loginOut.jsp 代码如下。

在loginOut.jsp 中,首先获取当前登录的用户。若获取到登录用户则从session 中和application 中存储的用户列表中删除该用户。最后重定向至登录页面。

最后将聊天室中的所有页面列出并简单说明,见表上机5.1。

表上机5.1 聊天室包含的页面

(10)运行测试。发布项目,启动Tomcat 服务器。聊天效果如图上机5.5 所示。

图上机5.5 聊天效果