成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSP Servlet技術之表單數據淺析

開發 后端
JSP Servlet技術中表單數據也是非常重要的一個功能,那么在JSP Servlet中表單數據是如何呢?本文將給你簡要介紹。

JSP Servlet技術的廣泛使用使得人們對他的關注度也是越來越高,那么JSP Servlet在表單數據方面是一個什么情況呢?那么下面就來介紹一下。

如果你曾經使用過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”)。

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

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

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

◆JSP Servlet表單數據:讀取三個表單變量

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

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

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

注意用第二種方法讀取POST數據時,不能再用getParameter來讀取這些數據。

  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 = "讀取三個請求參數";  
  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 表單數據實例:輸出所有的表單數據

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

首先,程序通過HttpServletRequest的getParameterNames方法得到所有的變量名字,getParameterNames 返回的是一個Enumeration。接下來,程序用循環遍歷這個Enumeration,通過hasMoreElements確定何時結束循環,利用 nextElement得到Enumeration中的各個項。由于nextElement返回的是一個Object,程序把它轉換成字符串后再用這個字符串來調用getParameterValues。

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

ShowParameters.java

 注意,ShowParameters.java用到了前面介紹過的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 = "讀取所有請求參數";  
  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﹥參數名字﹤TH﹥參數值");  
  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 表單數據之測試表單

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

  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方法發送數據的表單﹤/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中表單數據的相關介紹,希望這樣的介紹對你有所幫助。

【編輯推薦】

  1. JSP開發中Servlet之導入事件驅動技術
  2. 什么是JSP以及和Servlet的比較
  3. Servlets和JSP最佳實踐
  4. Servlet和JSP中的多線程同步問題
  5. 無需修改代碼增強Servlet和JSP的安全性
責任編輯:仲衡 來源: 網易學院
相關推薦

2009-07-02 11:29:22

JSP技術表單數據存儲

2009-07-02 15:12:39

2009-07-06 17:11:38

Servlet文件上傳

2009-07-02 09:56:24

導入事件驅動技術JSP Servlet

2009-07-09 10:49:56

Servlet和JSP

2009-07-03 17:41:47

JavaBean Se

2009-07-02 11:34:42

JSP指令JSP開發

2009-07-03 10:46:48

JSP ServletJavaBean

2016-09-27 19:28:37

2009-07-07 09:22:27

Servlet性能測試

2009-03-02 09:45:45

2011-07-22 09:51:51

iPhone FROM 表單

2009-07-14 15:42:38

MyEclipse開發

2009-07-09 13:45:06

Servlet基本結構

2016-12-13 13:54:10

EasyUI form數據加載

2009-06-29 16:19:57

JSP Servlet

2009-06-30 11:18:16

HTML表單JSP教程

2012-06-05 10:15:43

jQuery

2009-07-02 13:29:38

JSP技術

2023-04-26 08:18:48

FormPrompt表單更改
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区av | 免费国产视频 | www.久久99| 亚洲一区视频在线 | 丁香婷婷综合激情五月色 | 成人免费淫片aa视频免费 | 日韩午夜精品 | 蜜臀91视频 | 免费视频一区 | 91精品国产一区二区在线观看 | 成人av播放| 国产精品伦一区二区三级视频 | 国产成在线观看免费视频 | av色站| 色性av | 亚洲日日夜夜 | 免费观看一级特黄欧美大片 | 精品国产乱码久久久久久88av | 免费国产一区二区 | 亚洲有码转帖 | 欧美激情a∨在线视频播放 成人免费共享视频 | 欧美日韩亚洲三区 | 521av网站| www久久久 | 国产一区二区三区四区 | 国产情侣久久 | 国产精品毛片一区二区三区 | 天天干天天操 | 91精品国产91久久久久久 | 久久国产精品偷 | 亚洲人人 | 国产欧美日韩一区二区三区在线 | 成人精品视频在线观看 | 日韩精品色网 | 日韩在线欧美 | 日本黄色片免费在线观看 | 最新中文字幕第一页视频 | 欧美xxxⅹ性欧美大片 | 亚洲精品专区 | 91在线精品秘密一区二区 | 男人的天堂avav |