客戶(hù)單通過(guò)創(chuàng)建html的form表單來(lái)與servlet交互的
<FORM ACTION="....">.....</FORM>,其中action對(duì)應(yīng)的就是處理表單數(shù)據(jù)的servlet的url。
<INPUT TYPE="TEXT" NAME="....">,servlet通過(guò)request.getParameter(NAME)來(lái)讀取表單中的數(shù)據(jù)。其中TYPE是html輸入的類(lèi)型。
<INPUT TYPE="SUBMIT"> 按下這個(gè)按鈕,瀏覽器會(huì)調(diào)用表單的ACTION指定的URL。
在servlet中讀取表單數(shù)據(jù)的函數(shù)。
單值讀取,request.getParameter("NAME")注意參數(shù)名是大小寫(xiě)敏感的。
多值讀取,request.getParameterValues("NAME")返回的是字符串?dāng)?shù)組。對(duì)于不存在的參數(shù)名,返回值為null,如果只有單一的值,則返回只有一個(gè)元素的數(shù)組。
參數(shù)名查找,一般情況下servlet并不知道參數(shù)名,
Enumeration e = request.getParameterNames();
while(e.hasmoreElements()){
String s = (String)e.nextElement();
String[] paraValues = request.getParameterValues(s);
}
getParameterMap是getParameterNames()的代替方案,這個(gè)方法返回的是一個(gè)Map:
(參數(shù)名,getParameterNames())。
getReader用了讀取定制的客戶(hù)的數(shù)據(jù)。
getInputStream讀取<INPUT TYPE="FILE" .....>
多字符集輸入的讀取
默認(rèn)情況下,request.getParameter使用的是服務(wù)器當(dāng)前的字符集解釋輸入的,如果要改變默認(rèn)行為,就要使用request.setCharacterEncoding來(lái)設(shè)置字符集。
但是要是輸入中使用了多個(gè)字符集,這種做法就行不通了。
可以用getBytes來(lái)提取原始的字節(jié)數(shù)據(jù),然后用String的構(gòu)造函數(shù)進(jìn)行編碼。
String s = request.getParameter("firstname");
String s = new String(s.getBytes(), “GBK”);