JSP表單處理
當需要通過從瀏覽器獲取一些信息,在許多情況下,最終給到Web服務器後台程序。瀏覽器使用兩種方法將這些信息傳遞給Web服務器。這些方法是GET方法和POST方法。
GET 方法:
GET方法將追加到頁麵請求編碼的用戶信息。網頁和編碼信息被分離的?字符如下:
http://www.test.com/hello?key1=value1&key2=value2
GET方法是默認的方法,從瀏覽器的信息傳遞到Web服務器和它產生出現在瀏覽器的地址很長的字符串:box。切勿使用GET方法,如果你有密碼或其他敏感信息傳遞給服務器。
GET方法有大小限製:隻有1024個字符可以在一個請求字符串。
此信息是使用QUERY_STRING頭通過,將通過它可以使用getQueryString()處理request對象的getParameter()方法的QUERY_STRING環境變量訪問。
POST 方法:
將信息傳遞給後端程序的一般比較可靠的方法是POST方法。
這種方法在完全相同的方式為GET方法包的信息,但不是後發送它作為一個文本字符串?在URL中發送它作為一個單獨的消息。此消息來自於標準輸入,你可以分析和使用您的處理形式在後端程序。
JSP中處理這種類型使用getParameter()方法來讀取簡單的參數和的getInputStream()方法來讀取來自客戶端的二進製數據流的請求。
使用JSP讀取表單數據
JSP中處理表單數據使用視情況下列方法自動分析:
-
getParameter(): 調用request.getParameter()方法來獲取表單參數的值。
-
getParameterValues(): 調用此方法,如果該參數出現多於一次,並返回多個值,例如複選框。
-
getParameterNames(): 如果你想在當前請求的所有參數的完整列表,調用此方法。
-
getInputStream(): 調用此方法來讀取來自客戶端的二進製數據流。
GET方法使用URL示例:
下麵是這將使用GET方法傳遞兩個值的HelloForm程序一個簡單的URL。
http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI下麵是main.jsp 的JSP程序來處理輸入的Web瀏覽器中給出。我們將usegetParameter()方法,這使得它很容易獲得傳遞的信息:
<html> <head> <title>Using GET Method to Read Form Data</title> </head> <body> <center> <h1>Using GET Method to Read Form Data</h1> <ul> <li><p><b>First Name:</b> <%= request.getParameter("first_name")%> </p></li> <li><p><b>Last Name:</b> <%= request.getParameter("last_name")%> </p></li> </ul> </body> </html>
Now type http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI in your browser's Location:box. 這將產生以下結果:
Using GET Method to Read Form Data
|
GET方法示例使用表單:
下麵是一個簡單的例子,使用HTML表格和提交按鈕傳遞兩個值。我們將使用同一個JSP main.jsp中來處理此輸入。
<html> <body> <form action="main.jsp" method="GET"> First Name: <input type="text" name="first_name"> <br /> Last Name: <input type="text" name="last_name" /> <input type="submit" value="Submit" /> </form> </body> </html>
請將本HTML文件中的Hello.html並把它放在<Tomcat-installation-directory>/的webapps/ ROOT目錄。當您將訪問http://localhost:8080/Hello.html,這裡是上述形式的實際輸出。
嘗試輸入First Name和Last Name,然後單擊提交按鈕,看看那裡的tomcat運行在本地機器上的結果。根據所提供的輸入作為輸入的在上麵的例子中,會產生類似的結果。
POST方法示例使用表單:
讓我們做小的修改在上麵的JSP來處理GET和POST方法。下麵是main.jsp的JSP程序來處理輸入使用GET或POST方法通過Web瀏覽器中給出。
事實上,有在上麵的JSP冇有變化,因為傳遞參數唯一的辦法就是改變,冇有二進製數據被傳遞給JSP程序。文件處理相關的概念將在單獨的一章,我們需要讀取二進製數據流來解釋。
<html> <head> <title>Using GET and POST Method to Read Form Data</title> </head> <body> <center> <h1>Using GET Method to Read Form Data</h1> <ul> <li><p><b>First Name:</b> <%= request.getParameter("first_name")%> </p></li> <li><p><b>Last Name:</b> <%= request.getParameter("last_name")%> </p></li> </ul> </body> </html>
以下是Hello.html時文件的內容:
<html> <body> <form action="main.jsp" method="POST"> First Name: <input type="text" name="first_name"> <br /> Last Name: <input type="text" name="last_name" /> <input type="submit" value="Submit" /> </form> </body> </html>
現在讓我們保存main.jsp和Hello.html 在<Tomcat-installation-directory>/的webapps/ ROOT目錄。當您將訪問http://localhost:8080/Hello.html,下麵是上述形式的實際輸出。
嘗試輸入名字和姓氏,然後單擊提交按鈕,看看那裡的tomcat運行在本地機器上的結果。
根據所提供的輸入作為輸入的在上麵的例子中,它會產生類似的結果。
通過複選框數據到JSP程序
複選框用於當需要多個選項被選中。
下麵是例子的HTML代碼,CheckBox.html,與兩個複選框的表單
<html> <body> <form action="main.jsp" method="POST" target="_blank"> <input type="checkbox" name="maths" checked="checked" /> Maths <input type="checkbox" name="physics" /> Physics <input type="checkbox" name="chemistry" checked="checked" /> Chemistry <input type="submit" value="Select Subject" /> </form> </body> </html>
這段代碼的結果是下麵的表單
下麵是main.jsp的JSP程序來處理輸入的Web瀏覽器複選框按鈕發出。
<html> <head> <title>Reading Checkbox Data</title> </head> <body> <center> <h1>Reading Checkbox Data</h1> <ul> <li><p><b>Maths Flag:</b> <%= request.getParameter("maths")%> </p></li> <li><p><b>Physics Flag:</b> <%= request.getParameter("physics")%> </p></li> <li><p><b>Chemistry Flag:</b> <%= request.getParameter("chemistry")%> </p></li> </ul> </body> </html>
對於上麵的例子,這將顯示下列結果:
Reading Checkbox Data
|
讀取所有表單參數:
以下是通用的例子,它使用的HttpServletRequest的getParameterNames()方法來讀取所有可用的表單參數。此方法返回一個包含順序不定的參數名的枚舉。
一旦我們有了一個Enumeration,我們可以循環下來枚舉以標準方式,使用調用hasMoreElements()方法來確定何時停止使用和nextElement()方法來獲得每個參數的名稱。
<%@ page import="java.io.*,java.util.*" %> <html> <head> <title>HTTP Header Request Example</title> </head> <body> <center> <h2>HTTP Header Request Example</h2> <table width="100%" border="1" align="center"> <tr bgcolor="#949494"> <th>Param Name</th><th>Param Value(s)</th> </tr> <% Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<tr><td>" + paramName + "</td> "); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr> "); } %> </table> </center> </body> </html>
以下是Hello.html時的內容:
<html> <body> <form action="main.jsp" method="POST" target="_blank"> <input type="checkbox" name="maths" checked="checked" /> Maths <input type="checkbox" name="physics" /> Physics <input type="checkbox" name="chemistry" checked="checked" /> Chem <input type="submit" value="Select Subject" /> </form> </body> </html>
現在嘗試調用JSP使用上述Hello.html時,這會產生的結果類似,如下基於所提供的輸入:
讀取所有的表單參數
Param Name | Param Value(s) |
---|---|
maths | on |
chemistry | on |
你可以試試上麵的JSP讀取它具有其它對象,如文本框,單選按鈕或下拉框等任何其他形式的數據