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

来源:互联网 发布:带网络驱动的winpe 编辑:程序博客网 时间:2024/05/17 07:16

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

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;@WebListenerpublic class HttpSession1 implements HttpSessionListener {private int number=0;@Overridepublic void sessionCreated(HttpSessionEvent arg0) {// TODO Auto-generated method stubnumber++;//通过获取会话来获取application,将number变量设置进去,没有直接获取application方法arg0.getSession().getServletContext().setAttribute("number", number);//没有获取ip地址的方法,只能到request的监听器中去调用arg0.getServletRequest }@Overridepublic void sessionDestroyed(HttpSessionEvent arg0) {// TODO Auto-generated method stubnumber--;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;@WebListenerpublic class HttpRequest1 implements ServletRequestListener {private ArrayList<User> userList;@Overridepublic void requestDestroyed(ServletRequestEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void requestInitialized(ServletRequestEvent arg0) {// TODO Auto-generated method stubuserList=(ArrayList<User>)arg0.getServletContext().getAttribute("userList");if(userList==null){userList=new ArrayList<User>();}//获取到了requestHttpServletRequest request=(HttpServletRequest)arg0.getServletRequest();//获取每一个会话的IDString 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;}}



0 0
原创粉丝点击