
- JSP 基礎教程
- JSP - 首頁
- JSP - 概述
- JSP - 環境搭建
- JSP - 架構
- JSP - 生命週期
- JSP - 語法
- JSP - 指令
- JSP - 動作
- JSP - 隱式物件
- JSP - 客戶端請求
- JSP - 伺服器響應
- JSP - HTTP 狀態碼
- JSP - 表單處理
- JSP - 編寫過濾器
- JSP - Cookie 處理
- JSP - 會話跟蹤
- JSP - 檔案上傳
- JSP - 日期處理
- JSP - 頁面重定向
- JSP - 點選計數器
- JSP - 自動重新整理
- JSP - 傳送郵件
- 高階 JSP 教程
- JSP - 標準標籤庫
- JSP - 資料庫訪問
- JSP - XML 資料
- JSP - JavaBean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全
- JSP - 國際化
- JSP 有用資源
- JSP - 問答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
JSP - 表單處理
本章將討論 JSP 中的表單處理。您一定遇到過許多需要將一些資訊從瀏覽器傳遞到 Web 伺服器,最終傳遞到後端程式的情況。瀏覽器使用兩種方法將此資訊傳遞到 Web 伺服器。這些方法是 GET 方法和 POST 方法。
表單處理中的方法
現在讓我們討論表單處理中的方法。
GET 方法
GET 方法傳送附加到頁面請求的編碼使用者資訊。頁面和編碼資訊由 ? 字元分隔,如下所示:
http://www.test.com/hello?key1=value1&key2=value2
GET 方法是從瀏覽器傳遞資訊到 Web 伺服器的預設方法,它會生成一個長字串,該字串顯示在瀏覽器的位置欄中。如果要將密碼或其他敏感資訊傳遞到伺服器,建議最好不要使用 GET 方法。
GET 方法有大小限制:請求字串只能包含 1024 個字元。
此資訊使用QUERY_STRING 標頭傳遞,並且可以透過 QUERY_STRING 環境變數訪問,可以使用請求物件的getQueryString() 和getParameter() 方法進行處理。
POST 方法
將資訊傳遞到後端程式的一種更可靠的方法通常是 POST 方法。
此方法打包資訊的方式與 GET 方法完全相同,但它不是在 URL 中 ? 後面傳送文字字串,而是將其作為單獨的訊息傳送。此訊息以標準輸入的形式到達後端程式,您可以對其進行解析並用於處理。
JSP 使用getParameter() 方法讀取簡單引數和getInputStream() 方法讀取來自客戶端的二進位制資料流來處理此類請求。
使用 JSP 讀取表單資料
JSP 根據情況使用以下方法自動處理表單資料解析:
getParameter() − 呼叫request.getParameter() 方法獲取表單引數的值。
getParameterValues() − 如果引數出現多次並返回多個值(例如複選框),則呼叫此方法。
getParameterNames() − 如果要獲取當前請求中所有引數的完整列表,則呼叫此方法。
getInputStream() − 呼叫此方法讀取來自客戶端的二進位制資料流。
使用 URL 的 GET 方法示例
以下 URL 將使用 GET 方法將兩個值傳遞給 HelloForm 程式。
https://:8080/main.jsp?first_name=ZARA&last_name=ALI
以下是處理 Web 瀏覽器提供的輸入的main.jsp JSP 程式。我們將使用getParameter() 方法,這使得訪問傳遞的資訊非常容易:
<html> <head> <title>Using GET Method to Read Form Data</title> </head> <body> <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>
現在在瀏覽器的位置欄中輸入https://:8080/main.jsp?first_name=ZARA&last_name=ALI。這將生成以下結果:
使用 GET 方法讀取表單資料
|
使用表單的 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.htm 的檔案中,並將其放在<Tomcat 安裝目錄>/webapps/ROOT 目錄中。當您訪問https://:8080/Hello.htm時,您將收到以下輸出。
< p>嘗試輸入名字和姓氏,然後單擊提交按鈕以檢視 Tomcat 執行的本地計算機上的結果。根據提供的輸入,它將生成與上述示例類似的結果。使用表單的 POST 方法示例
讓我們對上面的 JSP 進行一些修改,以處理 GET 和 POST 方法。以下是處理 Web 瀏覽器使用 GET 或 POST 方法提供的輸入的main.jsp JSP 程式。
事實上,上面的 JSP 沒有變化,因為傳遞引數的唯一方法發生了變化,並且沒有將二進位制資料傳遞給 JSP 程式。檔案處理相關的概念將在單獨的章節中解釋,在該章節中我們需要讀取二進位制資料流。
<html> <head> <title>Using GET and POST Method to Read Form Data</title> </head> <body> <center> <h1>Using POST 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.htm檔案的內容:
<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.htm放在<Tomcat 安裝目錄>/webapps/ROOT 目錄中。當您訪問https://:8080/Hello.htm時,您將收到以下輸出。
嘗試輸入名字和姓氏,然後單擊提交按鈕以檢視 Tomcat 執行的本地計算機上的結果。
根據提供的輸入,您將收到與上述示例類似的結果。
將複選框資料傳遞到 JSP 程式
當需要選擇多個選項時,使用複選框。
以下是包含兩個複選框的表單的示例HTML 程式碼,CheckBox.htm。
<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>
以上程式碼將生成以下結果:
以下是處理 Web 瀏覽器為複選框按鈕提供的輸入的 main.jsp JSP 程式。
<html> <head> <title>Reading Checkbox Data</title> </head> <body> <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() 方法讀取所有可用的表單引數。此方法返回一個列舉,其中包含引數名稱,但順序未指定。
獲得列舉後,我們可以使用標準方式向下迴圈列舉,使用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>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </center> </body> </html>
以下是Hello.htm的內容:
<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>
現在嘗試使用上面的 Hello.htm 呼叫 JSP;這將根據提供的輸入生成如下所示的結果:
讀取所有表單引數
引數名稱 | 引數值(s) |
---|---|
數學 | 已選中 |
化學 | 已選中 |
您可以嘗試使用上面的 JSP 讀取任何其他表單的資料,這些表單包含文字框、單選按鈕或下拉列表等其他物件。