java web聊天室原理_java web利用mvc结构实现简单聊天室功能

article/2025/10/14 0:28:51

简单聊天室采用各种内部对象不适用数据库实现。

一个聊天室要实现的基本功能是:

1.用户登录进入聊天室,

2.用户发言

3.用户可以看见别人发言

刚才算是简单的需求分析了,现在就应该是进行mvc结构的设计:

1.视图,有登陆页面login.jsp,聊天页面chat.jsp,其中chat.jsp利用框架实现,包括两部分,用户发言sendMessage.jsp和聊天信息的查看content.jsp;

2.模型,包括聊天信息的显示(类Message)和聊天信息的管理(类MessageService);

3.控制器,登录功能的控制器LoginServlet,添加消息的控制器AddMessageServlet。

整个程序实现的大致流程是这样的:每当一个用户登录聊天室,根据用户的userid把用户添加进application对象的ArrayList中,在application中保存的是当前所有在聊天的用户;用户登陆成功之后,通过控制器LoginServlet把application对象遍历,输出所有的消息,消息存储在application(消息格式:用户名+消息);用户发言,通过控制器AddMessageServlet,先在session中取出用户名,把当前消息放在application中,保存更新后的消息,跳转到聊天页面。

精简源代码:

1.登陆界面login.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2

欢迎进入聊天室

3

4 用户名:

5

6

7

8

9

10

View Code

2.聊天界面整体框架chat.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

此网页使用了框架,但你的浏览器不支持框架

View Code

3.用户发言sendMessage.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2

3 发言:

4 value="确定">

5

6

View Code

4.显示聊天信息

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2

3 //页面每隔1秒自动刷新一遍

4 response.setHeader("refresh","1");5 %>

6

7

8 ${message.userid }9 在${message.time }说:${message.info }

10

11

12

View Code

5.登录控制器LoginServlet

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public class LoginServlet extendsHttpServlet {2

3 public voiddoGet(HttpServletRequest request, HttpServletResponse response)4 throwsServletException, IOException {5 //获取用户输入

6 String userid = request.getParameter("userid");7 userid = new String(userid.getBytes("utf-8"));8

9 //获取application对象

10 ServletContext application = this.getServletContext();11 //获取application对象中user

12 ArrayList users = (ArrayList) application13 .getAttribute("users");14

15 //判断用户名是否存在

16 if (users != null &&users.contains(userid)) {17 request.setAttribute("errorinfo", "用户" + userid + "已经存在");18 RequestDispatcher rd;19 rd = request.getRequestDispatcher("login.jsp");20 rd.forward(request, response);21 } else{22 if (users == null)//如果当前application中没有user,初始化user对象

23 {24 users = new ArrayList();25 }26 users.add(userid);27 application.setAttribute("users", users);28

29 //为每一个用户设置一个session

30 HttpSession session = request.getSession(true);31 session.setAttribute("userid", userid);32

33 response.sendRedirect("chat.jsp");34

35 }36

37 }38

39 public voiddoPost(HttpServletRequest request, HttpServletResponse response)40 throwsServletException, IOException {41 doGet(request, response);42 }43

44 }

View Code

6.添加消息的控制器AddMessageServlet

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public class AddMessageServlet extendsHttpServlet {2

3 public voiddoGet(HttpServletRequest request, HttpServletResponse response)4 throwsServletException, IOException {5

6 //从request中取出用户的个人信息

7

8 HttpSession session = request.getSession(true);9 String userid = (String) session.getAttribute("userid");10

11 //从request对象中取出用户新增的聊天信息

12

13 String info = request.getParameter("info");14 info = new String(info.getBytes("utf-8"));15

16 //取出所有的聊天信息

17 ServletContext application = this.getServletContext();18 ArrayList allMessage = (ArrayList) application19 .getAttribute("allMessage");20

21 //创建消息对象

22 Message message = newMessage(userid, info);23

24 //创建业务对象

25 MessageService service = newMessageService(allMessage);26

27 //调用业务逻辑

28 service.addMessages(message);29

30 //保存更新后的消息

31 application.setAttribute("allMessage", service.getAllMessages());32

33 //转向聊天页面

34 response.sendRedirect("content.jsp");35

36 }37

38 public voiddoPost(HttpServletRequest request, HttpServletResponse response)39 throwsServletException, IOException {40 doGet(request, response);41 }42

43 }

View Code

7.聊天信息Message.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 //聊天信息的表示

