HttpServletRequest的應用
HttpServletRequest是專用於HTTP協議的ServletRequest子介面,它用於封裝HTTP請求訊息
HTTP請求訊息的請求行包括請求方式、資源路徑和HTTP協議版本:
GET /it315/servlet/RequestURI?param1=a¶m2=b HTTP/1.1
1、getMethod方法返回HTTP請求訊息中的請求方式。// GET
2、getRequestURI方法返回請求行中的資源名部分。// /it315/controller/one.jsp
3、getQueryString 方法返回請求行中的參數部分。// param1=abc
4、getProtocol方法返回請求行中的協議名和版本。// HTTP/1.1
5、getContextPath方法返回請求資源所屬於的WEB應用程式的路徑。// /it315
6、getPathInfo方法返回請求URL中的額外路徑資訊。額外路徑資訊是請求URL中的位於Servlet的路徑之後和查詢參數之前的內容,它以“/”開頭。// /one.jsp
7、getPathTranslated方法返回URL中的額外路徑資訊所對應的資源的真實路徑。
// C://tomcat-5.5.4/webapps/it315/one.jsp
8、getServletPath方法返回Servlet的名稱或Servlet所映射的路徑。// /controller
擷取網路連接資訊
1、getRemoteAddr方法返回傳出請求的客戶機的IP地址,其格式為“192.168.0.3”這種形式的字元文本。 (*)
2、getRemoteHost方法返回傳出請求的客戶機的完整主機名稱,即“pc1.it315.org”這種格式。
3、getRemotePort方法返回傳出請求的客戶機所使用的網路介面的連接埠號碼。
4、getLocalAddr方法返回WEB伺服器上接收當前請求的網路介面的IP地址。
5、getLocalName方法返回WEB伺服器上接收當前請求的網路介面的IP地址所對應的主機名稱。
6、getLocalPort方法返回WEB伺服器上接收當前請求的網路介面的連接埠號碼。
7、getServerName方法返回當前請求所指向的主機名稱。
8、getServerPort方法返回當前請求所已連線的服務器連接埠號碼。
9、getScheme方法返回請求的協議名,例如http、https或ftp。
10、getRequestURL方法返回用戶端發出請求時的完整URL。
擷取要求標頭資訊
1、getHeader方法
2、getHeaders方法
3、getHeaderNames方法
4、getIntHeader方法
5、getDateHeader方法
6、getContentType方法
7、getContentLength方法
8、getCharacterEncoding方法
擷取所有要求標頭的編程執行個體
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements())
{
String headerName = (String)headerNames.nextElement();
out.print(headerName + " : " + request.getHeader(headerName) + "<br>");
/*如果要考慮同一個要求標頭名可能出現多次,
那麼應該用下面的程式碼片段代替上面一行程式碼*/
//一個訊息頭欄位對應的多次出現的值
Enumeration values=request.getHeaders(headerName);//返回的是枚舉類型的對象
While(values.hasMoreElements()){
values.nextElement();
}
System.out.println(headerName+”: ”+request.getHeader(headerName));
利用Referer要求標頭阻止“盜鏈”
提交請求到提供下載的servlet
String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
if(referrer!=null && referrer.startsWith(sitePart))
{
//處理正當的下載請求,這裡只進行示意
out.println("dealing download ...");
}
else
{
//非法下載請求跳轉到本站的下載說明頁
RequestDispatcher rd = request.getRequestDispatcher("/down.html");
rd.forward(request,response);
}
利用Referer要求標頭隱藏JavaScript源碼
String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
if(referrer!=null && referrer.startsWith(sitePart))
{
//向用戶端輸出javascript的document.write(...)語句
out.println(
"document.write('假設這是很多重要的Javascript代碼的執行結果');");
}
擷取請求參數
1、 getParameter方法
2、 getParameterValues方法
3、 getParameterNames方法
4、 getParameterMap方法
擷取請求參數的編程執行個體
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()){
String paramName = (String)paramNames.nextElement();
out.print(paramName + " : " + request.getParameter(paramName) + "<br>");
/*如果要考慮同一個要求標頭名可能出現多次,那麼應該用下面的程式碼片段代替上面一行程式碼*/
/*String [] paramValues = request.getParameterValues(paramName);
//良好的編程習慣,在使用對象和數組之前先判斷其是否為null
if(paramValues != null){
for(int i=0;i<paramValues.length;i++){
out.print(paramName + " : " + (String)paramValues[i] + "<br>");
}
}*/
}