Java web--Filter過濾器分IP統計訪問次數

來源:互聯網
上載者:User

標籤:util   使用者訪問   esc   list   border   keyword   4.0   code   exce   

  分IP統計訪問次數即網站統計每個IP地址訪問本網站的次數。

  分析

  因為一個網站可能有多個頁面,無論哪個頁面被訪問,都要統計訪問次數,所以使用過濾器最為方便。

  因為需要分IP統計,所以可以在過濾器中建立一個Map,使用IP為key,訪問次數為value。當有使用者訪問時,擷取請求的IP,如果IP在Map中存在,說明以前訪問過,那麼在訪問次數上加1,即可;IP在Map中不存在,那麼設定次數為1。

  那麼問題來了!

  問題一:為什麼使用Map存放?

  Map是一個由索引值對組成的資料結構,其中所有的key組成一個set集合,所有的value組成一個List集合。且在集合中每個鍵是唯一的,保持了尋找結果的一致性。

  問題二:把Map放在什麼域中?

  因為Map中記錄的是訪問相關資料,因此要在伺服器開啟時就要建立Map,記錄資料。要把這個Map存放到ServletContext中!

  1. 儲存資料使用:Map,其中ip為鍵,訪問次數為值。

IP           次數
192.168.51.2       66
192.168.51.4       88

2. 把Map放到ServletContext中

3. 使用過濾器來完成統計!
  * 擷取ServletContext中的map
   > Map map = (Map)sc.getAttribute("map");
   > if(map == null) { map = new HashMap(); sc.setAttribute("map", map);}
  * 擷取當前請求的IP地址:request.getRemoteAddr()
  * 使用IP為鍵,查看map中是否存在這個鍵
  * 如果IP在Map中存在,說明不是第一次訪問,那麼擷取訪問次數,再加1,然後儲存回到map中
  * 如果IP在Map中不存在,說明是第一次訪問,向map添加索引值,鍵為IP,值為1。
4. 建立index.jsp,這個頁面會擷取ServletContext中的map,然後迴圈顯示。

代碼:

IpFilter.java

import java.io.IOException;import java.util.LinkedHashMap;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** *分IP統計訪問次數 */public class IpFilter implements Filter {    private FilterConfig config;       public void init(FilterConfig config) throws ServletException {        this.config=config;    }    /*     * 1. 擷取Map     * 2. 擷取請求IP     * 3. 查看IP在Map中是否存在     *   4. 如果存在,把訪問次數+1,再儲存回去     *   5. 如果不存在,添加索引值,鍵為IP,值為1     * 6. 允許存取!     */    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        //擷取ServletConfig        ServletContext sc = config.getServletContext();        //擷取ServletContext中的map        Map<String,Integer> map=(Map<String, Integer>) sc.getAttribute("map");        //如果map不存在,說明這是第一次被訪問        if(map==null){            //建立map            map=new LinkedHashMap<String,Integer>();        }        //擷取請求ip        String ip = request.getRemoteAddr();        //判斷map中是否存在這個ip        if(map.containsKey(ip)){            //如果ip存在,說明這個IP已經訪問過本站            // 擷取訪問次數            Integer count = map.get(ip);            //把訪問次數+1            count++;            //把新的訪問次數儲存回去            map.put(ip, count);        }else{            //因為這個IP是第一次訪問,所以值為1            map.put(ip, 1);        }        //把map放入ServletContext中    sc.setAttribute("map", map);    //允許存取    chain.doFilter(request, response);    }    public void destroy() {            }}

 

 

 

index.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP ‘index.jsp‘ starting page</title>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->  </head>   <body>    <h1>分IP統計</h1>  <table border="1" width="60%">    <c:forEach items="${applicationScope.map }" var="entry">        <tr>            <th>ip</th>            <th>數量</th>        </tr>        <tr>            <td>${entry.key }</td>            <td>${entry.value }</td>                    </tr>    </c:forEach>    </table>  </body></html>    

 

 

 


 

 

 

Java web--Filter過濾器分IP統計訪問次數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.