listener
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
//counts:IP+访问次数(一次回话记一次)
HashMap<String,Integer> counts = new HashMap<String,Integer>();
context.setAttribute("map", counts);
Integer totalcounts = 0;//各个IP总访问次数
context.setAttribute("total", totalcounts);
}
filter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String client = req.getRemoteAddr();
HttpSession s = req.getSession();
ServletContext application = req.getServletContext();
Map<String,Integer> counts = (Map<String, Integer>) application.getAttribute("map");
System.out.println("访问是否是新会话: "+s.isNew());
Integer totalcounts = (Integer) application.getAttribute("total");
if(counts.containsKey(client)){
//新会话,访问次数加一
if(s.isNew()){
Integer times = counts.get(client);
counts.put(client, times+1);
}
}else{
application.setAttribute("total", totalcounts+1);
counts.put(client, 1);
}
Set<Entry<String, Integer>> entry = counts.entrySet();
for (Entry<String, Integer> entry2 : entry) {
System.out.print(entry2.getKey()+" ");
System.out.println(entry2.getValue());
}
totalcounts = (Integer) application.getAttribute("total");
System.out.println("总访问IP数: "+totalcounts);
System.out.println("======================================");
chain.doFilter(request, response);
}