概述
① 登录时候的action方法(这里是execute)
1.把用户信息放到session
2.在application放入人数信息
3.用户登录,人数加1
4.在页面中显示用户信息和人数信息
② 退出登录时候的action方法(这里是logout)
1. 使session失效
2. 人数减一
测试代码
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>2017</title>
<!-- 导入jQuery文件 -->
<script src="js/jquery-1.10.1.js" type="text/javascript" charset="utf-8"></script>
<!-- script书写位置 -->
<script type="text/javascript">
</script>
</head>
<body>
// 这里是get,处理中文请求时注意
<form action="login" method="get">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>密 码:</td>
<td>
<input type="password" name="password" />
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" value="提交" />
</td>
</tr>
</table>
</form>
</body>
</html>
User.java
package top.itcourse.user;
import java.util.Map;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.SessionAware;
/*
* 在线人数统计:
* ① 登录时候的action方法(这里是execute)
* 1.把用户信息放到session
* 2.在application放入人数信息
* 4.用户登录,人数加1
* 5.在页面中显示用户信息和人数信息
*
* ② 退出登录时候的action方法(这里是logout)
* 1. 使session失效
* 2. 人数减一
*/
public class User implements SessionAware,ApplicationAware{
private String username;
private String password;
// session的Map
private Map<String, Object> sessionMap;
// application的Map
private Map<String, Object> applicationMap;
// 字段的get和set方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// 空参构造器
public User() {
}
// ① 登录时候的action方法(这里是execute)
public String execute() {
// 1.获取session,把用户信息存入session
sessionMap.put("username", username);
System.out.println("username: " + username);
// 2.在线人数 + 1(放在ServletContext中)
// 获取当前
Integer count = (Integer) applicationMap.get("count");
if( count == null ) {
count = 0;
}
// 人数 + 1
applicationMap.put("count", ++count);
System.out.println("在线人数加一……");
return "success";
}
// ② 退出登录时候的action方法(这里是logout)
public String logout() {
// 1.使当前session失效(sessionMap可以强转为SessionMap对象,进而销毁)
((SessionMap)sessionMap).invalidate();
// 2.application中用户数减 1
Integer count = (Integer) applicationMap.get("count");
if (count != null && count > 0) {
applicationMap.put("count", --count);
System.out.println("在线人数减一……");
}
return "success-logout";
}
@Override
public void setSession(Map<String, Object> sessionMap) {
this.sessionMap = sessionMap;
}
@Override
public void setApplication(Map<String, Object> applicationMap) {
this.applicationMap = applicationMap;
}
}
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>2017</title>
<!-- 导入jQuery文件 -->
<script src="js/jquery-1.10.1.js" type="text/javascript" charset="utf-8"></script>
<!-- script书写位置 -->
<script type="text/javascript">
</script>
</head>
<body>
欢迎 ${sessionScope.username } <br />
当前在线总人数:${applicationScope.count } <br />
<a href="logout">退出登录</a>
</body>
</html>
效果
其它
关注下方公众号,回复:在线人数统计练习.code
该文件是:Struts2_Course_009_SessionCountUserUTF8
欢迎加入交流群:451826376
更多信息:www.itcourse.top