先创建一个文件来储存在线用户和对在线用户做具体操作
import java.util.Vector;
public class UserInfoList {
private static UserInfoList user=new UserInfoList();
private Vector vector=null; //Vector可实现自动增长的数组
public UserInfoList(){
this.vector=new Vector();
}
public static UserInfoList getInstance(){
return user;
}
public boolean addUserInfo(String user){ //增加用户
if(user!=null){
this.vector.add(user);
return true;
}else{
return false;
}
}
public Vector getlist(){
return vector;
}
public void removeUserInfo(String user){
if(user!=null){
vector.removeElement(user);
}
}
}
创建监听文件,实现valueBound(HttpSessionBindingEvent arg0)和valueUnbound(HttpSessionBindingEvent arg0)方法
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
/**
* Application Lifecycle Listener implementation class UserInfoTrace
*
*/
@WebListener
public class UserInfoTrace implements HttpSessionBindingListener {
private String user;
private UserInfoList container=UserInfoList.getInstance();
/**
* Default constructor.
*/
public UserInfoTrace() {
user="";
// TODO Auto-generated constructor stub
}
public void setUser(String user){ //设置在线监听人员
this.user=user;
}
public String getUser(){ //获取在线监听
return this.user;
}
@Override
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("上线"+this.user);
// TODO Auto-generated method stub
}
@Override
public void valueUnbound(HttpSessionBindingEvent arg0) { //当有对象从session时自动执行
System.out.println("下线"+this.user);
if(user!=""){
container.removeUserInfo(user);
}
// TODO Auto-generated method stub
}
}
写一个登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<script type="text/javascript">
function checkEmpty(form){
for(i=0;i<form.length;i++){
if(form.elements[i].value==""){
alert("表单信息不能为空");
return false;
}
}
}
</script>
<body>
<div align="center">
<table width="506" hight="170" border="0" cellpadding="0" cellspacing="0" >
<tr>
<td align="center">
<form action="user.jsp" method="post" onSubmit="return checkEmpty(form)">
<input type="text" name="user"><br><br>
<input type="submit" value="登录">
</form>
</td>
</tr>
</table>
</div>
</body>
</html>
显示页面
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.util.*"%>
<%@ page import="com.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用监听查看在线用户</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<%
UserInfoList list=UserInfoList.getInstance();
UserInfoTrace ut=new UserInfoTrace();
String name=request.getParameter("user");
ut.setUser(name);
session.setAttribute("list",ut);
list.addUserInfo(ut.getUser());
session.setMaxInactiveInterval(10);
%>
<body>
<div align="center">
<table width="506" height="246" border="0" cellpadding="0" cellspacing="0" >
<tr>
<td align="center"><br>
<textarea rows="8" cols="20">
<%
Vector vector=list.getlist();
if(vector!=null&&vector.size()>0){
for(int i=0;i<vector.size();i++){
out.println(vector.elementAt(i));
}
}
%>
</textarea><br><br>
<a href="login.jsp">返回</a>
</td>
</tr>
</table>
</div>
</body>
</html>
点击返回回到登录页面和把对象从session移除
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%
session.invalidate();
out.println("<script>parent.location.href='index.jsp';</script>");
%>
</head>
<body>
</body>
</html>
点击登陆
好像没写编码过滤器,应该写一个要不然中文会乱码!