位置:首頁 > Java技術 > JSP教學 > JSP表單處理

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

  • First Name: ZARA

  • Last Name: ALI

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:   

嘗試輸入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,下麵是上述形式的實際輸出。

First Name:  
Last Name:   

嘗試輸入名字和姓氏,然後單擊提交按鈕,看看那裡的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>

這段代碼的結果是下麵的表單

 Maths  Physics  Chemistry  

下麵是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

  • Maths Flag : : on

  • Physics Flag: : null

  • Chemistry Flag: : on


讀取所有表單參數:

以下是通用的例子,它使用的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讀取它具有其它對象,如文本框,單選按鈕或下拉框等任何其他形式的數據