一、实现一个登陆,当登陆成功,显示欢迎和当前在线人数
- 获取session
- 获取登录信息
- 把用户信息加入session中
- 获取当前的在线人数
- 使当前的在线人数加一
二、实现登出,当前登陆人数减一,并使session失效
- 获取在线人数,数量减一
- session失效:强转为sessionMap类型,调用invalidate方法
三、实现代码
structs.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置structs2 可以受理的请求的扩展名 使用constant来设置 -->
<constant name="structs.action.extension" value="action,do,"></constant>
<package name="loginUI" namespace="/" extends="struts-default">
<action name="login-ui">
<result>/Login.jsp</result>
</action>
<action name="userlogin" class="com.weixuan.structs2.UserLogin">
<result name="login-success">/login-success.jsp</result>
</action>
<action name="logout" class="com.weixuan.structs2.UserLogin" method="logout">
<result name="logout-success">/Login.jsp</result>
</action>
</package>
</struts>
login.jsp<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'Login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="userlogin.action" method="post">
username:<input type="text" name="username" /> password:<input
type="password" name="password" />
<input type="submit" value="submit">
</form>
</body>
</html>
login-success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login-success.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
Wlecome : ${sessionScope.username }
<br>
<br>
<br>
Count on line : ${applicationScope.count }
<br>
<br>
<br>
<a href="logout.action">Logout</a>
</body>
</html>
核心类
package com.weixuan.structs2;
import java.util.Map;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.SessionAware;
public class UserLogin implements SessionAware,ApplicationAware{
private Map<String,Object> session;
private Map<String,Object> application;
private String username;
public String execute(){
//1、获取session
//2、获取登录信息
//3、把用户信息加入session中
session.put("username", username);
//在线人数加一
//1、获取当前的在线人数
//2、使当前的在线人数加一
//3、
Integer count = (Integer)application.get("count");
if(count==null)
count=0;
count++;
application.put("count", count);
return "login-success";
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
public String logout(){
//数量减一,获取在线人数
Integer count = (Integer)application.get("count");
if(count !=null && count>0){
count--;
application.put("count", count);
}
//session失效,强转为sessionMap类型,调用invalidate方法
SessionMap sm = (SessionMap) session;
sm.invalidate();
return "logout-success";
}
}