涉及知識點
> 1.HttpSession 數據對象創建和銷燬監聽器 -------HttpSessionListener接口
2.HttpServletRequest對象的創建和銷燬監聽器 ------ServletRequestListener接口
3.JSP九大內置對象及其範圍
完整代碼例子
1.項目目錄
2.MyServletRequestLstenter.java
-監聽request對象創建的requestInitialized方法裏添加代碼,把用戶信息加到list裏面;
package com;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
import entity.SessionUtil;
import entity.User;
//Servlet3.0的新特性,只需在這裏註釋無須修改Web.xml
@WebListener
public class MyServletRequestLstenter implements ServletRequestListener {
private ArrayList<User> userList;//在線用戶List
@Override
public void requestInitialized(ServletRequestEvent arg0) {
//用戶list是從上下文獲取的
userList = (ArrayList<User>)arg0.getServletContext().getAttribute("userList");
//第一次用戶訪問時
if(userList==null) {
userList=new ArrayList<User>();
}
//注意 *:HttpServletRequest繼承ServletRequestEvent,
//而ServletRequestEvent沒有獲取session的方法,所以強制轉換
HttpServletRequest request=(HttpServletRequest)arg0.getServletRequest();
String sessionIdString=request.getSession().getId();
//自定義的類裏的方法進行判斷
if(SessionUtil.getUserBySessionId(userList,sessionIdString)==null)
{
User user=new User();
user.setSessionid(sessionIdString);
user.setIpadr(request.getRemoteAddr());
//設置日期時間格式
user.setFirstTime(new SimpleDateFormat("yyyy-MM-DD HH:mm:ss").format(new Date()));
//添加進list裏
userList.add(user);
}
//把userList加到上下文對象裏面,使其任意調用
arg0.getServletContext().setAttribute("userList", userList);
}
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
// TODO Auto-generated method stub
}
}
3.sessionManager.java
監聽Session對象銷燬的sessionDestroyed方法
添加代碼,除去list裏該用戶;
package com;
//在這個類刪除在線用戶
import java.util.ArrayList;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import entity.SessionUtil;
import entity.User;
@WebListener
public class sessionManager implements HttpSessionListener {
private int userNum=0;
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
userNum++;
arg0.getSession().getServletContext().setAttribute("userNum", userNum);
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
userNum--;
arg0.getSession().getServletContext().setAttribute("userNum", userNum);
ArrayList<User> userList=null;
userList=(ArrayList<User>)arg0.getSession().getServletContext().getAttribute("userList");
//若list裏的用戶有此時的用戶返回該用戶
if(SessionUtil.getUserBySessionId(userList,arg0.getSession().getId())!=null)
{
userList.remove(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId()));
}
}
}
4.User.java
保存用戶信息:id,ip地址,第一次登錄時間;
package entity;
public class User {
private String sessionid;
private String ipadr;
private String firstTime;
public String getSessionid() {
return sessionid;
}
public void setSessionid(String sessionid) {
this.sessionid = sessionid;
}
public String getIpadr() {
return ipadr;
}
public void setIpadr(String ipadr) {
this.ipadr = ipadr;
}
public String getFirstTime() {
return firstTime;
}
public void setFirstTime(String firstTime) {
this.firstTime = firstTime;
}
}
5.SessionUtil.java
保存了判斷該用戶id是否存在list裏面,是則返回該用戶對象,否則返回null;
package entity;
import java.util.ArrayList;
public class SessionUtil {
public static Object getUserBySessionId(ArrayList<User> userList,String sessionIdString) {
for(int i=0;i<userList.size();i++)
{
User user=userList.get(i);
if(user.getSessionid().equals(sessionIdString)) {
return user;
}
}
return null;
}
}
6.index.jsp
顯示界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
在線用戶人數:${userNum }<br>
<%
ArrayList<entity.User> userList=(ArrayList<entity.User>)request.getServletContext().getAttribute("userList");
if(userList!=null){
for(int i=0;i<userList.size();i++)
{
System.out.print("aa");
entity.User user=userList.get(i);
%>
IP:<%=user.getSessionid() %>,FirstTime:<%=user.getFirstTime()%>,Adr:<%=user.getIpadr() %>
<% }
}
%>
</body>
</html>
小菜鳥記錄思路稍等完善…