文章轉自 https://yq.aliyun.com/articles/650312?accounttraceid=94d95fb493324bb2b44bbb9b538f15b0ycge
HttpServlet 類需要兩個參數HttpRequest和HttpResponse。比如doGet方法
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
}
那我在這先介紹HttpRequest。
HttpRequest對象的目的是代替浏覽器把Http請求發送給web應用,是以,任何浏覽器能發送的,HttpRequest都可以接受到。
HttpRequest對象有很多方法,這裡隻介紹重要的,剩餘的有興趣的話你可以自己看JavaDoc。
參數
請求參數是從浏覽器連同請求一起發送的參數。 請求參數通常作為URL的一部分(在“查詢字元串”中)或作為HTTP請求主體的一部分發送。 例如:
www.baidu.com?param1=hello¶m2=world
在這個URL中,有兩個參數
param1=hello
param2=world
你可以用HttpRequest通路這些參數,例如:
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
String param1 = request.getParameter("param1");
String param2 = request.getParameter("param2");
通常,如果浏覽器發送HTTP GET請求,則參數将包含在URL中的查詢字元串中。 如果浏覽器發送HTTP POST請求,則參數将包含在HTTP請求的正文部分(form)中。
請求頭
請求頭是浏覽器伴随HttpRequest發送的的一個'鍵值對',請求标題包含關于例如 使用什麼浏覽器軟體,浏覽器能夠接收哪些檔案類型等等。
我們可以使用HttpRequest對象來接受請求頭:
String contentLength = request.getHeader("Content-Length");
Content-Length頭包含在HTTP請求正文中發送的位元組數,以防浏覽器發送HTTP POST請求。 如果浏覽器發送HTTP GET請求,則不使用Content-Length标頭,并且上述代碼将傳回null。
輸入流
如果浏覽器發送HTTP POST請求,請求參數和其他潛在資料将發送到HTTP請求正文中的伺服器。 它不一定是在HTTP請求主體中發送的請求參數。 它可能幾乎是任何資料,如檔案或SOAP請求(Web服務請求)。
為了可以通路HTTP POST請求的主題内容,我們可以用inputStream。這是一個例子:
InputStream requestBodyInput = request.getInputStream();
注意:在調用任何getParameter()方法之前,您必須調用此方法,因為在HTTP POST請求上調用getParameter()方法将導緻servlet引擎 解析 HTTP請求主體 以 擷取參數。 一旦分析完畢,就無法再以原始位元組流的形式通路主體。
Session
也可以從HttpRequest對象擷取Session對象。
Session對象可以在請求之間儲存關于給定使用者的資訊。 是以,如果您在一個請求期間将對象設定為會話對象,則它可供您在同一會話時間範圍内的任何後續請求和期間讀取。
這裡是如何擷取Session對象:
HttpSession session = request.getSession();
ServletContext
也可以從HttpRequest對象中擷取ServletContext對象。ServletContext包含一些web應用資訊。例如,能擷取到web.xml檔案裡的一些參數,也能将request請求轉發給别的Servlet,也能在ServletContext裡存儲一些應用參數。
這是擷取ServletContext的例子:
ServletContext context = request.getSession().getServletContext();
可以看到,我們要先擷取Session對象,再擷取ServletContext。