2 public classMessage {3 privateString userid;4

5 privateString info;6

7 publicMessage(String userid,String info)8 {9 this.userid =userid;10 //this.sex=sex;

11 this.info=info;12 this.time=(new SimpleDateFormat("hh:mm:ss")).format(new Date());//将时间格式化

13

14 }15 publicString getUserid() {16 returnuserid;17 }18 public voidsetUserid(String userid) {19 this.userid =userid;20 }21

22 publicString getInfo() {23 returninfo;24 }25 public voidsetInfo(String info) {26 this.info =info;27 }28 publicString getTime() {29 returntime;30 }31 public voidsetTime(String time) {32 this.time =time;33 }34 privateString time;35

36 }

View Code

8.聊天信息管理MessageService.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classMessageService {2 private ArrayListallMessages;3 public MessageService(ArrayListallMessages)4 {5 this.allMessages=allMessages;6 }7 public ArrayListgetAllMessages()8 {9 returnallMessages;10 }11

12 public voidaddMessages(Message message)13 {14 //先判断聊天信息列表是否为空,为空则新建聊天列表

15 if(allMessages==null)16 {17 allMessages=new ArrayList();18 }19 else

20 {21 allMessages.add(0,message);//将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。

22 }23 }24

25 }

View Code

收获:通过这么一个小小的web程序,加深了对mvc模式的理解。

mvc的传值方式(个人理解):视图层通过表单提交的方式把信息放在request对象中,在控制器中通过request对象获取视图层的数据,获取的数据经过模型层的业务逻辑处理,把相应的结果放在response对象中传回浏览器显示在视图中。

小知识点:

application对象只有一个,每一个用户都有自己的session,每个用户的每个请求都对应着一个新的request对象(request只能在一次请求时共享信息)。

标准标签库的使用:循环输出循环体

最后,部署自己的应用到服务器下就可以使用了。


http://chatgpt.dhexx.cn/article/hLnSVor8.shtml

相关文章

基于Springboot的聊天室Web系统设计

基于Springboot的聊天室Web系统设计 目录 基于Springboot的聊天室Web系统设计 一、背景二、创建项目三、代码实现四、总结五、参考文献 一、背景 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&…

Javaweb 聊天室

Javaweb 聊天室 2020.5.13更新: 最近有很多小伙伴私信我,跑不动这个项目,数据库报错之类的。然后我自己也去clone下来重新更新了一下,因为之前是用 eclipse 做的,我现在已经不用了,所以用 idea 重新跑了一…

WebSocket实现简单的web聊天室

WebSocket实现简单的web聊天室 1.需要Tomcat7.0所以服务器 2.需要JDK7.0 3.手工加入Tomcat7.0中lib目录下的一下三个包catalina.jar、tomcat-coyote.jar、websocket-api.jar 4.项目部署后,请将服务器中当前项目下的catalina.jar、tomcat-coyote.jar、websocket-api.…

web网络聊天室

花了四天时间做了一个简单的web聊天室 前端页面效果大概是下面这个样子 1.登陆界面 2.注册界面 这里首先会检查用户名是否重复, 如果重复,会提示你用户名已存在 反正显示可用 3.聊天室界面 登陆成功会在左边显示登陆人的名称以及当前在线人数。 然后…

web聊天室实现

后端: package com.jsx.chat;import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose; imp…

基于Java语言的Web在线聊天室

在线聊天室 能够实现登录,注册,聊天功能,最终效果如下图所示 注册页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"…

Springboot+netty实现Web聊天室

Web聊天室的实现 一、项目的创建二、代码编写参考 一、项目的创建 新建Spring项目&#xff1a; 选择JDK版本&#xff1a; 选择Spring Web&#xff1a; 项目名称和位置的设置&#xff1a; 二、代码编写 导入.jar包&#xff1a; gson: https://search.maven.org/artifact/co…

用springboot+netty搭建在线web聊天室

最近自己搭建了一个在线的聊天室&#xff0c;利用netty技术开发&#xff0c;实现在线聊天以及群聊功能&#xff0c;包括好友添加等相关功能&#xff0c;目前还在更新中。 1.我是通过springbootnetty实现&#xff0c;通过使用netty4实现&#xff0c;运用这种方式就可以帮助我们…

基于SSM的Web网页聊天室系统

目 录 第1章 前 言 1 1.1 论文研究的目的和意义 1 1.2 国内外研究综述 2 1.3 论文研究的内容和取得的成果 2 第2章 即时通讯聊天系统开发涉及技术简介 4 2.1 Spring简介 4 2.2 SpringMVC简介 4 2.3 MyBatis简介 5 2.4 AmazeUI简介 5 2.5 开发工具介绍 5 2.5.1 Eclipse集成开发环…

