一、先创建一个MyServletContextListener.java实现一个ServletContextListener的接口添加一个未实现的方法
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
//初始化
ServletContext servletContext=arg0.getServletContext();
//创建一个集合保存数据
Map<String, List<HttpSession>> ipMaps=new HashMap<String, List<HttpSession>>();
//将数据保存在application作用域中
servletContext.setAttribute("ipMaps", ipMaps );
}
}
二、新建一个类MyRequestListener实现实现一个ServletContextListener的接口添加一个未实现的方法代码如下:
public class MyRequestListener implements ServletRequestListener{
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
ServletRequest servletRequest=arg0.getServletRequest();
//获取请求对象
HttpServletRequest request=(HttpServletRequest) servletRequest;
//获取客户端的IP地址
String ip=request.getRemoteAddr();
//获取servletContent对象
ServletContext servletContext = arg0.getServletContext();
Map<String, List<HttpSession>> ipMaps=(Map<String, List<HttpSession>>) servletContext.getAttribute("ipMaps");
List<HttpSession> list = ipMaps.get(ip);
//表示当前的ip是第一次访问
if(list==null){
list=new ArrayList<HttpSession>();
}
//获取当前的seesion
HttpSession currentSeeion = request.getSession();
//循环遍历判断seesion是否同一个
for(HttpSession httpSession : list){
if(httpSession==currentSeeion){
return;
}
}
//将当前的seesion添加到集合中
list.add(currentSeeion);
ipMaps.put(ip,list);
servletContext.setAttribute("ipMaps", ipMaps);
//将当前ipseesion进行存储起来
currentSeeion.setAttribute("ip", ip);
}
}
三、新建一个类MySeesionListenter实现实现一个ServletContextListener的接口添加一个未实现的方法代码如下:
public class MySeesionListenter implements HttpSe