国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

js_p Servlet如何處理表單數據

2019-11-02 14:20:50
字體:
來源:轉載
供稿:網友

      一:表單數據概述

如果你曾經使用過Web搜索引擎,或者瀏覽過在線書店、股票價格、機票信息,或許會留意到一些古怪的URL,比如“http://host/path?user=Marty+Hall&origin=bwi&dest=lax”。這個URL中位于問號后面的部分,即“user=Marty+Hall&origin=bwi&dest=lax”,就是表單數據,這是將Web頁面數據發送給服務器程序的最常用方法。對于GET請求,表單數據附加到URL的問號后面(如上例所示);對于POST請求,表單數據用一個單獨的行發送給服務器。

以前,從這種形式的數據提取出所需要的表單變量是CGI編程中最麻煩的事情之一。首先,GET請求和POST請求的數據提取方法不同:對于GET請求,通常要通過QUERY_STRING環境變量提取數據;對于POST請求,則一般通過標準輸入提取數據。第二,程序員必須負責在“&”符號處截斷變量名字-變量值對,再分離出變量名字(等號左邊)和變量值(等號右邊)。第三,必須對變量值進行URL反編碼操作。因為發送數據的時候,字母和數字以原來的形式發送,但空格被轉換成加號,其他字符被轉換成“%XX”形式,其中XX是十六進制表示的字符ASCII(或者ISO Latin-1)編碼值。例如,如果HTML表單中名為“users”的域值為“~hall, ~gates, and ~mcnealy”,則實際向服務器發送的數據為“users=%7Ehall%2C+%7Egates%2C+and+%7Emcnealy”。最后,即第四個導致解析表單數據非常困難的原因在于,變量值既可能被省略(如“param1=val1&param2=&param3=val3”),也有可能一個變量擁有一個以上的值,即同一個變量可能出現一次以上(如“param1=val1&param2=val2&param1=val3”)。

Java Servlet的好處之一就在于所有上述解析操作都能夠自動完成。只需要簡單地調用一下HttpServletRequest的getParameter方法、在調用參數中提供表單變量的名字(大小寫敏感)即可,而且GET請求和POST請求的處理方法完全相同。

getParameter方法的返回值是一個字符串,它是參數中指定的變量名字第一次出現所對應的值經反編碼得到得字符串(可以直接使用)。如果指定的表單變量存在,但沒有值,getParameter返回空字符串;如果指定的表單變量不存在,則返回null。如果表單變量可能對應多個值,可以用getParameterValues來取代getParameter。getParameterValues能夠返回一個字符串數組。

最后,雖然在實際應用中Servlet很可能只會用到那些已知名字的表單變量,但在調試環境中,獲得完整的表單變量名字列表往往是很有用的,利用getParamerterNames方法可以方便地實現這一點。getParamerterNames返回的是一個Enumeration,其中的每一項都可以轉換為調用getParameter的字符串。

 二: 實例:讀取三個表單變量

下面是一個簡單的例子,它讀取三個表單變量param1、param2和param3,并以HTML列表的形式列出它們的值。請注意,雖然在發送應答內容之前必須指定應答類型(包括內容類型、狀態以及其他HTTP頭信息),但Servlet對何時讀取請求內容卻沒有什么要求。

另外,我們也可以很容易地把Servlet做成既能處理GET請求,也能夠處理POST請求,這只需要在doPost方法中調用doGet方法,或者覆蓋service方法(service方法調用doGet、doPost、doHead等方法)。在實際編程中這是一種標準的方法,因為它只需要很少的額外工作,卻能夠增加客戶端編碼的靈活性。

如果你習慣用傳統的CGI方法,通過標準輸入讀取POST數據,那么在Servlet中也有類似的方法,即在HttpServletRequest上調用getReader或者getInputStream,但這種方法對普通的表單變量來說太麻煩。然而,如果是要上載文件,或者POST數據是通過專門的客戶程序而不是HTML表單發送,那么就要用到這種方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凌源市| 防城港市| 五大连池市| 霞浦县| 琼海市| 乌审旗| 四会市| 水富县| 泾川县| 祥云县| 象州县| 金川县| 宾阳县| 铅山县| 三明市| 大丰市| 上林县| 内丘县| 福州市| 米林县| 云林县| 武夷山市| 怀化市| 望都县| 葫芦岛市| 花莲市| 吴江市| 大连市| 新宾| 阿图什市| 科技| 九江县| 礼泉县| 社旗县| 上饶市| 神农架林区| 凤翔县| 冷水江市| 怀集县| 绥化市| 华蓥市|