request對象封裝着一次用戶請求,而且全部的請求參數都被封裝在request對象中,客戶端發送請求參數一般分爲兩種方式:
GET方式的請求:直接在瀏覽器地址欄輸入訪問地址所發送的請求或提交表單發送請求時,該表單對應的form元素沒有設置method屬性,或設置method屬性爲get,這幾種請求都是GET方式的請求。GET方式請求會將請求參數的名和值轉換成字符串,並附加在原URL後,所以能夠在地址欄中看到請求參數名和值。且GET請求傳送的數據量較小,通常不能大於2KB。
POST方式的請求:這種方式一般使用提交表單的方式來發送,且須要設置form元素的method屬性爲post。POST方式傳送的數據量較大,一般認爲POST請求參數的大小不受限制,但每每取決於服務器的限制,POST請求傳輸的數據量總從GET傳輸的數據量大。並且POST方式發送的請求參數以及對應的值 放在HTML HEADER中傳輸,用戶不能在地址欄中看到請求參數,安全性較高。
以頁面request_form.jsp爲例,參數傳輸方式爲get,post方式只須要將method屬性值改成post便可:html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用get或post方式傳遞參數</title> </head> <body> <form id="request_form" method="get" action="request_get.jsp"> <!-- <form id="request_form" method="post" action="request_post.jsp">--> 姓名: <input type="text" name="name" ></input><br /> 性別: <br /> <input type="radio" name="gender" value="男" >男<br /> <input type="radio" name="gender" value="女" >女<br /> 年齡: <input type="text" name="age" ></input><br /> 喜歡的顏色: <br /> <input type="checkbox" name="color" value="紅" >紅 <input type="checkbox" name="color" value="綠" >綠 <input type="checkbox" name="color" value="藍" >藍<br /> 來自的國家: <br /> <select name="country"> <option value="中國">中國</option> <option value="美國">美國</option> <option value="德國">德國</option> </select><br /> 學歷: <br /> <input type="radio" name="diploma" value="本科" >本科<br /> <input type="radio" name="diploma" value="碩士" >碩士<br /> <input type="radio" name="diploma" value="博士" >博士<br /> 興趣愛好: <br /> <input type="checkbox" name="" value="籃球" >籃球<br /> <input type="checkbox" name="" value="足球" >足球<br /> <input type="checkbox" name="" value="羽毛球" >羽毛球<br /> <input type="submit" value="提交" ></input> <input type="reset" value="重置" ></input> </form> </body> </html>
點擊"提交"按鈕後,將會轉到request_get.jsp頁面處理,參數以get方式傳輸,request_get.jsp頁面內容以下:java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用get方式獲取request參</title> </head> <body> <% Enumeration<String> headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); out.println(headerName + " --> " + request.getHeader(headerName) + "<br />"); } out.println("<br />"); request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String gender = request.getParameter("gender"); String diploma = request.getParameter("diploma"); String age = request.getParameter("age"); String[] colors = request.getParameterValues("color"); String country = request.getParameter("country"); String[] hobbies = request.getParameterValues("hobby"); String baseInfo = "名字: " + name + "<br />" + "性別:" + gender + "<br />" + "年齡:" + age + "<br />" + "學歷:" + diploma + "<br />" + "國籍:" + country + "<br />"; request.setAttribute("baseinfo", baseInfo); %> 您的名字: <%=name %><br /> 您的性別: <%=gender %><br /> 您的年齡: <%=age %><br /> 您的學歷: <%=diploma %><br /> 您來自的國家: <%=country %><br /> 您喜歡的顏色: <% if(colors != null && colors.length > 0) { for(String color : colors) { out.println(color + " "); } } else { out.println("沒有喜歡的顏色"); } %><br /> 您的愛好: <% if(hobbies != null && hobbies.length > 0) { for(String hobby : hobbies) { out.println(hobby + " "); } } else { out.println("沒有愛好"); } %><br /> </body> </html>
在瀏覽器中運行request_form.jsp,結果以下:
點擊「提交」按鈕後,跳轉到request_get.jsp頁面,結果以下:
注意:並非每一個表單域都會生成請求參數,而是有name屬性的表彰域才生成請求參數;表單域和請求參數的關係遵循以下4點:
1 每一個有name屬性的表單域對應一個請求參數。
2 若是有多個表單域有相同的name屬性,則多個表單域只生成一個請求參數,只是該參數有多個值。
3 表單域的name屬性指定請求參數名,value指定請求參數值。
4 若是某個表單域設置了disabled="disabled"屬性,則該表單域再也不生成請求參數。
例如request_form.jsp頁面中,"興趣愛好"下面的三個表單域沒有設置name屬性,即便在表單頁面爲"興趣愛好"勾選了值,在request_get.jsp頁面中也獲取不到,因此在request_get.jsp頁面顯示"沒有愛好"。
若是在某一個頁面forward用戶請求,即便用<jsp:forward>指令,或使用request.getRequestDispatcher("forwardpath").forward(request, response)方法來轉發請求時,在源頁面中的請求參數和請求屬性,在轉發頁面中都不會丟失。瀏覽器