监听器实现网站计数并获取用户信息

当然第一个类应该是用户的实体类

public class User {

	private String sessionIdString;
	private String ipString;
	private String firstTimeString;
	
	public String getSessionIdString() {
		return sessionIdString;
	}
	public void setSessionIdString(String sessionIdString) {
		this.sessionIdString = sessionIdString;
	}
	public String getIpString() {
		return ipString;
	}
	public void setIpString(String ipString) {
		this.ipString = ipString;
	}
	public String getFirstTimeString() {
		return firstTimeString;
	}
	public void setFirstTimeString(String firstTimeString) {
		this.firstTimeString = firstTimeString;
	}
}


JSP中的代码如下

当前访问人数:<%=request.getServletContext().getAttribute("number") %><br/>
详细信息如下所示:<br/>
<%! int i=0; %>
<%
i=0;
ArrayList<User> userList=(ArrayList<User>)request.getServletContext().getAttribute("userList");
if(userList!=null){
	for(User user: userList){
%>
第<%= (++i) %>Session的信息:<%= user.getSessionIdString() %><br/>
时间:<%= user.getFirstTimeString() %><br/>
IP: <%= user.getIpString() %><br/>

<%	
	}
}

%>

监听器通过监听会话的个数,就可以判断登入的人数,但是不能够获取到IP的信息,只能通过request监听获取,因此要实现两个监听类(注意监听加上注解就可以了,不用到web.xml中去添加)

session监听类

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class HttpSession1 implements HttpSessionListener {

	private int number=0;
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		number++;
		//通过获取会话来获取application,将number变量设置进去,没有直接获取application方法
		arg0.getSession().getServletContext().setAttribute("number", number);
		//没有获取ip地址的方法,只能到request的监听器中去调用arg0.getServletRequest 
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		number--;
		arg0.getSession().getServletContext().setAttribute("number", number);
	}

}

request监听类

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 com.entity.User;
@WebListener
public class HttpRequest1 implements ServletRequestListener {

	private ArrayList<User> userList;
	
	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void requestInitialized(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		
		userList=(ArrayList<User>)arg0.getServletContext().getAttribute("userList");
		if(userList==null){
			userList=new ArrayList<User>();
		}

		//获取到了request
		HttpServletRequest request=(HttpServletRequest)arg0.getServletRequest();
		
		
		//获取每一个会话的ID
		String sessionIdString=request.getSession().getId();
		
		if(getUserBySessionId(sessionIdString)){
			User user=new User();
			user.setSessionIdString(sessionIdString);
			user.setFirstTimeString(new SimpleDateFormat("yyyy-MM-dd:mm:ss").format(new Date()));
			user.setIpString(request.getRemoteAddr());
			
			userList.add(user);
			
			arg0.getServletContext().setAttribute("userList", userList);
		}

	}
	 
	private boolean getUserBySessionId(String s){
		
		for(User user: userList){
			if(s.equals(user.getSessionIdString())){
				return false;
			}
		}
		return true;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值