網站流量統計,java+jsp 獲取訪客瀏覽器,真實ip,作業系統,來源
阿新 • • 發佈:2019-02-09
採用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;
}
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;
}