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頁面