网络聊天室:通过Servlet和JSP,结合session和application实现(文末附源码 ...

打印 上一主题 下一主题

主题 641|帖子 641|积分 1923



目次
一.成品效果
二.代码部分
▐ chat.jsp
▐ ChatServlet


一.成品效果

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

二.代码部分

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

创建一个chat.jsp文件,并在其中编写HTML和JSP代码来显示聊天消息和发送消息的表单。
然后利用JSP标签来获取和显示application范围内保存的聊天消息,并提供一个表单来发送新的消息。
  1. <%@ page import="java.util.List" %>
  2. <%@ page import="java.util.ArrayList" %>
  3. <%@ page import="java.util.Collections" %>
  4. <%--
  5.   Created by IntelliJ IDEA.
  6.   User: LUMING
  7.   Date: 2024/4/28
  8.   Time: 13:18
  9. --%>
  10. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  11. <html>
  12. <head>
  13.     <title>简单聊天室</title>
  14.     <style>
  15.         body {
  16.             font-family: Arial, sans-serif;
  17.             background-color: #f0f0f0;
  18.             margin: 0;
  19.             padding: 0;
  20.         }
  21.         h1 {
  22.             text-align: center;
  23.             color: #333;
  24.         }
  25.         h3 {
  26.             color: #333;
  27.         }
  28.         ul {
  29.             list-style-type: none;
  30.             padding: 0;
  31.         }
  32.         li {
  33.             margin-bottom: 10px;
  34.             background-color: #fff;
  35.             padding: 5px 10px;
  36.             border-radius: 5px;
  37.             box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
  38.         }
  39.         form {
  40.             margin-top: 20px;
  41.             background-color: #fff;
  42.             padding: 10px;
  43.             border-radius: 5px;
  44.             box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
  45.         }
  46.         input[type="text"], input[type="submit"] {
  47.             padding: 5px;
  48.             margin-bottom: 5px;
  49.             border: 1px solid #ccc;
  50.             border-radius: 3px;
  51.         }
  52.         input[type="submit"] {
  53.             background-color: #007bff;
  54.             color: #fff;
  55.             border: none;
  56.             cursor: pointer;
  57.         }
  58.     </style>
  59. </head>
  60. <body>
  61. <h1>简单聊天室</h1>
  62. <h3>聊天消息</h3>
  63. <ul>
  64.     <%
  65.         List<String> messages = (List<String>) application.getAttribute("messages");
  66.         if (messages != null) {
  67.             for (String msg : messages) {
  68.                 out.println("<li>" + msg + "</li>");
  69.             }
  70.         }
  71.     %>
  72. </ul>
  73. <h3>发送消息</h3>
  74. <form action="ChatServlet" method="post">
  75.     用户名: <input type="text" name="username"><br>
  76.     消息: <input type="text" name="message"><br>
  77.     <input type="submit" value="发送">
  78. </form>
  79. </body>
  80. </html>
复制代码
▐ 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都是相同的,避免在版本升级时发生不同等的情况。
当然,对于一个课堂小作业来说,这行代码无关紧要,因此笔者这里就注释掉了,大家可以按需选择。
  1. /**
  2. * @Author Luming
  3. * @Date 2024/4/28 13:18
  4. * @Description:
  5. */
  6. import java.io.IOException;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.annotation.WebServlet;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import javax.servlet.http.HttpSession;
  15. @WebServlet("/ChatServlet")
  16. public class ChatServlet extends HttpServlet {
  17. //    private static final long serialVersionUID = 1L;
  18.     protected void doPost(HttpServletRequest request, HttpServletResponse response)
  19.             throws IOException {
  20.         String username = request.getParameter("username");
  21.         String message = request.getParameter("message");
  22.         if (username != null && message != null) {
  23.             // 获取当前会话的session
  24.             HttpSession session = request.getSession(true);
  25.             // 获取当前聊天消息列表
  26.             List<String> messages = (List<String>) getServletContext().getAttribute("messages");
  27.             if (messages == null) {
  28.                 messages = new ArrayList<>();
  29.                 getServletContext().setAttribute("messages", messages);
  30.             }
  31.             // 添加新消息
  32.             messages.add(username + ": " + message);
  33.             // 将用户名保存到session中
  34.             session.setAttribute("username", username);
  35.         }
  36.         response.sendRedirect("chat.jsp");
  37.     }
  38. }
复制代码
俩部分代码布局如下,之后启动Tomcat就可以直接聊天了





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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表