1. 程式人生 > >網站流量統計,java+jsp 獲取訪客瀏覽器,真實ip,作業系統,來源

網站流量統計,java+jsp 獲取訪客瀏覽器,真實ip,作業系統,來源

採用servlet的filter獲取request物件,以獲取訪客資訊

public class StatFilter
    implements Filter {
    public StatFilter() {
    }

    public void init(FilterConfig filtercfg) throws javax.servlet.
        ServletException {
    }

    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain filterchain) throws java.io.IOException,
        javax.servlet.ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
       
        HttpSession session = httpRequest.getSession(true);
       
        if (session.getAttribute("isRecorded") == null) {
            //如果本次使用者訪問還沒有記錄,就記錄本次使用者資訊,並儲存到資料庫中
            session.setAttribute("isRecorded", Boolean.TRUE);
            //在session物件中儲存一個變數"isRecorded",並賦值
            String ip = getIp(httpRequest);//使用者ip
            String browser = getBrowser(httpRequest);//使用者使用的瀏覽器
            String os = getSysInfo(httpRequest);//使用者使用系統
            String source = httpRequest.getHeader("Referer");//訪問來源
            String url = httpRequest.getRequestURI();//使用者當前訪問路徑
    
            if (browser == null) {
                browser = "未知";
                //如果讀取的瀏覽器名為空,則賦值為“未知”
            }
            if (os == null) {
                os = "未知";
                //如果讀取的作業系統名為空,則賦值為“未知”
            }
            try {
                System.out.println("ip:"+ip);
                System.out.println("os:"+os.trim());
                System.out.println("browser:"+browser.trim());
                System.out.println("source:"+source);
                System.out.println("url:"+url);
            //    StatHandle.insert(ip, os.trim(), browser.trim());
                //呼叫業務邏輯,將使用者資料插入到資料庫中
            }
            catch (Exception es) {
                es.printStackTrace();
                //在輸入日誌中列印異常資訊
            }
        }
        filterchain.doFilter(request, response);
        //呼叫下一個過濾器或者直接呼叫JSP
    }

//  Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
//  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
    public void destroy() {
    }
    
    public String getIp(HttpServletRequest httpRequest){
         String ipAddress = httpRequest.getHeader("x-forwarded-for");  
         if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
                         ipAddress = httpRequest.getHeader("Proxy-Client-IP");  
                    }  
                    if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
                         ipAddress = httpRequest.getHeader("WL-Proxy-Client-IP");  
                   }  
                    if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
                         ipAddress = httpRequest.getRemoteAddr();  
                         if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){  
                           //根據網絡卡取本機配置的IP  
                             InetAddress inet=null;  
                             try {  
                                 inet = InetAddress.getLocalHost();  
                             } catch (UnknownHostException e) {  
                            e.printStackTrace();  
                           }  
                            ipAddress= inet.getHostAddress();  
                         }  
                     }  
                    //對於通過多個代理的情況,第一個IP為客戶端真實IP,多個IP按照','分割  
                   if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15  
                         if(ipAddress.indexOf(",")>0){  
                             ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));  
                         }  
                     }  

                   return ipAddress;
    }
    public String getBrowser(HttpServletRequest httpRequest){
          String agent = httpRequest.getHeader("User-Agent");
          String browserVersion = "";
          //從請求頭中讀取User-Agent值
          if(agent.indexOf("MSIE")>0){
              browserVersion = "IE";
          }else if(agent.indexOf("Firefox")>0){
              browserVersion = "Firefox";
          }else if(agent.indexOf("Chrome")>0){
              browserVersion = "Chrome";
          }else if(agent.indexOf("Safari")>0){
              browserVersion = "Safari";
          }else if(agent.indexOf("Camino")>0){
              browserVersion = "Camino";
          }else if(agent.indexOf("Konqueror")>0){
              browserVersion = "Konqueror";
          }else if(agent.indexOf("QQBrowser")>0){
              browserVersion = "QQBrowser";
          }
          if("".equals(browserVersion)){
              StringTokenizer st = new StringTokenizer(agent, "(;)");
              while(st.hasMoreElements()){  
                  browserVersion=st.nextToken();
                  }  
          }
    
        return browserVersion;
    }
    public String getSysInfo(HttpServletRequest httpRequest){
        String systenInfo="";
        String agent = httpRequest.getHeader("User-Agent");
        if (agent.indexOf("NT 10.0") > 0){
            systenInfo = "Windows Vista/Server 10";
        }else if (agent.indexOf("NT 8.0") > 0){
            systenInfo = "Windows Vista/Server 8";
        }else if (agent.indexOf("NT 6.0") > 0){
            systenInfo = "Windows Vista/Server 2008";
        } else if (agent.indexOf("NT 5.2") > 0){
            systenInfo = "Windows Server 2003";
        } else if (agent.indexOf("NT 5.1") > 0){
            systenInfo = "Windows XP";
        } else if (agent.indexOf("NT 6.0") > 0){
            systenInfo = "Windows Vista";
        } else if (agent.indexOf("NT 6.1") > 0){
            systenInfo = "Windows 7";
        } else if (agent.indexOf("NT 6.2") > 0){
            systenInfo = "Windows Slate";
        } else if (agent.indexOf("NT 6.3") > 0){
            systenInfo = "Windows 8";
        } else if (agent.indexOf("NT 5") > 0){
            systenInfo = "Windows 2000";
        } else if (agent.indexOf("NT 4") > 0){
            systenInfo = "Windows NT4";
        } else if (agent.indexOf("Me") > 0){
            systenInfo = "Windows Me";
        } else if (agent.indexOf("98") > 0){
            systenInfo = "Windows 98";
        } else if (agent.indexOf("95") > 0){
            systenInfo = "Windows 95";
        } else if (agent.indexOf("Mac") > 0){
            systenInfo = "Mac";
        } else if (agent.indexOf("Unix") > 0){
            systenInfo = "UNIX";
        } else if (agent.indexOf("Linux") > 0){
            systenInfo = "Linux";
        } else if (agent.indexOf("SunOS") > 0){
            systenInfo = "SunOS";
        }
        if("".equals(systenInfo)){
             StringTokenizer st = new StringTokenizer(agent, "(;)");
             int i=0;
             while(st.hasMoreElements()&&i<=1){
                 i++;
                 systenInfo=st.nextToken();
                 }  
        }
        return systenInfo;
    }