日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JSPServlet技術(shù)之表單數(shù)據(jù)淺析

JSP Servlet技術(shù)的廣泛使用使得人們對(duì)他的關(guān)注度也是越來(lái)越高,那么JSP Servlet在表單數(shù)據(jù)方面是一個(gè)什么情況呢?那么下面就來(lái)介紹一下。

創(chuàng)新互聯(lián)企業(yè)建站,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于成都網(wǎng)站建設(shè)、成都做網(wǎng)站中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過(guò)對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。

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

以前,從這種形式的數(shù)據(jù)提取出所需要的表單變量是CGI編程中最麻煩的事情之一。首先,GET請(qǐng)求和POST請(qǐng)求的數(shù)據(jù)提取方法不同:對(duì)于GET請(qǐng)求,通常要通過(guò)QUERY_STRING環(huán)境變量提取數(shù)據(jù);對(duì)于POST請(qǐng)求,則一般通過(guò)標(biāo)準(zhǔn)輸入提取數(shù)據(jù)。第二,程序員必須負(fù)責(zé)在“&”符號(hào)處截?cái)嘧兞棵?變量值對(duì),再分離出變量名字(等號(hào)左邊)和變量值(等號(hào)右邊)。第三,必須對(duì)變量值進(jìn)行URL反編碼操作。因?yàn)榘l(fā)送數(shù)據(jù)的時(shí)候,字母和數(shù)字以原來(lái)的形式發(fā)送,但空格被轉(zhuǎn)換成加號(hào),其他字符被轉(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”。最后,即第四個(gè)導(dǎo)致解析表單數(shù)據(jù)非常困難的原因在于,變量值既可能被省略(如“param1=val1&param2=&param3=val3”),也有可能一個(gè)變量擁有一個(gè)以上的值,即同一個(gè)變量可能出現(xiàn)一次以上(如“param1=val1&param2=val2&param1=val3”)。

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

getParameter方法的返回值是一個(gè)字符串,它是參數(shù)中指定的變量名字第一次出現(xiàn)所對(duì)應(yīng)的值經(jīng)反編碼得到得字符串(可以直接使用)。如果指定的表單變量存在,但沒(méi)有值,getParameter返回空字符串;如果指定的表單變量不存在,則返回null。如果表單變量可能對(duì)應(yīng)多個(gè)值,可以用 getParameterValues來(lái)取代getParameter。getParameterValues能夠返回一個(gè)字符串?dāng)?shù)組。

最后,雖然在實(shí)際應(yīng)用中Servlet很可能只會(huì)用到那些已知名字的表單變量,但在調(diào)試環(huán)境中,獲得完整的表單變量名字列表往往是很有用的,利用 getParamerterNames方法可以方便地實(shí)現(xiàn)這一點(diǎn)。getParamerterNames返回的是一個(gè)Enumeration,其中的每一項(xiàng)都可以轉(zhuǎn)換為調(diào)用getParameter的字符串。

◆JSP Servlet表單數(shù)據(jù):讀取三個(gè)表單變量

下面是一個(gè)簡(jiǎn)單的例子,它讀取三個(gè)表單變量param1、param2和param3,并以HTML列表的形式列出它們的值。請(qǐng)注意,雖然在發(fā)送應(yīng)答內(nèi)容之前必須指定應(yīng)答類型(包括內(nèi)容類型、狀態(tài)以及其他HTTP頭信息),但Servlet對(duì)何時(shí)讀取請(qǐng)求內(nèi)容卻沒(méi)有什么要求。

另外,我們也可以很容易地把JSP Servlet做成既能處理GET請(qǐng)求,也能夠處理POST請(qǐng)求,這只需要在doPost方法中調(diào)用doGet方法,或者覆蓋 service方法(service方法調(diào)用doGet、doPost、doHead等方法)。在實(shí)際編程中這是一種標(biāo)準(zhǔn)的方法,因?yàn)樗恍枰苌俚念~外工作,卻能夠增加客戶端編碼的靈活性。

如果你習(xí)慣用傳統(tǒng)的CGI方法,通過(guò)標(biāo)準(zhǔn)輸入讀取POST數(shù)據(jù),那么在JSP Servlet中也有類似的方法,即在HttpServletRequest上調(diào)用 getReader或者getInputStream,但這種方法對(duì)普通的表單變量來(lái)說(shuō)太麻煩。然而,如果是要上載文件,或者POST數(shù)據(jù)是通過(guò)專門的客戶程序而不是HTML表單發(fā)送,那么就要用到這種方法。

