javaweb聊天室(spring websocket)

用javaweb写聊天室,可能大多人会困惑于怎么用广播让其他人看到消息,然而http协议是短链接进行访问模式,无法像tcp协议一样建立长链接,当然大多人想到用ajax定时访问服务器获得信息的方式,可这种方式在链接过多的时候效率比较低。

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工

(full-duplex)通信——允许服务器主动发送信息给客户端。

前端:

html页面必须引入:

<script src="http://cdn.sockjs.org/sockjs-0.3.min.js"></script>
然后在js代码中:

<script type="text/javascript">
	var websocket;
	websocket = new WebSocket("ws://127.0.0.1:8080/echo"); //需要项目名的加在8080/后面
	websocket.onopen = function (evnt) {//链接成功后的返回方法
		websocket.send("hello");//发送消息的方法
	};
	websocket.onmessage = function (evnt) {//接受消息的返回方法
		var message=evnt.data;
		alert(message);//输出接受到的消息
	};
	websocket.onerror = function (evnt) {//出错的返回方法
	};
	websocket.onclose = function (evnt) {//关闭链接的返回方法
	};
</script>
注意:链接404可能是你tomcat问题或者javaee版本问题,最好使用maven管理,并且使用maven的tomcat插件

后端用javaweb实现,采用spring+springmvc+websocket,先导入依赖,

 <!-- websocket聊天室核心实现全双工 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
spring配置文件:

	<!-- 自动注入chatrum中的bean -->
	<context:component-scan base-package="chatrum" />
springMVC配置文件:

	
	<!-- 处理静态资源被“/”所拦截的问题 -->
	<mvc:default-servlet-handler />
下面是核心代码,注册websocket,就是把每一个链接注入同一个处理对象

@Configuration
@EnableWebSocket // 开启websocket
public class WebSocketConfig implements WebSocketConfigurer {
	@Autowired
	private WebSocketHander webSocketHander;
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		registry.addHandler(webSocketHander, "/echo");
	}
}
下面是实现websockethadler:

@Service
public class WebSocketHander implements WebSocketHandler {

	private static final ArrayList<WebSocketSession> users =
			new ArrayList<WebSocketSession>();
	public void afterConnectionEstablished(WebSocketSession session)
			throws Exception {
		//链接成功进入方法
		users.add(session);//把新链接的用户加入list
	}

	public void handleMessage(WebSocketSession session,
		  WebSocketMessage<?> webSocketMessage) throws Exception {
		//接受消息方法
		for(WebSocketSession user : users) {
			if (user.isOpen()) {
				user.sendMessage(new TextMessage(
						webSocketMessage.getPayload() + "")
						//发送消息为TextMessage对象格式
				);//给在线用户发送消息
			}
		}
	}

	public void handleTransportError(WebSocketSession session,
				 Throwable exception) {
		//出错
	}

	public void afterConnectionClosed(WebSocketSession session,
			  CloseStatus closeStatus) {
		//关闭
	}

	public boolean supportsPartialMessages() {
		return false;
	}
}
这样就完成了!
其他的就是自定义的功能了

我的项目:

     

用javaweb技术实现网络聊天室,即提供多人通过文字与命令进行实时交谈、聊天的网页,并且实时显示在线用户。

演示:http://120.78.164.110:8080/Chatrum/rum/chat.html

源码:https://github.com/Vimmone/Chatrum





  • 1
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaWeb聊天是一个基于Java Web技术的在线聊天系统。根据引用中的描述,这个聊天系统具备以下功能: 1. 用户注册与登录功能:用户需要进行身份验证才能进入聊天。 2. 聊天基本功能:用户能够正常发言,发言的接收对象能够接收到信息。聊天分为输入区域和显示区域,用户可以选择悄悄话或选择对话对象。 3. 选择聊天:用户可以查看相关聊天人数情况,并选择进入特定聊天。 4. 在线人员记录:记录在线聊友情况。 5. 修改个人密码及基本资料。 6. 聊天输入区:用户可以自行发表言论,并使用个性化表情发表观点。 7. 功能权限:用户初始为普通权限,只有积分超过1000分时才能成为高级用户,高级用户有权维护聊天的正常环境秩序,例如将不遵守聊天公共秩序的用户踢出禁言。 根据引用中的代码片段,聊天界面是通过JSP页面实现的。界面中包含聊天信息输入区域和显示区域,用户可以输入聊天信息并发送。同时,界面中也显示了当前登录用户的信息。 引用提到,这个JavaWeb聊天项目适合新手练习和作为实训作业。它提供了视频、源码和笔记等资源,供学习使用。 综上所述,JavaWeb聊天是一个基于Java Web技术的在线聊天系统,具备用户注册与登录、聊天功能、选择聊天、在线人员记录、修改个人资料等功能。这个项目适合新手练习和作为实训作业。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值