如下內容引用自http://wiki.jikexueyuan.com/project/jsp/form-processing.html:html
當須要從瀏覽器向Web服務器傳遞一些信息並最終將信息返回到後端程序時,必定遇到了不少狀況。瀏覽器使用兩種方法將此信息傳遞給Web服務器。這些方法是GET方法和POST方法。java
1、GET方法git
GET方法發送添加到頁面請求的編碼用戶信息。頁面和編碼信息是被符號?分開的,以下所示:github
http://www.test.com/hello?key1=value1&key2=value2
GET方法是從瀏覽器向Web服務器傳遞信息的默認的方法,它產生一個長字符串出如今瀏覽器的位置框中。若是要把密碼或其餘敏感信息傳遞到服務器,那麼不要使用 GET 方法。web
GET方法有大小限制:在請求字符串中只能夠有1024個字符(但這個值能夠經過配置來加大)。後端
這些信息是經過使用QUERY_STRING標題傳遞的,並將經過QUERY_STRING環境變量被接收,該環境變量可使用請求對象的getQueryString()方法和getParameter()方法處理。瀏覽器
2、POST方法tomcat
一般狀況下,將信息傳遞給後端程序的更可靠的方法是POST方法。服務器
該方法打包信息的方法與GET方法是徹底同樣的,可是它不是將信息做爲一個文本字符串放在URL中的?符號以後來發送信息,它是把信息做爲一個單獨的消息來發送該消息。這個消息是以標準輸入的形式發送到後端程序的,在處理過程當中能夠解析並使用這個消息。app
JSP處理這種類型的請求時,使用getParameter()方法讀取簡單參數,使用getInputStream()方法讀取來自客戶端的二進制數據流。
3、使用JSP讀取表單數據
JSP以自動解析的方式處理表單數據,根據狀況不一樣使用如下不一樣的方法:
getParameter():調用request.getParameter()方法獲得一種形式參數的值。
getParameterValues():若是參數出現不止一次,那麼就調用這個方法並返回多個值,例如複選框。
getParameterNames():若是想要在當前請求下獲得一個全部參數的完整的列表,那麼調用這個方法。
4、使用URL的GET方法示例
這是一個簡單的URL示例,使用GET方法將兩個值傳遞給HelloForm程序。
http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI
下面是main.jsp,JSP程序來處理由Web瀏覽器給定的輸入。將使用getParameter()方法使訪問傳遞信息變得容易:
<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>
如今在瀏覽位置框中鍵入(注意區分大小寫)
http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI
這將產生以下所示的結果:
5、使用表單的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-installation-directory>/webapps/ROOT目錄下。當訪問http://localhost:8080/hello.htm時,這就是在表單上面的實際輸出。
嘗試輸入姓和名,而後單擊提交按鈕來查看tomcat運行的本地機器上的結果。基於提供的輸入,它會產生與上面提到的例子中類似的結果。
注意:上面步驟比較舊了,POM和Eclipse項目不須要配置。
6、使用表單的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.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-installation-directory>/webapps/ROOT目錄下。當訪問http://localhost:8080/hello.htm時,下面是表單的實際輸出。
嘗試輸入姓名,而後單擊提交按鈕來查看tomcat運行的本地機器上的結果。
基於提供的輸入,它會產生與上面提到的例子中相似的結果。
注意:上面步驟比較舊了,POM和Eclipse項目不須要配置。
7、將複選框數據傳遞給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>
上述代碼的結果以下所示:
如下是main.jsp,JSP程序爲複選框處理由瀏覽器給定的輸入。
<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>
以上的例子將會產生如下的結果:
8、讀取所有表單參數
如下是使用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.getParameter(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,這將生成一個基於給定的輸入的結果,相似狀況如 下所示:
測試工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test7