持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第十四天,点击查看活动详情
--------20220618
今天讲两个部分吧,检测在线人数和ExitAction,因为检测在线人数那边,感觉内容太少了,显得有点水,对于控制器解耦设计,接口与实现,有以下五个Action,ExitAction,LoadDataAction,LoadUserAction,LoginAction,SendMassageAction,今天我们介绍五个里面的ExitAction
检测在线人数
首先是检测在线人数部分,这边我作为测试,登录了三个账号,那么在右边呢,就可以显示出来我们的在线用户人数有三人,并且也能展示目前聊天室内在线三人的名字
那么为什么需要弄这个功能呢,因为我们这个聊天室由于是小聊天室,这边是存在一个用户上限的设置的,并且有时需要在聊天室内明确和某个人聊天,因此,显示用户在聊天室中的名称这个功能是需要存在的
代码
<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()),执行退出业务