request對象,是瀏覽器訪問服務器的一次請求對象,封裝了http協議請求頭和請求正文數據
是一次請求,數據於多次請求是不共享的,但是請求的對象是同一個
System.out.println(request);
if(request.getAttribute("name")==null){
request.setAttribute("name", "jack");
System.out.println("no");
}else{
System.out.println(request.getAttribute("name"));
}
結果:
org.apache.catalina.connector.RequestFacade@574a7ff6
no
org.apache.catalina.connector.RequestFacade@574a7ff6
no
org.apache.catalina.connector.RequestFacade@574a7ff6
no
發現請求對象雖是同一個,但是數據是不共享的,可以看做每次請求都是獨立的request對象
note:在轉發時。request對象是共享的,數據能共享
request中的函數:
定義
public interface ServletRequest
定義一個Servlet引擎產生的對象,通過這個對象,Servlet可以獲得客戶端請求的數據。這個對象通過讀取請求體的數據提供包括參數的名稱、值和屬性以及輸入流的所有數據。
方法
1、getAttribute
public Object getAttribute(String name);
返回請求中指定屬性的值,如果這個屬性不存在,就返回一個空值。這個方法允許訪問一些不提供給這個接口中其他方法的請求信息以及其他Servlet放置在這個請求對象內的數據。
2、getAttributeNames
public Enumeration getAttributeNames();
返回包含在這個請求中的所有屬性名的列表。
3、getCharacterEncoding
public String getCharacterEncoding();
返回請求中輸入內容的字符編碼類型,如果沒有定義字符編碼類型就返回空值。
4、getContentLength
public int getContentLength();
請求內容的長度,如果長度未知就返回-1。
5、getContentType
public String getContentType();
返回請求數據體的MIME類型,如果類型未知返回空值。get方式返回null,post方式返回application/.......請求協議頭
6、getInputStream
public ServletInputStream getInputStream() throws IOException;
返回一個輸入流用來從請求體讀取二進制數據。如果在此之前已經通過getReader方法獲得了要讀取的結果,這個方法會拋出一個IllegalStateException。
7、getParameter
public String getParameter(String name);
以一個String返回指定的參數的值,如果這個參數不存在返回空值。例如,在一個HTTP Servlet中,這個方法會返回一個指定的查詢語句產生的參數的值或一個被提交的表單中的參數值。如果一個參數名對應着幾個參數值,這個方法只能返回通過getParameterValues方法返回的數組中的第一個值。因此,如果這個參數有(或者可能有)多個值,你只能使用getParameterValues方法。
8、getParameterNames
public Enumeration getParameterNames();
返回所有參數名的String對象列表,如果沒有輸入參數,該方法返回一個空值。
9、getParameterValues
public String[] getParameterValues(String name);
通過一個String對象的數組返回指定參數的值,如果這個參數不存在,該方法返回一個空值。
10、getProtocol
public String getProtocol();
返回這個請求所用的協議,其形式是協議/主版本號.次版本號。例如對於一個HTTP1.0的請求,該方法返回HTTP/1.0。
11、getReader
public BufferedReader getReader() throws IOException;
這個方法返回一個buffered reader用來讀取請求體的實體,其編碼方式依照請求數據的編碼方式。如果這個請求的輸入流已經被getInputStream調用獲得,這個方法會拋出一個IllegalStateException。
12、getRemoteAddr
public String getRemoteAddr();
返回發送請求者的IP地址。
13、getRemoteHost
public String getRemoteHost();
返回發送請求者的主機名稱。如果引擎不能或者選擇不解析主機名(爲了改善性能),這個方法會直接返回IP地址。
14、getScheme
public String getScheme();
返回請求所使用的URL的模式。例如,對於一個HTTP請求,這個模式就是http。
15、getServerName
public String getServerName();
返回接收請求的服務器的主機名。
16、getServerPort
public int getServerPort();
返回接收請求的端口號。
17、setAttribute
public void setAttribute(String name, Object object);
這個方法在請求中添加一個屬性,這個屬性可以被其他可以訪問這個請求對象的對象(例如一個嵌套的Servlet)使用。
18丶getLocale();
獲取客戶端的國際化信息---瀏覽器Internet選項中設置的語言環境
Locale loc = request.getLocale();
注:以下方法將被取消
getRealPath
public String getRealPath(String path);
返回與虛擬路徑相對應的真實路徑,如果因爲某種原因,這一過程不能進行,該方法將返回一個空值。
這個方法和ServletContext接口中的getRealPath方法重複。在2.1版中,ServletContext接口將闡明一個 Servlet所能用的所有的路徑的映射。該方法執行的結果將會與ServletContext中getRealPath方法的結果完全一樣
演示參數接受的多種方式:
<span style="color:#000000;"><form action="RequestServlet" method="post">
Name:<input type="text" name="name"/><br/>
Age:<input type="text" name="age"/><br/>
愛好:
<input type="checkbox" name="hoby" value="MUSIC"/>音樂
<input type="checkbox" name="hoby" value="MTV"/>電視
<input type="checkbox" name="hoby" value="driver"/>開車<br/>
性別:
<input type="radio" name="sex" value="0" checked="checked"/>男
<input type="radio" name="sex" value="1"/>女
<input type="submit" value="提交"/>
</form></span>
後臺接受:
<span style="color:#000000;">public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//明確知道單一值的參數名:(文本/密碼框/單選按鈕/選擇下拉框)
String name=request.getParameter("name");
String age=request.getParameter("age");
String radio=request.getParameter("sex");
System.out.print(name+","+age+","+radio+",");
//明確知道多值的參數名:(複選框)
String[] hoby=request.getParameterValues("hoby");
for(String value:hoby){
System.out.print(value+",");
}
System.out.println("-------------------");
//不明確單一值參數名和參數值Enumeration<String>遍歷
Enumeration<String> en=request.getParameterNames();
while(en.hasMoreElements()){
String paramName=en.nextElement();
System.out.print(paramName+":");
//單一值
//String paramValue=request.getParameter(paramName);
//多值
//String paramValue=request.getParameterValues(paramName);
//混合
String[] paramValue=request.getParameterValues(paramName);
for(String value:paramValue){
System.out.print(value+",");
}
System.out.println();
}
System.out.println("------------------");
//不明確參數名和參數值Map<String, String[]>,利用Iterator(迭代器)遍歷
Map<String, String[]> map=request.getParameterMap();
Iterator<Entry<String, String[]>> it=map.entrySet().iterator();
while(it.hasNext()){
Entry<String, String[]> e=it.next();
String paramName=e.getKey();
System.out.print(paramName+":");
String[] paramValue=e.getValue();
for(String value:paramValue){
System.out.print(value+",");
}
System.out.println();
}
}</span>
結果:
李四,12,1,MUSIC,driver,-------------------
sex:1,
age:12,
name:李四,
hoby:MUSIC,driver,
------------------
sex:1,
name:李四,
age:12,
hoby:MUSIC,driver,