注意用第二種方法讀取POST數(shù)據(jù)時(shí),不能再用getParameter來(lái)讀取這些數(shù)據(jù)。

 
 
 
  1. ThreeParams.java  
  2. package hall;  
  3.  
  4. import java.io.*;  
  5. import javax.servlet.*;  
  6. import javax.servlet.http.*;  
  7. import java.util.*;  
  8.  
  9. public class ThreeParams extends HttpServlet {  
  10. public void doGet(HttpServletRequest request,  
  11. HttpServletResponse response)  
  12. throws ServletException, IOException {  
  13. response.setContentType("text/html");  
  14. PrintWriter out = response.getWriter();  
  15. String title = "讀取三個(gè)請(qǐng)求參數(shù)";  
  16. out.println(ServletUtilities.headWithTitle(title) +  
  17. "﹤BODY﹥\n" +  
  18. "﹤H1 ALIGN=CENTER﹥" + title + "﹤/H1﹥\n" +  
  19. "﹤UL﹥\n" +  
  20. " ﹤LI﹥param1: "  
  21. + request.getParameter("param1") + "\n" +  
  22. " ﹤LI﹥param2: "  
  23. + request.getParameter("param2") + "\n" +  
  24. " ﹤LI﹥param3: "  
  25. + request.getParameter("param3") + "\n" +  
  26. "﹤/UL﹥\n" +  
  27. "﹤/BODY﹥﹤/HTML﹥");  
  28. }  
  29.  
  30. public void doPost(HttpServletRequest request,  
  31. HttpServletResponse response)  
  32. throws ServletException, IOException {  
  33. doGet(request, response);  
  34. }  

◆JSP Servlet 表單數(shù)據(jù)實(shí)例:輸出所有的表單數(shù)據(jù)

下面這個(gè)例子尋找表單所發(fā)送的所有變量名字,并把它們放入表格中,沒(méi)有值或者有多個(gè)值的變量都突出顯示。

首先,程序通過(guò)HttpServletRequest的getParameterNames方法得到所有的變量名字,getParameterNames 返回的是一個(gè)Enumeration。接下來(lái),程序用循環(huán)遍歷這個(gè)Enumeration,通過(guò)hasMoreElements確定何時(shí)結(jié)束循環(huán),利用 nextElement得到Enumeration中的各個(gè)項(xiàng)。由于nextElement返回的是一個(gè)Object,程序把它轉(zhuǎn)換成字符串后再用這個(gè)字符串來(lái)調(diào)用getParameterValues。

getParameterValues返回一個(gè)字符串?dāng)?shù)組,如果這個(gè)數(shù)組只有一個(gè)元素且等于空字符串,說(shuō)明這個(gè)表單變量沒(méi)有值,Servlet以斜體形式輸出“No Value”;如果數(shù)組元素個(gè)數(shù)大于1,說(shuō)明這個(gè)表單變量有多個(gè)值,JSP Servlet以HTML列表形式輸出這些值;其他情況下JSP Servlet直接把變量值放入表格。

