当然第一个类应该是用户的实体类
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;
}
}