j2ee建立在线聊天室详细教程(第四天在线人数,退出业务)

188 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第十四天,点击查看活动详情

--------20220618
今天讲两个部分吧,检测在线人数和ExitAction,因为检测在线人数那边,感觉内容太少了,显得有点水,对于控制器解耦设计,接口与实现,有以下五个Action,ExitAction,LoadDataAction,LoadUserAction,LoginAction,SendMassageAction,今天我们介绍五个里面的ExitAction


检测在线人数

首先是检测在线人数部分,这边我作为测试,登录了三个账号,那么在右边呢,就可以显示出来我们的在线用户人数有三人,并且也能展示目前聊天室内在线三人的名字
那么为什么需要弄这个功能呢,因为我们这个聊天室由于是小聊天室,这边是存在一个用户上限的设置的,并且有时需要在聊天室内明确和某个人聊天,因此,显示用户在聊天室中的名称这个功能是需要存在的

image.png

代码

<script type="text/javascript">
	window.onload= function(){	
		window.setInterval(function(){
			loadUsers();
		},1000);
	}

	function loadUsers(){
			ajax({
				data: "",
				url: "loadUser.do",		
				Success: function(msg){
					eval("res="+msg);
					var num=parseInt(res.num);
					var head="<font color='#D2691E'>当前用户 ("+num+")</font><br>";
					var users=res.userMass;
					document.body.innerHTML=head+users;
				}
			});
	}
</script>

那么这边对于代码进行一个解释,首先我们可以看到这边存在一个window.onload= function(),我在昨天的文章当中有进行一个介绍j2ee建立在线聊天室详细教程(第三天加载消息,自动跳转) - 掘金 (juejin.cn),这边的用法相同,也是作为入口函数,window.setInterval(function(){loadUsers();},1000),这条语句定义了时间,每秒重载一次,这边没什么难点。
现在我们把重点放在获取在线人数的代码上,其中url: "loadUser.do"这条语句进行加载用户控制器。
定义num,num=parseInt(res.num),定义当前用户总数,当前用户的列表展示前端语句为var head="当前用户 ("+num+")
"。其中代码段里另一个较为重要的地方为:document.body.innerHTML=head+users,这条语句的作用在页面中渲染数据,为这一段代码中,最为重要的部分


ExitAction

直接上代码

代码部分

package action.impl;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import action.Action;
import bean.ChatMassage;

public class ExitAction implements Action {

	public Object execute(HttpServletRequest req, HttpServletResponse res) {
		HttpSession session = req.getSession();
		ChatMassage cm = ChatMassage.Instance();
		Object name = session.getAttribute("username");
		
		if(name!=null){	
			cm.setMassage("<font color='#708090'>"+name.toString()+" 退出了聊天室!</font><br>");
			cm.exit(name.toString());	
		}
		return null;
	}

}

这段代码的作用是控制退出业务控制,其中if(name!=null)语句是在判定,如果未退出,那么就会通知大家,之后进行cm.exit(name.toString()),执行退出业务