JSP的表單處理

如下內容引用自http://wiki.jikexueyuan.com/project/jsp/form-processing.htmlhtml

當須要從瀏覽器向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():若是想要在當前請求下獲得一個全部參數的完整的列表,那麼調用這個方法。

  • getInputStream():調用這個方法讀取來自客戶端二進制數據流。

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

相關文章
相關標籤/搜索