网络聊天室:通过Servlet和JSP,结合session和application实现(文末附源码)
创始人
2025-01-16 10:04:42
0


目录

一.成品效果

二.代码部分

▐ chat.jsp

▐ ChatServlet


一.成品效果

在启动成功后,我们就可以在任意俩个浏览器页面中相互发消息,如图所示左边屏幕使用的是Edge浏览器,右图使用的是火狐浏览器。当然笔者这里只是简单实现最基本的一些功能,至于页面的美化什么的并没有考虑,有需要的朋友可以自行添加。

二.代码部分

实现起来很简单,提供给用户一个JSP页面用于输入消息和查看消息,再编写一个Servlet用于接收用户的输入,并且进行交互,对于细节这里就不再赘述,下文有对应的解释

▐ chat.jsp

创建一个chat.jsp文件,并在其中编写HTML和JSP代码来显示聊天消息和发送消息的表单。

然后使用JSP标签来获取和显示application范围内保存的聊天消息,并提供一个表单来发送新的消息。

<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Collections" %> <%--   Created by IntelliJ IDEA.   User: LUMING   Date: 2024/4/28   Time: 13:18 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>       简单聊天室        

简单聊天室

聊天消息

    <% List messages = (List) application.getAttribute("messages"); if (messages != null) { for (String msg : messages) { out.println("
  • " + msg + "
  • "); } } %>

发送消息

用户名:
消息:

▐ ChatServlet

创建一个Servlet来处理用户发送的消息并将其保存到application中的集合List里,只要用户输入的姓名和消息不为空,就不断的从当前会话session中取出聊天消息,然后将结果返回

这里对于代码中的ServletContext需要解释一下:

ServletContextApplication其实是同一个概念的不同称呼,在不同的Java Web开发框架中有不同的称呼。在Java Servlet中,全局的ServletContext对象用来表示整个Web应用程序的上下文环境,它提供了一种在不同组件之间共享数据的机制。而在Java EE规范中,这个全局的ServletContext对象被称为Application对象。

因此,在Servlet中使用getServletContext().setAttribute("messages", messages);实际上就是将messages列表存储在全局的应用程序上下文中,其他Servlet和JSP页面都可以通过getServletContext().getAttribute("messages")来获取这个列表,实现数据共享和多用户聊天的功能。

代码中笔者注释了一行静态常量的定义,这里也给出解释:

serialVersionUID是Java中用于版本控制的一个特殊的静态变量。它是一个长整型的数字,用于表示一个类的序列化版本号。当一个类实现了Serializable接口时,编译器会根据类的结构自动生成一个serialVersionUID。这个serialVersionUID在序列化和反序列化过程中用于验证类的版本一致性,以确保序列化的对象可以被正确地反序列化。

如果在反序列化时,类的serialVersionUID与序列化时的serialVersionUID不一致,就会抛出InvalidClassException,表示类的版本不匹配,反序列化失败。在给出的ChatServlet中,声明了一个private static final long serialVersionUID = 1L;,这是为了显示地指定serialVersionUID,以确保每次编译生成的serialVersionUID都是相同的,避免在版本升级时发生不一致的情况。

当然,对于一个课堂小作业来说,这行代码无关紧要,因此笔者这里就注释掉了,大家可以按需选择。

/**  * @Author Luming  * @Date 2024/4/28 13:18  * @Description:  */ import java.io.IOException; import java.util.ArrayList; import java.util.List;  import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;  @WebServlet("/ChatServlet") public class ChatServlet extends HttpServlet { //    private static final long serialVersionUID = 1L;      protected void doPost(HttpServletRequest request, HttpServletResponse response)             throws IOException {         String username = request.getParameter("username");         String message = request.getParameter("message");          if (username != null && message != null) {             // 获取当前会话的session             HttpSession session = request.getSession(true);              // 获取当前聊天消息列表             List messages = (List) getServletContext().getAttribute("messages");             if (messages == null) {                 messages = new ArrayList<>();                 getServletContext().setAttribute("messages", messages);             }             // 添加新消息             messages.add(username + ": " + message);              // 将用户名保存到session中             session.setAttribute("username", username);         }          response.sendRedirect("chat.jsp");     } } 

俩部分代码结构如下,之后启动Tomcat就可以直接聊天了





 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...