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

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

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

1

2

欢迎进入聊天室

3

4 用户名:

5

6

7

8

9

10

View Code

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

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

View Code

3.用户发言sendMessage.jsp

1

2

3 发言:

4 value="确定">

5

6

View Code

4.显示聊天信息

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

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

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

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

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只能在一次请求时共享信息)。

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

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

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

  1. java web利用mvc结构实现简单聊天室功能

    简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是:         1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...

  2. java web聊天室原理_java web实现简单聊天室

    目标 servlet.jsp实现简单聊天室,用户通过浏览器登录后进入聊天室,可发送消息进行群聊,点击聊天信息框中的用户名可实现拍一拍功能. 基础知识 数据的存取 setAttribute / getA ...

  3. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  4. android计算器功能实现,在android中利用 studio实现一个简单的计算器功能

    在android中利用 studio实现一个简单的计算器功能 发布时间:2020-11-07 15:35:20 来源:亿速云 阅读:168 作者:Leah 这篇文章将为大家详细讲解有关在android ...

  5. java servlet原理_Java Web 深入分析(8) Servlet工作原理解析

    Servlet Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态We ...

  6. java项目使用过滤器实例_Java web开发--过滤器篇(详细介绍)

    一. web过滤器的介绍 1.过滤器 在生活中,过滤这种我们时常可见:比如水资源的处理,化学药剂的提取等等.所谓过滤,就是指对某事物的处理进行一定的处理获取相应的结果的一个过程.它可以总结为下: 过滤 ...

  7. java web学什么软件_java web开发是什么?该怎么学习?

    Java中有前端这个开发方向,上回我们说到了javaweb是什么?你们应该对javaweb有了一定的了解了,那你们知道该如何学习web吗?小编这里整理了一些相关知识,快来看看吧. 一.javaweb是 ...

  8. java web初级面试题_Java Web应用程序初学者教程

    java web初级面试题 Java Web Application is used to create dynamic websites. Java provides support for web ...

  9. java目前开发的背景_Java web 开发构想[一] 背景和形势

    [Java web 开发构想系列 转自JavaEye社区,在此申明] 1.背景.形势 能够进行Web开发的编程语言和技术很多 (1) 动态解释语言 PHP; Perl; Python (Zope, P ...

最新文章

  1. LayoutInflater中调用系统服务
  2. 深度学习(二十六)Network In Network学习笔记-ICLR 2014
  3. ITK:在图像中线性插值位置
  4. 【STM32】【STM32CubeMX】STM32CubeMX的使用之三:UART串口通信
  5. python将图片原比例缩小_Python实现图片长宽比例缩放和填充
  6. Python使用openpyxl和pandas处理学生成绩Excel文件实用案例
  7. 网络编程之 哈希表原理讲解 来自老司机的源码
  8. codefroces204A - Little Elephant and Interval 数位DP
  9. 360软件管家android,360软件管家
  10. 【mysql快速入门】牛客网:查询所有列查询多列查询结果去重查询结构返回限制行数将查询后的列重新命名
  11. 赵学军: 理想主义者的下一城
  12. nginx 图片服务器性能,Tengine Nginx性能测试
  13. vs---编写第一个JavaScript程序
  14. LeetCode Problems 903
  15. openCV实践项目:图片文本检测
  16. 计算机网络实验四协议分析心得,计算机网络原理实验_使用网络协议分析仪Wireshark...
  17. c语言qq自动回复,QQ自动回复
  18. GIS原理与技术-平时作业
  19. 温故知新|传感器基础结构与通信原理
  20. mysql连接耗尽_连接池耗尽了!!!

热门文章

  1. java中集群和分布式的区别_java 分布式与集群的区别和联系
  2. Spring——面向切面编程
  3. 台式计算机无法联网,台式机无法联网怎么办
  4. android调用webXml 查询发车站和到达站查询火车时刻表
  5. HackRequests+BeautifulSoup+re爬取网站网址
  6. 为什么流量是新零售的核心命题?
  7. 1142 - ALTER command denied to user ‘sdfsfs‘@‘dfsddfsdfsdfsd‘ for table ‘sdfsdfsdf‘
  8. 工作流系统开发之二十二 dotnet版工作流引擎
  9. jquery转盘抽奖活动代码
  10. 关于数据采集工作的一些感受