实时更新用户在线人数(通过将用户人数数据放入application的域属性里实现)
- 用户登录后,显示用户名和当前在线人数+1
- 用户注销后,当前在线人数-1
- 代码
1.前台请求页面
<a href="testServletAware.action">test servetAware</a>
<br><br>
<a href="user-loginUI.do">user loginUI</a>
2.struts.xml
<!-- 使用struts2自带的默认Action类处理 -->
<action name="user-loginUI">
<result>/login.jsp</result>
</action>
<action name="login" class="cn.zc.cris.user.login.UserLogin" method="login">
<result name="login-success">/login-success.jsp</result>
</action>
<action name="logout" class="cn.zc.cris.user.login.UserLogin" method="logout">
<result name="logout-success">/index.jsp</result>
</action>
3.后台处理action
public class UserLogin implements SessionAware,ApplicationAware{
//需要注入的属性,都是通过set方法进行注入,由struts2框架自动注入,我们需要定义属性手工接收
private Map<String, Object> application;
private Map<String, Object> session;
private String name;
//用户登录成功
public String login() {
//1.将登录用户名字放入session中,需要在页面进行显示
this.session.put("name", this.name);
//2.需要对application中的用户数量属性+1
Integer count = (Integer) this.application.get("count");
if(count == null || count <0) {
count = 0;
}
count++;
application.put("count", count);
return "login-success";
}
//用户登出
public String logout() {
//1. 将application中的count数量-1
Integer count = (Integer) this.application.get("count");
if(count > 0) {
count--;
this.application.put("count", count);
}
//2. 将当前session失效
((SessionMap<String, Object>) session).invalidate();
return "logout-success";
}
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
public void setName(String name) {
this.name = name;
}
}
4.用户登录成功并显示当前在线人数页面
Welcome:${sessionScope.name }!
<br><br>
Count on Line:${applicationScope.count }
<br><br>
<a href="logout.do">logout</a>