亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

四、處理表單數據

2024-09-05 00:20:45
字體:
來源:轉載
供稿:網友
4.1 表單數據概述 

   如果你曾經使用過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的字符串。 

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

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

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

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

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

   ThreeParams.java 
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 />out.println(ServletUtilities.headWithTitle(title) +
"<BODY>\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<UL>\n" +
" <LI>param1: "
+ request.getParameter("param1") + "\n" +
" <LI>param2: "
+ request.getParameter("param2") + "\n" +
" <LI>param3: "
+ request.getParameter("param3") + "\n" +
"</UL>\n" +
"</BODY></HTML>");
}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}




   4.3 實例:輸出所有的表單數據 

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

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

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

   ShowParameters.java 

   注意,ShowParameters.java用到了前面介紹過的ServletUtilities.java。 
package hall;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class ShowParameters extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String />out.println(ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>參數名字<TH>參數值");
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.println("<TR><TD>" + paramName + "\n<TD>");
String[] paramValues = request.getParameterValues(paramName);
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.print("<I>No Value</I>");
else
out.print(paramValue);
} else {
out.println("<UL>");
for(int i=0; i<paramValues.length; i++) {
out.println("<LI>" + paramValues[i]);
}
out.println("</UL>");
}
}
out.println("</TABLE>\n</BODY></HTML>");
}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}




   測試表單 

   下面是向上述Servlet發送數據的表單PostForm.html。就像所有包含密碼輸入域的表單一樣,該表單用POST方法發送數據。我們可以看到,在Servlet中同時實現doGet和doPost這兩種方法為表單制作帶來了方便。 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>示例表單</TITLE>
</HEAD>

<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">用POST方法發送數據的表單</H1>

<FORM ACTION="/servlet/hall.ShowParameters"
METHOD="POST">
Item Number:
<INPUT TYPE="TEXT" NAME="itemNum"><BR>
Quantity:
<INPUT TYPE="TEXT" NAME="quantity"><BR>
Price Each:
<INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR>
<HR>
First Name:
<INPUT TYPE="TEXT" NAME="firstName"><BR>
Last Name:
<INPUT TYPE="TEXT" NAME="lastName"><BR>
Middle Initial:
<INPUT TYPE="TEXT" NAME="initial"><BR>
Shipping Address:
<TEXTAREA NAME="address" ROWS=3 COLS=40></TEXTAREA><BR>
Credit Card:<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Visa">Visa<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Master Card">Master Card<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Amex">American Express<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Discover">Discover<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Java SmartCard">Java SmartCard<BR>
Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR>
Repeat Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Submit Order">
</CENTER>
</FORM>