ShowParameters.java

 注意,ShowParameters.java用到了前面介紹過(guò)的ServletUtilities.java。

 
 
 
  1. package hall;  
  2.  
  3. import java.io.*;  
  4. import javax.servlet.*;  
  5. import javax.servlet.http.*;  
  6. import java.util.*;  
  7.  
  8. public class ShowParameters extends HttpServlet {  
  9. public void doGet(HttpServletRequest request,  
  10. HttpServletResponse response)  
  11. throws ServletException, IOException {  
  12. response.setContentType("text/html");  
  13. PrintWriter out = response.getWriter();  
  14. String title = "讀取所有請(qǐng)求參數(shù)";  
  15. out.println(ServletUtilities.headWithTitle(title) +  
  16. "﹤BODY BGCOLOR=\"#FDF5E6\"﹥\n" +  
  17. "﹤H1 ALIGN=CENTER﹥" + title + "﹤/H1﹥\n" +  
  18. "﹤TABLE BORDER=1 ALIGN=CENTER﹥\n" +  
  19. "﹤TR BGCOLOR=\"#FFAD00\"﹥\n" +  
  20. "﹤TH﹥參數(shù)名字﹤TH﹥參數(shù)值");  
  21. Enumeration paramNames = request.getParameterNames();  
  22. while(paramNames.hasMoreElements()) {  
  23. String paramName = (String)paramNames.nextElement();  
  24. out.println("﹤TR﹥﹤TD﹥" + paramName + "\n﹤TD﹥");  
  25. String[] paramValues = request.getParameterValues(paramName);  
  26. if (paramValues.length == 1) {  
  27. String paramValue = paramValues[0];  
  28. if (paramValue.length() == 0)  
  29. out.print("﹤I﹥No Value﹤/I﹥");  
  30. else  
  31. out.print(paramValue);  
  32. } else {  
  33. out.println("﹤UL﹥");  
  34. for(int i=0; i﹤paramValues.length; i++) {  
  35. out.println("﹤LI﹥" + paramValues[i]);  
  36. }  
  37. out.println("﹤/UL﹥");  
  38. }  
  39. }  
  40. out.println("﹤/TABLE﹥\n﹤/BODY﹥﹤/HTML﹥");  
  41. }  
  42.  
  43. public void doPost(HttpServletRequest request,  
  44. HttpServletResponse response)  
  45. throws ServletException, IOException {  
  46. doGet(request, response);  
  47. }  

◆JSP Servlet 表單數(shù)據(jù)之測(cè)試表單

下面是向上述JSP Servlet發(fā)送數(shù)據(jù)的表單PostForm.html。就像所有包含密碼輸入域的表單一樣,該表單用POST方法發(fā)送數(shù)據(jù)。我們可以看到,在Servlet中同時(shí)實(shí)現(xiàn)doGet和doPost這兩種方法為表單制作帶來(lái)了方便。

 
 
 
  1. ﹤!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"﹥  
  2. ﹤HTML﹥  
  3. ﹤HEAD﹥  
  4. ﹤TITLE﹥示例表單﹤/TITLE﹥  
  5. ﹤/HEAD﹥  
  6. ﹤BODY BGCOLOR="#FDF5E6"﹥  
  7. ﹤H1 ALIGN="CENTER"﹥用POST方法發(fā)送數(shù)據(jù)的表單﹤/H1﹥  
  8. ﹤FORM ACTION="/servlet/hall.ShowParameters" 
  9. METHOD="POST"﹥  
  10. Item Number:  
  11. ﹤INPUT TYPE="TEXT" NAME="itemNum"﹥﹤BR﹥  
  12. Quantity:  
  13. ﹤INPUT TYPE="TEXT" NAME="quantity"﹥﹤BR﹥  
  14. Price Each:  
  15. ﹤INPUT TYPE="TEXT" NAME="price" VALUE="[GV_contentText]quot;﹥﹤BR﹥  
  16. ﹤HR﹥  
  17. First Name:  
  18. ﹤INPUT TYPE="TEXT" NAME="firstName"﹥﹤BR﹥  
  19. Last Name:  
  20. ﹤INPUT TYPE="TEXT" NAME="lastName"﹥﹤BR﹥  
  21. Middle Initial:  
  22. ﹤INPUT TYPE="TEXT" NAME="initial"﹥﹤BR﹥  
  23. Shipping Address:  
  24. ﹤TEXTAREA NAME="address" ROWS=3 COLS=40﹥﹤/TEXTAREA﹥﹤BR﹥  
  25. Credit Card:﹤BR﹥  
  26. ﹤INPUT TYPE="RADIO" NAME="cardType" 
  27. VALUE="Visa"﹥Visa﹤BR﹥  
  28. ﹤INPUT TYPE="RADIO" NAME="cardType" 
  29. VALUE="Master Card"﹥Master Card﹤BR﹥  
  30. ﹤INPUT TYPE="RADIO" NAME="cardType" 
  31. VALUE="Amex"﹥American Express﹤BR﹥  
  32. ﹤INPUT TYPE="RADIO" NAME="cardType" 
  33. VALUE="Discover"﹥Discover﹤BR﹥  
  34. ﹤INPUT TYPE="RADIO" NAME="cardType" 
  35. VALUE="Java SmartCard"﹥Java SmartCard﹤BR﹥  
  36. Credit Card Number:  
  37. ﹤INPUT TYPE="PASSWORD" NAME="cardNum"﹥﹤BR﹥  
  38. Repeat Credit Card Number:  
  39. ﹤INPUT TYPE="PASSWORD" NAME="cardNum"﹥﹤BR﹥﹤BR﹥  
  40. ﹤CENTER﹥  
  41. ﹤INPUT TYPE="SUBMIT" VALUE="Submit Order"﹥  
  42. ﹤/CENTER﹥  
  43. ﹤/FORM﹥  
  44. ﹤/BODY﹥  
  45. ﹤/HTML﹥  

上面呢就是JSP Servlet中表單數(shù)據(jù)的相關(guān)介紹,希望這樣的介紹對(duì)你有所幫助。


分享文章:JSPServlet技術(shù)之表單數(shù)據(jù)淺析
網(wǎng)址分享:http://www.dlmjj.cn/article/djspgcg.html