新聞中心
1.表單數(shù)據(jù)概述

創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為曹妃甸企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站建設(shè),曹妃甸網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
如果你曾經(jīng)使用過Web搜索引擎,或者瀏覽過在線書店、股票價格、機(jī)票信息,或許會留意到一些古怪的URL,比如“http://host /path?user=Marty+Hall&origin=bwi&dest=lax”。這個URL中位于問號后面的部分,即 “user=Marty+Hall&origin=bwi&dest=lax”,就是表單數(shù)據(jù),這是將Web頁面數(shù)據(jù)發(fā)送給服務(wù)器程序的最常用方法。對于GET請求,表單數(shù)據(jù)附加到URL的問號后面(如上例所示);對于POST請求,表單數(shù)據(jù)用一個單獨(dú)的行發(fā)送給服務(wù)器。
以前,從這種形式的數(shù)據(jù)提取出所需要的表單變量是CGI編程中最麻煩的事情之一。首先,GET請求和POST請求的數(shù)據(jù)提取方法不同:對于GET請求,通常要通過QUERY_STRING環(huán)境變量提取數(shù)據(jù);對于POST請求,則一般通過標(biāo)準(zhǔn)輸入提取數(shù)據(jù)。第二,程序員必須負(fù)責(zé)在“&”符號處截斷變量名字-變量值對,再分離出變量名字(等號左邊)和變量值(等號右邊)。第三,必須對變量值進(jìn)行URL反編碼操作。因?yàn)榘l(fā)送數(shù)據(jù)的時候,字母和數(shù)字以原來的形式發(fā)送,但空格被轉(zhuǎn)換成加號,其他字符被轉(zhuǎn)換成“%XX”形式,其中XX是十六進(jìn)制表示的字符ASCII(或者ISO Latin-1)編碼值。例如,如果HTML表單中名為“users”的域值為“~hall, ~gates, and ~mcnealy”,則實(shí)際向服務(wù)器發(fā)送的數(shù)據(jù)為“users=%7Ehall%2C+%7Egates%2C+and+%7Emcnealy”。最后,即第四個導(dǎo)致解析表單數(shù)據(jù)非常困難的原因在于,變量值既可能被省略(如“param1=val1?m2=?m3=val3”),也有可能一個變量擁有一個以上的值,即同一個變量可能出現(xiàn)一次以上(如“param1=val1?m2=val2?m1=val3”)。
Java Servlet的好處之一就在于所有上述解析操作都能夠自動完成。只需要簡單地調(diào)用一下Http Servlet Request的getParameter方法、在調(diào)用參數(shù)中提供表單變量的名字(大小寫敏感)即可,而且GET請求和POST請求的處理方法完全相同。
getParameter方法的返回值是一個字符串,它是參數(shù)中指定的變量名字第一次出現(xiàn)所對應(yīng)的值經(jīng)反編碼得到得字符串(可以直接使用)。如果指定的表單變量存在,但沒有值,getParameter返回空字符串;如果指定的表單變量不存在,則返回null。如果表單變量可能對應(yīng)多個值,可以用 getParametervalues來取代getParameter。getParametervalues能夠返回一個字符串?dāng)?shù)組。
最后,雖然在實(shí)際應(yīng)用中Servlet很可能只會用到那些已知名字的表單變量,但在調(diào)試環(huán)境中,獲得完整的表單變量名字列表往往是很有用的,利用getParamerterNames方法可以方便地實(shí)現(xiàn)這一點(diǎn)。getParamerterNames返回的是一個Enumeration,其中的每一項都可以轉(zhuǎn)換為在Http Servlet Request調(diào)用getParameter的字符串。
2.實(shí)例:讀取三個表單變量
下面是一個簡單的例子,它讀取三個表單變量param1、param2和param3,并以HTML列表的形式列出它們的值。請注意,雖然在發(fā)送應(yīng)答內(nèi)容之前必須指定應(yīng)答類型(包括內(nèi)容類型、狀態(tài)以及其他HTTP頭信息),但Servlet對何時讀取請求內(nèi)容卻沒有什么要求。
另外,我們也可以很容易地把Servlet做成既能處理GET請求,也能夠處理POST請求,這只需要在doPost方法中調(diào)用doGet方法,或者覆蓋service方法(service方法調(diào)用 doGet、doPost、doHead等方法)。在實(shí)際編程中這是一種標(biāo)準(zhǔn)的方法,因?yàn)樗恍枰苌俚念~外工作,卻能夠增加客戶端編碼的靈活性。
如果你習(xí)慣用傳統(tǒng)的CGI方法,通過標(biāo)準(zhǔn)輸入讀取POST數(shù)據(jù),那么在Servlet中也有類似的方法,即在Http Servlet Request上調(diào)用getReader或者getInputStream,但這種方法對普通的表單變量來說太麻煩。然而,如果是要上載文件,或者POST數(shù)據(jù)是通過專門的客戶程序而不是HTML表單發(fā)送,那么就要用到這種方法。
- package hall;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.util.*;
- public class ThreeParams extends HttpServlet {
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- String title = "讀取三個請求參數(shù)";
- out.println(ServletUtilities.headWithTitle(title)
- }
- public void doPost(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
網(wǎng)站標(biāo)題:調(diào)用HttpServletRequest的方法
文章轉(zhuǎn)載:http://www.5511xx.com/article/dpeggje.html


咨詢
建站咨詢
