1. 程式人生 > >request獲取表單資料

request獲取表單資料

在servlet中獲取前臺傳來的資料,我們通常用的是request.getParameter("")來進行獲取值

然而還有其他的獲取方法,下面開始介紹 

        1.request.getInputStream()

        2.request.getReader()

要根據<form>表單提交資料的編碼方式選擇不同的方法。

HTML中的form表單的一個關鍵屬性 enctype:

1. enctype=application/x- www-form-urlencoded

  這種編碼方式是預設的編碼方式。

編碼後的結果通常是field1=value2&field2=value2&… 的形式,如 name=aaaa&password=bbbb。

   通常使用的表單也是採用這種方式編碼的,Servlet 的 API 提供了對這種 編碼方式解碼的支援,只需要呼叫 ServletRequest 類中的 getParameter()方法就可以得到使用者表單中的欄位和資料。

    不足:

   這種編碼方式( application/x-www-form-urlencoded )雖然簡單,但對於傳輸大塊的二進位制資料顯得力不從心。

2. 對於傳輸大塊的二進位制數這類資料,瀏覽器採用了另一種編碼方式,即 "multipart/form-data" 的編碼方式:

瀏覽器可以很容易將表單內的資料和檔案放在一起傳送。這種編碼方式先定義好一個不可能在資料中出現的字串作為 分界符,然後用它將各個資料段分開,而對於每個資料段都對應著 HTML 頁面表單

中的一個 Input 區,包括一個 content-disposition 屬性,說明了這個資料段的一些資訊,如果這個資料段的內容是一個檔案,還會有 Content-Type 屬性,然後就是資料本身,如果以這種方式提交資料就要用request.getInputStream()或request.getReader()得到 提交的資料,用 request.getParameter()是得不到提交的資料的。

3.需要注意的是:

request.getParameter()、 request.getInputStream()、request.getReader()這三種方法是有衝突的,因為流只能被讀一次。
比如:


當form表單內容採用 enctype=application/x-www-form-urlencoded編碼時,先通過呼叫request.getParameter() 方法得到引數後,再呼叫request.getInputStream()或request.getReader()已經得不到流中的內容,因為在呼叫 request.getParameter()時系統可能對錶單中提交的數據以流的形式讀了一次,反之亦然。

當form表單內容採用enctype=multipart/form-data編碼時,即使先呼叫request.getParameter()也得不到資料,所以這時呼叫request.getParameter()方法對 request.getInputStream()或request.getReader()沒有衝突,即使已經呼叫了 request.getParameter()方法也可以通過呼叫request.getInputStream()或request.getReader()得 到表單中的資料,而request.getInputStream()和request.getReader()在同一個響應中是不能混合使用的,如果混合使用就會拋異常。

  如:

  1. BufferedReader reader = request.getReader();  
  2.    while ((line = reader.readLine()) != null)  
  3.      jb.append(line);  
  4.    String jbstring=jb.toString();  
  5.    String uname=request.getParameter("uname");  
  6.    System.out.println("uname:"+uname);  
 

  (uname 列印的值為: uame:null) .

  (note :

    本人最近做一個專案竟然還用jbstring.split("&");jbstring1.split("=");的方法把裡面的name 和password 等一串值單讀出來真是笨死了。

頁面端傳遞資料方式為:

[javascript] view plain copy
  1. var params={  
  2. ajaxurlwithparam:"createmail2.do",  
  3. method:"POST",  
  4. data:{uname:uname,password:password,passwordconf:passwordconf,mobile:mobile,verifycode:verifycode,domain:domain,version:version}  
  5. };  
 

注意jquery 中的datatype 指的是預期伺服器返回的資料型別。 而不是傳送的資料型別。如:

[javascript] view plain copy
  1. //reg.js
  2. var params={            ajaxurlwithparam:"createmail2.do",  
  3.                 method:"POST",  
  4.                 data:{uname:uname,password:password,passwordconf:passwordconf,mobile:mobile,verifycode:verifycode,domain:domain,version:version}  
  5.         };  
  6.   regresult=ajaxRequest(params);  
  7. //function.js
  8. function ajaxRequest(params){  
  9.     .....  
  10.     $.ajax({  
  11.         type : method,  
  12.         url : ajaxurl,  
  13.         async : ifasync,  
  14.         data : data,  
  15.         dataType : 'json',  //
  16.         success : function(result) {  
  17.             re=result;  
  18.         }  
  19.     });  
  20.     return re;  
  21. }  
 

而從sevlet 得到的字串是(request.getReader())為:

(uname=aptech1&password=123456&passwordconf=123456&mobile=13277042784&verifycode=0489&domain=163.com&version=regvf1)

不是json 字串格式。所以 Jquery .ajax {datatype:} 只是伺服器返回來的資料型別不要以為datatype:json 就以為他也是以json 資料格式傳送。

如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊來智慧判斷,比如XML MIME型別就被識別為XML。在1.4中,JSON就會生成一個JavaScript物件,而script則會執行這個指令碼。隨後伺服器端返回的資料會根據這個值解析後,傳遞給回撥函式。可用值:

"xml": 返回 XML 文件,可用 jQuery 處理。

"html": 返回純文字 HTML 資訊;包含的script標籤會在插入dom時執行。

"script": 返回純文字 JavaScript 程式碼。不會自動快取結果。除非設定了"cache"引數。'''注意:'''在遠端請求時(不在同一個域下),所有POST請求都將轉為GET請求。(因為將使用DOM的script標籤來載入)

"json": 返回 JSON 資料 。

"jsonp": JSONP 格式。使用 JSONP 形式呼叫函式時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函式名,以執行回撥函式。

"text": 返回純文字字串

)


