1. 程式人生 > >Get和Post請求和如何在Servlet中獲取請求資訊

Get和Post請求和如何在Servlet中獲取請求資訊

1.Get請求和Post請求
1).使用GET方式傳遞引數:
①.在瀏覽器位址列中輸入某個URL地址或單擊網頁上的一個超連結時,瀏覽器發出的HTTP請求訊息的請求方式GET。
②.如果網頁中的<form>表單元素的method屬性被設定為了“GET”。瀏覽器提交這個FORM表單時生成的Http請求訊息的請求方式也為GET。
③.使用GET請求方式給WEB伺服器傳遞引數的格式:http://www.zzz.com/counter.jsp?name=1&password=111
④.使用GET方式傳送的資料量一般限制在1KB以下。

http://localhost:8080/Servlet/hello.jsp?user=1&password=1    

2).使用POST方式傳遞引數:
①. POST 請求方式主要用於向WEB伺服器端程式提交form表單中的資料:form 表單的method 置為POST
②.POST 方式將各個表單欄位元素及其資料作為Http訊息的實體內容傳送給WEB伺服器,傳送的資料量要比使用GET方式傳送的資料量大得多。
POST /Example04/index.jsp HTTP/1.1  
Referer: http://localhost:8080/Example04/form.html  
Content-Type: application/x-www-form-urlencoded  
Host: localhost:8080  
Content-Length: 30  
username=zhangsan&password=123           --請求體中傳送引數

2.如何在Servlet中獲取請求資訊:
1).servlet的service()方法用於應答請求:因為每次請求都會呼叫service()方法
public void service(ServletRequest request, ServletResponse response) 
throws ServletException, IOException {}

ServletRequest:封裝了請求資訊, 可以從中獲取到任何的請求資訊。
ServletResponse:封裝了響應資訊,如果想給使用者什麼響應,具體可以使用該介面的方法實現
這兩個介面的實現類都是伺服器給予實現的,並在伺服器呼叫service方法時傳入。
2).ServletRequest:
①.獲取請求引數 
-->String getParameter(String name):  根據請求引數的名字,返回引數值。若請求的引數有多個值(如CheckBox),該方法只能獲取到第一個提交的值。
程式碼:
	String user = request.getParameter("user");
			String password = request.getParameter("password");
			System.out.println("   user:"+user+"   password:"+password);
//執行結果:
// user:111   password:111
-->String[] getParameterValues(String name)根據請求引數的名字,返回請求引數對應的字串陣列
程式碼:
String[] interestings = request.getParameterValues("interesting");
			for(String interest:interestings){
				System.out.println("--"+interest);
//--foot
//--game
//--shopping
-->Enumeration getParameterNames() 返回引數名對應的Enumeration 物件,
類似於ServletConfig(或ServletContext)的getInitParameterNames()方法
程式碼:
Enumeration<String> names=request.getParameterNames();
				while(names.hasMoreElements()){
					String name=names.nextElement();
					String value=request.getParameter(name);
					System.out.println("--"+name+":"+value);
				}
//--user:111
//--password:111
//--interesting:foot	
-->Map getParameterMap() 返回請求引數的鍵值對: key:引數名  value:引數值. String 陣列型別。
程式碼:
Map<String, String[]> map =  request.getParameterMap();
			for(Map.Entry<String,String[]> entry:map.entrySet()){
				System.out.println("**"+entry.getKey()+":"+Arrays.asList(entry.getValue()));
			}
//**user:[111]
//**password:[111]
//**interesting:[foot, game, shopping]
②.獲取請求的URI
Map<String, String[]> map =  request.getParameterMap();
			for(Map.Entry<String,String[]> entry:map.entrySet()){
				System.out.println("**"+entry.getKey()+":"+Arrays.asList(entry.getValue()));
			}
//**user:[111]
//**password:[111]
//**interesting:[foot, game, shopping]
③.獲取請求方式:
	String requestMethod=httpServletRequest.getMethod();
			System.out.println(requestMethod);  //   GET
④.獲取GET的查詢字串:
			String  query= httpServletRequest.getQueryString();
			System.out.println(query);  	
//   user=111&password=111&interesting=foot&interesting=game&interesting=shopping
⑤.和attribute相關的幾個方法
3).HttpServletRequest:是ServletRequest的子介面。
 針對於HTTP請求所定義。裡邊包含了大量獲取HTTP 請求相關的方法。

4).ServletResponse:封裝了響應資訊,如果想給使用者什麼響應,具體可以使用該介面的方法實現
①.!!getWriter():返回PrintWriter物件,呼叫該物件的print()方法, 將把print()中的引數直接列印到客戶的瀏覽器上
PrintWriter out= response.getWriter();
out.println("helloworld...");
②.設定響應的內容型別:response.setContentType("application/msword");

③.void sendRedirect(String location):請求的重定向。(此方法為HttpServletResponse 中定義)。