標籤:http io os ar 使用 java for sp 資料
HttpServletRequest對象代表用戶端的請求,當用戶端通過HTTP協議訪問伺服器時,HTTP要求標頭中的所有資訊都封裝在這個對象中,開發人員通過這個對象的方法,可以獲得客戶這些資訊。
request常用方法
獲得客戶機資訊
getRequestURL方法返回用戶端發出請求時的完整URL。
getRequestURI方法返回請求行中的資源名部分。
getQueryString 方法返回請求行中的參數部分。
getRemoteAddr方法返回傳出請求的客戶機的IP地址
getRemoteHost方法返回傳出請求的客戶機的完整主機名稱
getRemotePort方法返回客戶機所使用的網路連接埠號碼
getLocalAddr方法返回WEB伺服器的IP地址。
getLocalName方法返回WEB伺服器的主機名稱
getMethod得到客戶機請求方式
package com.hbsi.request;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Request1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
System.out.println(request.getQueryString());
System.out.println(request.getMethod());
System.out.println(request.getRemoteAddr());
System.out.println(request.getRemoteHost());
System.out.println(request.getRemotePort());
System.out.println(request.getLocalAddr());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
獲得客戶機要求標頭
getHead(name)方法
getHeaders(String name)方法
getHeaderNames方法
獲得客戶機請求參數(用戶端提交的資料)
getParameter(name):擷取指定名稱的參數值。這是最為常用的方法之一。
getParameterValues(String name):擷取指定名稱參數的所有值數組。它適用於一個參數名對應多個值的情況。如頁面表單中的複選框,多選列表提交的值。
getParameterNames():返回一個包含請求訊息中的所有參數名的Enumeration對象。通過遍曆這個Enumeration對象,就可以擷取請求訊息中所有的參數名。
getParameterMap():返回一個儲存了請求訊息中的所有參數名和值的Map對象。Map對象的key是字串類型的參數名,value是這個參數所對應的Object類型的值數組。
package com.hbsi.request;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Request2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//String value = request.getHeader("Accept");
//System.out.println(value);
Enumeration e = request.getHeaderNames();
while(e.hasMoreElements()){
String name = (String) e.nextElement();
String value = request.getHeader(name);
System.out.println(name+":"+value);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
request常見應用
各種表單輸入項資料的擷取
text、password、radio、checkbox、
file、select、textarea、 hidden、
image、button給js編程用
下面是request代碼
package com.hbsi.request;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Reqeust3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getParameter("name"));
}
private void test1form(HttpServletRequest request) {
String name = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String city = request.getParameter("city");
String [] likes = request.getParameterValues("likes");
String likeString="";
for(int i=0;likes!=null && i<likes.length;i++){
String like = likes[i];
likeString +=like;
}
String memo = request.getParameter("memo");
System.out.println(name+","+password+","+sex+","+city+","+likeString+","+memo);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
請求參數的中文亂碼問題
URL地址的編碼
package com.hbsi.request;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Request4 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String value = request.getParameter("name");
System.out.println(new String(value.getBytes("iso8859-1"),"UTF-8"));
}
private void test2(HttpServletRequest request)
throws UnsupportedEncodingException {
//get方式
String name = request.getParameter("username");
name = new String(name.getBytes("iso8859-1"),"UTF-8");
System.out.println(name);
}
private void test1(HttpServletRequest request)
throws UnsupportedEncodingException {
request.setCharacterEncoding("UTF-8");//只對post方式起作用
System.out.println(request.getParameter("username"));
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
防盜鏈
package com.hbsi.request;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Request5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String referer = request.getHeader("referer");
if(referer==null || !referer.startsWith("http://localhost")){
response.sendRedirect("/servletdemo/index.jsp");
return;
}
response.setContentType("text/html;charset=utf-8");
String data = "秘密!!!!";
response.getWriter().write(data);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
request對象實現請求轉寄:請求轉寄指一個web資源收到用戶端請求後,通知伺服器去調用另外一個web資源進行處理。
請求轉寄
Servlet API中定義了一個RequestDispatcher介面,俗稱請求指派器。它定義了如下兩個方法:
public void forward(ServletRequest request, ServletResponse response)
public void include(ServletRequest request, ServletResponse response)
擷取RequestDispatcher執行個體的方式主要有兩種:
調用ServletContext介面提供的getRequestDispatcher(String url)方法。
調用ServletRequest介面提供的getRequestDispatcher(String url)方法。
RequestDispatcher
include方法:
RequestDispatcher.include方法用於將RequestDispatcher對象封裝的資源內容作為當前響應內容的一部分包含進來,從而實現可程式化的伺服器端包含功能。
被包含的Servlet程式不能改變響應訊息的狀態代碼和回應標頭,如果它裡面存在這樣的語句,這些語句的執行結果將被忽略。
package com.hbsi.request;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Request6 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/header.html").include(request, response);
response.getOutputStream().write("aaaaaaaaaaaa".getBytes());
request.getRequestDispatcher("/footer.html").include(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
HttpServletRequest、request常用方法、request常見應用、請求轉寄、RequestDispatcher