無
作者本人環境配置1.無
getHeader方法基本用法System.out.println("rotocol: " + request.getProtocol());
System.out.println("Scheme: " + request.getScheme());
System.out.println("Server Name: " + request.getServerName() );
System.out.println("Server Port: " + request.getServerPort());
System.out.println("rotocol: " + request.getProtocol());
System.out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());
System.out.println("Remote Addr: " + request.getRemoteAddr());
System.out.println("Remote Host: " + request.getRemoteHost());
System.out.println("Character Encoding: " + request.getCharacterEncoding());
System.out.println("Content Length: " + request.getContentLength());
System.out.println("Content Type: "+ request.getContentType());
System.out.println("Auth Type: " + request.getAuthType());
System.out.println("HTTP Method: " + request.getMethod());
System.out.println("ath Info: " + request.getPathInfo());
System.out.println("ath Trans: " + request.getPathTranslated());
System.out.println("Query String: " + request.getQueryString());
System.out.println("Remote User: " + request.getRemoteUser());
System.out.println("Session Id: " + request.getRequestedSessionId());
System.out.println("Request URI: " + request.getRequestURI());
System.out.println("Servlet Path: " + request.getServletPath());
System.out.println("Accept: " + request.getHeader("Accept"));
System.out.println("Host: " + request.getHeader("Host"));
System.out.println("Referer : " + request.getHeader("Referer"));
System.out.println("Accept-Language : " + request.getHeader("Accept-Language"));
System.out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));
System.out.println("User-Agent : " + request.getHeader("User-Agent"));
System.out.println("Connection : " + request.getHeader("Connection"));
System.out.println("Cookie : " + request.getHeader("Cookie"));
System.out.println("Created : " + session.getCreationTime());
擷取真實ipJSP裡,擷取用戶端的IP位址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了 Apache,Nagix等反向代理軟體就不能擷取到用戶端的真實IP位址了。如果使用了反向代理軟體,用 request.getRemoteAddr()方法擷取的IP位址是:127.0.0.1或 192.168.1.110,而并不是用戶端的真實IP。
經過代理以後,由于在用戶端和服務之間增加了中間層,是以伺服器無法直接拿到用戶端的 IP,伺服器端應用也無法直接通過轉發請求的位址傳回給用戶端。但是在轉發請求的HTTP頭資訊中,增加了X-FORWARDED-FOR資訊。用以跟蹤原有的用戶端 IP位址和原來用戶端請求的伺服器位址。
下面是擷取真實ip的一種方法,可以參考
/**
* 擷取用戶端ip
* @return
*/
protected String getIp() {
HttpServletRequest request = this.getRequest();
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
ip = request.getHeader("WL-Proxy-Client-IP");
ip = request.getRemoteAddr();
return ip.trim().equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
}
其他總結亂碼問題,如果request.getHeader("Referer")連結中帶有中文參數,那麼在經過跳轉的時候,就會出現亂碼,這個時候需要用到String keyWords = new String(str.getBytes("ISO-8859-1"),"GBK");來進行編碼轉換!可是如果不是通過request.getHeader("Referer")連結鍊過來的也用keyWords = new String(str.getBytes("ISO-8859-1"),"GBK");來進行編碼轉換的話,就會出現亂碼,解決的辦法,首先,我用str.matches( "[\\u4E00-\\u9FA5]+")來判斷這個字元串中是否有中文,如果沒有中文,則為亂碼或者數字或者英文或者其他符号,那麼我們則進行編碼轉換,如果是中文,則不進行編碼轉換