</BODY>
</HTML> 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品91一区| 欧美性猛交xxxx偷拍洗澡| 日韩成人在线视频网站| 国产丝袜一区二区三区| 97久久精品在线| 久久中国妇女中文字幕| 欧美激情视频一区二区三区不卡| 成人黄色片在线| 欧美理论电影在线播放| 欧美性极品少妇精品网站| 欧美日韩在线视频首页| 亚洲天堂成人在线视频| 久久久久久久久久久av| 亚洲精品久久久久久久久久久久久| 成人在线观看视频网站| xx视频.9999.com| 国产精品ⅴa在线观看h| 中文字幕亚洲欧美日韩2019| 国产一区二区视频在线观看| 亚洲影院在线看| 欧美黑人一区二区三区| 国产精品日韩精品| 亚洲福利视频网| 国产精品永久免费在线| 日韩av综合网| 国产精品久久9| 亚洲精品国产福利| 国产人妖伪娘一区91| 欧美日韩在线一区| 亚洲人成人99网站| 55夜色66夜色国产精品视频| 国产精品女主播| 久久精品中文字幕电影| 国产成人精品视频| 国产精品久久久久久婷婷天堂| 久久精品91久久久久久再现| 亚洲精品免费av| 亚洲国产私拍精品国模在线观看| 午夜精品美女自拍福到在线| 国产精品久久99久久| 国产xxx69麻豆国语对白| 91精品综合久久久久久五月天| 26uuu日韩精品一区二区| 日韩精品免费综合视频在线播放| 亚洲精品电影久久久| 亚洲人成电影网站色…| 久久成人在线视频| 91亚洲一区精品| 国产精品444| 亚洲成人aaa| 亚洲男人天堂久| 日韩大陆毛片av| 国产精品劲爆视频| 欧美日韩亚洲一区二区三区| 宅男66日本亚洲欧美视频| 亚洲综合成人婷婷小说| 亚洲国产精品久久久久| 毛片精品免费在线观看| 国产精品久久久久久久久久东京| 亚洲激情视频网站| 国产91久久婷婷一区二区| 欧美日韩免费在线| 奇米影视亚洲狠狠色| 国产日韩在线免费| 97香蕉久久超级碰碰高清版| 亚洲国产欧美一区二区三区同亚洲| 亚洲国产欧美自拍| 久久久成人av| 欧美成人免费va影院高清| …久久精品99久久香蕉国产| 久久视频这里只有精品| 日韩av在线一区| 精品国产一区二区三区久久久狼| 久久久精品国产一区二区| 18久久久久久| 久久久999成人| 成人中文字幕+乱码+中文字幕| 国产精品专区第二| 永久免费毛片在线播放不卡| 日本成人精品在线| 欧美激情视频播放| 日韩久久免费视频| 国产精品91在线观看| 亚洲系列中文字幕| 久久久精品网站| 日韩欧美亚洲成人| 日本精品视频在线观看| 精品视频一区在线视频| 97国产一区二区精品久久呦| 欧美情侣性视频| 亚洲国产精品va在线观看黑人| 精品久久久久久久中文字幕| 伦伦影院午夜日韩欧美限制| 成人免费福利视频| 国产精品久久久久秋霞鲁丝| 国产mv免费观看入口亚洲| 国产综合视频在线观看| 久久久久久久久久久国产| 国产精品揄拍一区二区| 亚洲丝袜av一区| 91久久嫩草影院一区二区| 国产一区二区精品丝袜| 在线视频一区二区| 欧美日韩精品在线观看| 国产丝袜精品第一页| 中文字幕在线观看日韩| 久久99国产精品久久久久久久久| 日韩最新在线视频| 欧美激情网友自拍| 一区二区三区www| 亚洲美女福利视频网站| 日本电影亚洲天堂| www.久久色.com| 日韩中文字幕在线| 国产亚洲精品综合一区91| 一本色道久久88亚洲综合88| 国产欧美久久久久久| 91精品国产91久久久| 欧美成人一区二区三区电影| 北条麻妃99精品青青久久| 伊人伊成久久人综合网小说| 欧美日韩免费观看中文| 国产精品爽爽爽爽爽爽在线观看| 在线播放亚洲激情| 久久伊人精品天天| 国产精品一区二区久久| 欧美高清视频在线播放| 日本精品一区二区三区在线播放视频| 精品综合久久久久久97| 狠狠色狠狠色综合日日小说| 欧美激情中文字幕乱码免费| 国产成人精彩在线视频九色| 成人激情视频在线观看| 精品色蜜蜜精品视频在线观看| 日韩欧美在线视频免费观看| 黄色成人在线免费| 成人中文字幕在线观看| 日韩电影在线观看中文字幕| 欧美成人一区二区三区电影| 高清欧美一区二区三区| 国产精品美女av| 欧美另类在线观看| 日韩乱码在线视频| 国产一区二区三区毛片| 国产精品久久久久久久av电影| 91精品国产91久久久久福利| 91免费电影网站| 中日韩美女免费视频网站在线观看| 亚洲成人免费在线视频| 国产成人自拍视频在线观看| 伊人亚洲福利一区二区三区| 国产剧情久久久久久| 日韩小视频在线| 精品综合久久久久久97| 欧美一区二区三区艳史| 欧美老女人bb| 91精品免费看| 国产成人精品午夜| 成人精品久久一区二区三区| 热久久99这里有精品| 91香蕉亚洲精品| 中文在线不卡视频| 国产精品三级久久久久久电影| 国产精品稀缺呦系列在线|