【JSP入門】登錄網頁在線用戶數及其用戶信息簡單實例

涉及知識點
> 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>

小菜鳥記錄思路稍等完善…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章