【项目设计】基于WebSocket的Web聊天室

文章目录 1. 项目简介2. 数据库表的设计3. 实体类以及工具类的设计3.1 实体类model3.1.1 lombok的使用 3.2 工具类util3.2.1 DBUtil3.2.2 WebUtil 4. 注册功能4.1 前端设计4.2 关于Ajax技术的介绍4.3 后端设计 5. 登陆功能5.1 前端设计5.2 后端设计 6. 获取频道列表6.1 前端设计…

手把手教你写一个web聊天室之bookstap框架

一&#xff1a;bookstap简介 Bootstrap&#xff0c;来自 Twitter&#xff0c;是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的&#xff0c;它简洁灵活&#xff0c;使得 Web 开发更加快捷。并且对开发响应式网页十分友好&#xff0c;使用框架进行网页开发…

从零开始搭建 web 聊天室(一)

本篇将介绍如何快速、简便地使用 socket.io 库搭建一个 web 在线聊天室。前端并没有使用任何框架。后端使用 express 框架搭建简易的后端。 socket.io 库本质上是基于 websocket 上进行封装。改变了以往只能前端发送请求&#xff0c;后端才能返回给前端信息&#xff0c;这样的…

基于socket.io的web聊天室

基于socket.io的web聊天室 一、 项目介绍 该项目使用node.js作为后端服务器框架&#xff0c;并利用socket.io来实现web聊天室功能。socket.io是由 JavaScript 实现的基于Node.js架构体系的用于实时通信的开源框架&#xff0c;它包括了客户端的 JavaScript 库和 服务器端的 No…

一个轻量级多功能免费开源web聊天室

一个轻量级多功能免费开源web聊天室&#xff0c;轻量级实用功能多而强悍的聊天室系统 版本特点&#xff1a; 支持图文发送,兼容QQ内置,微信内置,pc等浏览器 无需服务端操作,phpmysql高效运行,无需第三方插件 高效极快的运行速度 聊天室bbs推送 多功能聊天室 支持一键粘贴网页图…

web聊天室项目开发过程及重难点整理

目录 一、需求分析二、业务背景1.张三要发消息给李四2.WebSocket实现消息推送流程 三、前后端接口和数据库系统设计1.用户相关的接口2.频道相关接口3.数据库表的设计 四、功能交互实现原理及代码展示1.输入url访问主页2.调用检查登陆状态接口2.1参数ok&#xff1a;true时显示登…

django WEB聊天室项目

bbs系统项目中我们用到的ajax不多,但是在聊天室里用到的全是ajax,所以本项目的主要内容就是: 前端使用ajax传输json格式的数据是本节的重点以及 前端函数的的使用. http协议的特点是:短链接 ,服务器无法主动向客户端发送消息.都是客户端请求服务器返回消息. 那么问题来了,WEB聊…

Web聊天室项目

Web聊天室 项目描述所用技术业务分析接口设计和整体业务流程相关代码程序演示 项目描述 实现一个类似于在线QQ聊天的功能&#xff0c;不同的用户可以在相同的频道里发送和接受消息从而达到在线聊天的功能。 项目的主要功能有&#xff1a;注册用户、用户登陆、频道主页、进入频…

Web聊天室

目录 一&#xff0c;简介 二&#xff0c;开发环境 三&#xff0c;涉及的技术 四&#xff0c;主要功能 1.注册功能 2.登录功能 3.异地登陆&#xff08;第一次登录网页会被强制退出&#xff09; 4.发送消息 5.接收消息 6.注销登录 五&#xff0c;准备工作 1.引入开发…

八个步骤实现一个Web项目(在线聊天室)

实现一个在线网页的聊天室 Hello&#xff0c;今天给大家带来的是我的一个Web项目的开发过程的相关步骤&#xff0c;这个项目实现的功能是一个Web在线聊天室&#xff0c;简单的来说就是实现在网页版的聊天框&#xff0c;能够实现对于用户信息进行注册&#xff0c;登录&#xff…

基于JavaWeb聊天室设计与实现

目 录 摘要 i Abstract ii 1 概述 1 1.1 聊天室系统的基本概念 1 1.2 开发聊天室系统的意义 1 1.3 目前的研究现状 1 1.4 总体设计的基本思路 1 2 主要技术 3 2.1 JSP技术 3 2.2 JavaBean技术 4 2.3 Servlet技术 4 2.4 MyEclipse开发工具 6 2.5 Access数据库技术 6 2.6 Tomcat…