基于Java的聊天室系统的设计与实现

本文介绍了一个基于Java、JSP和S2SH框架的B/S模式聊天室系统,涵盖了用户登录、注册、实时聊天、在线人数管理等功能。系统采用Myeclipse为开发工具,MySQL为数据库,整合Struts2、Spring和Hibernate框架,实现了单人和群聊功能,具有良好的操作性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术:Java、JSP等
摘要:

伴随着互联网的迅速发展,网络聊天工具成为当今社会上主要的交流工具,网民们在网络中畅所欲言,受到各个年龄段的人的青睐。网络聊天工具既可以让用户在网上迅速找到自己的亲人和朋友,还可以结交志同道合的陌生网友,实时交流方便了人与人之间的交流,让世界各地连接成一个地球村。目前,社会中出现了很多方便实用的聊天工具,在这些聊天工具中,人们最喜欢使用的还是腾讯QQ、微信、MSN-Messager等等。
本设计开发的聊天室网站采用的是B/S模式,过程中整合了框架S2SH技术,前端页面使用JSP开发。系统的开发分为前端设计、功能设计以及数据库设计。
希望通过对本课题的设计与实现,能对大学四年的所学知识,网站设计的流程,JSP动态页面的设计,界面的优化与美观等方面有一个全面的认识和理解,将自己的所学与实践尽可能的相结合,以便在以后的工作中能更好的应用所学。
聊天室系统以Myeclipse8.5作为开发工具,数据库采用了MYSQL数据库设计,整合了框架S2SH(Struts2+Spring+Hibernate)。服务器使用TOMCAT6.0以上的版本,完成了聊天室系统的实时聊天这项主要功能以及显示在线人数等功能。用户有登录、注册、找回密码等功能,管理员可以管理聊天记录、管理在线人数等功能。本系统可以单人对单人聊天,也可以群聊。在设计系统的过程中,第一步先建立了系统的应用模型,第二步在模型的基础上根据需求分析逐步实现各功能。

关键词:聊天室、S2SH技术、B/S结构、JSP、实时聊天

目录:

摘  要    I
Abstract    II
1  绪 论    1
1.1 课题背景    1
1.2 开发目的和意义    2
1.3国内外现状    2
1.4论文组织结构    3
1.5本章小结    3
2  开发工具及环境    5

摘 要 随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。目前,出现了很多常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。后者通过服务器建立连接,来进行客户端客户端的信息交流。其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统 关键词:局域网 聊天 socket java 聊天系统各功能模块 (1)服务器程序模块 服务器客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为9527,然后无限循环调用accept()方法接受客户程序的连接。 服务器线程源码: package qq.server; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.*; import qq.dao.hibernate.IServiceDao; import qq.entity.*; public class ServerController { private User user; private Socket s; private IServiceDao dao; private ObjectInputStream ois; private ObjectOutputStream oos; private OnlineUser onlineUser; www.bylw120.com public ServerController(Socket s) { super(); dao=ServerMainClass.userDao; this.s = s; } public void handle() throws Exception { ois=new ObjectInputStream(s.getInputStream()); oos=new ObjectOutputStream(s.getOutputStream()); onlineUser=new OnlineUser(ois,oos); while(true){ Request req=(Request)ois.readObject(); ois.read(); RequestType type=req.getType(); if(type.equals(RequestType.exit)){ exitHandle(); break; }else if(type.equals(RequestType.login)){ loginHandle(req); }else if(type.equals(RequestType.register)){ registerHandle(); }else if(type.equals(RequestType.offline)){ offlineHandle(); break; }else if(type.equals(RequestType.changeInformation)){ changeInformationHandle(); }else if(type.equals(RequestType.modifypasswd)){ modifypasswdHandle(req); }else if(type.equals(RequestType.sendMessage)){ sendMessageHandle(req); }else if(type.equals(RequestType.receiveFile)){ receiveFileHandle(req); }else if(type.equals(RequestType.sendFile)){ sendFileHandle(req); } } } private void modifypasswdHandle(Request req) { Long id=Long.parseLong(req.getData("id")); String oldpwd=req.getData("oldpwd"); String newpwd=req.getData("newpwd"); Response res=new Response(RequestType.modifypasswd); try { dao.updatePwd(id, oldpwd, newpwd); res.setData(1); try { oos.writeObject(res); } catch (IOException e) { e.printStackTrace(); } } catch (RuntimeException e) { try { oos.writeObject(res); } catch (IOException e1) { e1.printStackTrace(); } } } private void changeInformationHandle() { try { User user=(User)ois.readObject(); Response res=new Response(RequestType.changeInformation); try { dao.updateUser(user); res.setData(1);//修改成功返回值带一个整形值 oos.writeObject(res); oos.flush(); } catch (RuntimeException e) { oos.writeObject(res);//失败则返回值不带参数 oos.flush(); e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private void exitHandle() { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } //发送文件 private void sendFileHandle(Request req) { // try { // User u=(User)ois.readObject(); // // } catch (Exception e) { // e.printStackTrace(); // } } //接受文件 private void receiveFileHandle(Request req) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值