IT兄弟連 JavaWeb教程 Servlet表單數據
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/ITXDL123/article/details/90089708
很多情況下,需要傳遞一些資訊,從瀏覽器到Web伺服器,最終到後台程式。瀏覽器使用兩種方法可將這些資訊傳遞到Web伺服器,分別為GET方法和POST方法。
1.GET方法
GET 方法向頁面請求發送已編碼的用戶資訊。頁面和已編碼的資訊中間用「?」字元分隔,如下所示:
http://www.test.com/hello?key1=value1&key2=value2
GET方法是默認的從瀏覽器向Web伺服器傳遞資訊的方法,它會產生一個很長的字元串,出現在瀏覽器的地址欄中。如果您要向伺服器傳遞的是密碼或其他的敏感資訊,請不要使用GET方法。GET方法有大小限制:請求字元串中最多只能有1024個字元。這些資訊使用QUERY_STRING頭傳遞,並可以通過QUERY_STRING環境變數訪問,Servlet使用doGet()方法處理這種類型的請求。
2.POST方法
另一個向後台程式傳遞資訊的比較可靠的方法是POST方法。POST方法打包資訊的方式與GET方法基本相同,但是POST方法不是把資訊作為URL中?字元後的文本字元串進行發送,而是把這些資訊作為一個單獨的消息。消息以標準輸出的形式傳到後台程式,您可以解析和使用這些標準輸出。Servlet使用doPost()方法處理這種類型的請求。
使用Servlet讀取表單數據,需要根據數據的不同使用不同的方法進行解析,在Servlet API中,定義了如下方法來解析不同類型的數據:
● getParameter():可以調用request.getParameter()方法來獲取表單參數的值。返回值類型為String。
● getParameterValues():如果參數出現一次以上,則調用該方法,並返回多個值,例如複選框。返回值類型為String數組。
● getParameterNames():如果想要得到當前請求中的所有參數的完整列表,則調用該方法。返回值類型為String數組。
下面的案例使用Servlet API獲取GET請求中的參數:
package com.xdl.form;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloForm extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloForm() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "使用 GET 方法讀取表單數據";
//在Tomcat7版本中需要使用下面的方式處理GET方式傳遞中文亂碼問題
//String name =new String
//(request.getParameter("name").getBytes ("ISO-8859-1"),"UTF-8");
//在Tomcat8版本中不需要處理GET方式傳遞中文亂碼問題,
//因為Tomcat8默認使用UTF-8作為字符集傳遞中文參數,
//而Tomcat7默認使用的是ISO-8859-1字符集
String name = request.getParameter("name");
String docType = "<!DOCTYPE html> n";
out.println(docType +
"<html>n" +
"<head><title>" + title + "</title></head>n" +
"<body bgcolor="#f0f0f0">n" +
"<h1 align="center">" + title + "</h1>n" +
"<ul>n" +
" <li><b>站點名</b>:"
+ name + "n" +
" <li><b>網址</b>:"
+ request.getParameter("url") + "n" +
"</ul>n" +
"</body></html>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
然後在web.xml文件中配置上面的Servlet:
<servlet>
<servlet-name>HelloForm</servlet-name>
<servlet-class>com.xdl.form.HelloForm</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloForm</servlet-name>
<url-pattern>/HelloForm</url-pattern>
</servlet-mapping>
現在在瀏覽器的地址欄中輸入http://localhost:8080/form-test/HelloForm?name=兄弟連java&url=java.itxdl.cn,並在觸發上述命令之前確保已經啟動Tomcat伺服器,如果一切順利,會得到如圖2.1所示的結果:

HelloForm生成的HTML頁面
下面使用HTML表單和提交按鈕傳遞兩個值,繼續使用HelloForm來處理輸入。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>兄弟連it教育(java.itxdl.cn)</title>
</head>
<body>
<form action="HelloForm" method="GET">
網址名:<input type="text" name="name"> <br />
網址:<input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
將這個HTML文件保存在WebContent下並命名為hello.html,然後重啟Tomcat伺服器,在瀏覽器中輸入http://localhost:8080/ form-test /hello.html,瀏覽器中將顯示如圖所示的內容。

hello.html
在網址名中輸入:變態嚴管 網址欄中輸入:java.itxdl.cn 然後點擊提交按鈕,將看到如圖所示的頁面。

HelloForm生成的HTML頁面
讓我們對上面的HelloForm做小小的修改,以便它可以處理GET和POST方法。下面的 HelloForm.java Servlet程式使用GET和POST方法處理由Web瀏覽器給出的輸入。
package com.xdl.form;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloForm extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloForm() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "使用 POST 方法讀取表單數據";
//在tomcat8中需要對POST提交的表單中的中文做處理,只有GET
String name =new String
(request.getParameter("name").getBytes ("ISO-8859-1"),"UTF-8");
//或者使用下面的方式進行中文亂碼的處理,並且推薦使用這種方式
//request.setCharacterEncoding("UTF-8");
String docType = "<!DOCTYPE html> n";
out.println(docType +
"<html>n" +
"<head><title>" + title + "</title></head>n" +
"<body bgcolor="#f0f0f0">n" +
"<h1 align="center">" + title + "</h1>n" +
"<ul>n" +
" <li><b>站點名</b>:"
+ name + "n" +
" <li><b>網址</b>:"
+ request.getParameter("url") + "n" +
"</ul>n" +
"</body></html>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
現在將上面的Servlet重新部署到Tomcat伺服器上並重啟,然後使用帶有POST方法的hello.html進行測試,hello.html程式碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>兄弟連it教育(java.itxdl.cn)</title>
</head>
<body>
<form action="HelloForm" method="POST">
網址名:<input type="text" name="name"> <br />
網址:<input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
在瀏覽器中輸入http://localhost:8080/form-test/hello.html,然後輸入網址名和網址,然後點擊提交按鈕,最後結果顯示如圖2所示。

HelloForm生成的HTML頁面
現在我們需要使用複選框將數據傳遞到伺服器端,首先我們新建一個HTML頁面,checkbox.html,其中含有一個帶有兩個複選框的表單。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>兄弟連it教育(java.itxdl.cn)</title>
</head>
<body>
<form action="CheckBox" method="POST">
<input type="checkbox" name="itxdl" value="兄弟連IT教育" /> 兄弟連IT教育
<input type="checkbox" name="itxdl" value="Java" /> Java
<input type="checkbox" name="itxdl" value="大數據" /> 大數據
<input type="submit" value="選擇站點" />
</form>
</body>
</html>
下面的程式碼是CheckBox.java Servlet程式,處理Web瀏覽器給出的複選框輸入。
package com.xdl.form;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CheckBox extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "讀取複選框數據";
String[] parameterValues = request.getParameterValues("itxdl");
String docType = "<!DOCTYPE html> n";
out.println(docType +
"<html>n" +
"<head><title>" + title + "</title></head>n" +
"<body bgcolor="#f0f0f0">n" +
"<h1 align="center">" + title + "</h1>n" +
"<ul>n" +
"您選擇了:n");
for(String name : parameterValues) {
out.println(name);
}
out.println(
"</ul>n" +
"</body></html>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
設置對應的web.xml
<servlet>
<servlet-name>CheckBox</servlet-name>
<servlet-class>com.xdl.form.CheckBox</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckBox</servlet-name>
<url-pattern>/CheckBox</url-pattern>
</servlet-mapping>
啟動Tomcat伺服器,然後再瀏覽器中輸入http://localhost:8080/form-test/checkbox.html,將顯示如圖所示的頁面。

checkbox.html
依次選擇三個選項,然後點擊"選擇站點"按鈕,將顯示如圖所示的頁面。

CheckBox生成的HTML頁面