相關推薦

request獲取資料

在servlet中獲取前臺傳來的資料,我們通常用的是request.getParameter("")來進行獲取值然而還有其他的獲取方法,下面開始介紹         1.request.getInputStream()        2.request.getReader()

java學習路程(javaEE)之獲取資料獲取引數、request域、會話技術(Cookie)

一.獲取表單資料 //設定瀏覽器資料格式 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcept

小程式學習之旅----元件 button checkbox form input label radio slider switch textarea 獲取資料

<view class='input'> <input placeholder="請輸入內容1" confirm-type="done" type='text' focus="true" bindinput='doInput'/> </view> <

Struts2框架自學之路——Action獲取資料的方式以及資料的封裝

目錄   Action獲取表單資料的方式 通過ActionContext類獲取 使用ServletActionContext類獲取 通過特定介面訪問 在Action中操作域物件 Action中原始方式封裝表單資料 Struts2中表單資料的封裝 屬性封裝

Struts2_day02---結果頁面配置、獲取資料、封裝資料到集合

一、 結果頁面配置 (1)區域性結果頁面 1)對每個action進行單獨配置。 2)在<action>內部配置 (2)全域性結果頁面 :統一配置多個action 作用:使多個具有相同返回值的action返回到相同頁面 優點:統一配置,減少程式碼量

struts2中模型化獲取資料

             class屬性:action全路徑,對應伺服器的路徑             method屬性:action裡面預設執行的方法execute

獲取資料(二)

<%@ page contentType="text/html;charset=gb2312"%> <%! public String codeToString(String str) {//處理中文字串的函式   String s=str;

servlet獲取資料

1.sevlet獲取表單資料 在很多的情況下,我們需要在瀏覽器,Web伺服器和後臺程式之間傳遞資料。瀏覽器使用兩種方法可將這些資訊傳遞到Web伺服器,分別為Get方法和Post方法。 2.Get方法,Post方法 get方法:GET方法是預設的從瀏覽器向Web伺服器傳遞

Java Web獲取資料

1、 表單,是一種可以由使用者輸入,並提交給伺服器端的一個圖形介面,有如下性質: (1)表單中可以輸入一些內容,這些輸入功能由控制元件提供,叫做表單元素 (2)表單中一般都有一個按鈕負責提交 (3)單擊提交按鈕,表單元素中的內容會自動提交給伺服器端 (4)

Django 獲取資料

       能搜尋次問題就說明您對Django的基本配置views的基本寫法有所瞭解我就其他方面的做過都的描述了。 表單的基本資料型別 text、password、radio、checkbox、emai

微信小程式獲取資料

最簡單的方式我們呼叫bindinput方法 當鍵盤進行輸入的時候會觸發input的事件 “` bindValue (e) { //value就是表單中的資料 let value = e.detail.value; }

Servlet的5種方式實現提交(註冊小功能),後臺獲取資料

用servlet實現一個註冊的小功能 ,後臺獲取資料。 註冊頁面:    註冊頁面程式碼 : <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g

servlet之獲取資料

1.寫一個.java檔案——實體類(用於儲存表單資料) 假設是一個使用者註冊的表單,那麼就要寫一個user.java。它的屬性要和能從表單上獲得的資料進行對應。 2.寫html表單,並使用action將表單提交至對應對映地址 關於表單的介紹可

layui怎麼獲取資料

獲取form中的資料: jsp: <form class="layui-form"> <button id="btnSubmit" lay-filter="btnSubmit" lay-submit>儲存</button> </form>

jquery批量設定和獲取資料

大家在獲取表單資料和給表單賦值的時候是否也會像下面這樣寫: 要是表單很長的話真是要淚奔。。。 有人說獲取資料可以給jquery新增serializeObject方法: ** * 表單序列

Struts2獲取資料的方式

有四種方式可以獲取jsp表單提交的資料: 第一種:定義屬性值,通過Setters方法獲取 <form action="user/LoginAction.html" method="post"> 賬號: <inp

Struts2獲取資料並封裝到實體類的方法

原連結1.採用ActionContext物件的方式public String execute() throws Exception { // 獲取ActionContext物件 ActionContext context = ActionCon

Servlet 通過上傳檔案和獲取資料的最簡單方式

注意:本文所描述的方法需要Servlet 3.0 及以上版本的支援。 一、伺服器端Servlet程式碼: import javax.servlet.ServletException; imp

smartupload實現檔案上傳時獲取資料

實現檔案上傳的form表單必須滿足兩個條件:method="post" enctype="multipart/form-data" 表單中enctype="multipart/form-data"的意思是設定表單的MIME編碼。預設情況,這個編碼格式是a

Action 中獲取資料的三種方式

Action 中獲取表單提交資料的三種方式:(1)使用ActionContext類來獲取。(2)使用ServletActionContext類獲取。(3)使用介面注入的方式獲取。先來說說獲取表單資料的直