如何使用 Java Servlet 处理 HTML 表单数据
在本 Java Servlet 教程中,我将指导您如何使用Java Servlet从服务器端的 HTML 表单中读取常用输入字段的值。您知道,处理以 HTML 页面表示的表单数据是 Web 开发中非常常见的任务。一个典型的场景是用户填写表单的字段并提交。服务器将根据提交的数据处理请求,并将响应发送回客户端。下图描述了在服务器端使用 Java servlet 的工作流:要在 HTML 中创建表单,我
在本 Java Servlet 教程中,我将指导您如何使用Java Servlet从服务器端的 HTML 表单中读取常用输入字段的值。
您知道,处理以 HTML 页面表示的表单数据是 Web 开发中非常常见的任务。一个典型的场景是用户填写表单的字段并提交。服务器将根据提交的数据处理请求,并将响应发送回客户端。下图描述了在服务器端使用 Java servlet 的工作流:
要在 HTML 中创建表单,我们需要使用以下标签:
- <form>:创建一个表单以在其正文中添加字段。
- <input> , <select> , <textarea> ...:创建表单字段,如文本框、下拉列表、文本区域、复选框、单选按钮……和提交按钮。
为了使表单与 Java servlet 一起工作,我们需要为<form>标记指定以下属性:
- method =”post”:将表单数据作为 HTTP POST 请求发送到服务器。一般情况下,表单提交应该在 HTTP POST 方法中完成。
- action =” servlet 的 URL ”:指定负责处理从该表单发布的数据的 servlet 的相对 URL。
例如,以下是登录表单的 HTML 代码:
1
2
3
4
5
|
< form name = "loginForm" method = "post" action = "loginServlet" >
Username: < input type = "text" name = "username" /> < br />
Password: < input type = "password" name = "password" /> < br />
< input type = "submit" value = "Login" />
</ form >
|
此表单在浏览器中如下所示:
在服务器端,我们需要创建一个映射到 URL 的 Java servlet:loginServlet,在表单的 action 属性中指定。以下是 servlet 的代码:
1
2
3
4
5
6
7
8
9
10
11
|
@WebServlet ( "/loginServlet" )
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// code to process the form...
}
}
|
请注意,servlet 的 URL 由servlet 类之前的@WebServlet注释指定。当用户提交上面的登录表单时,servlet 容器会调用servlet 的doPost()方法。通常,我们将在doPost()方法中执行以下任务:
- 通过请求对象(javax.servlet.http.HttpServletRequest接口的实现)读取从表单发布的字段的值。
- 做一些处理,例如连接到数据库来验证用户名和密码。
- 通过响应对象(javax.servlet.http.HttpServletResponse接口的实现)将响应返回给用户。
为了读取表单字段的值,HttpServletRequest接口提供了以下方法:
- String getParameter(String name):获取由给定名称指定的字段的值,作为字符串。如果不存在具有给定名称的表单字段,则该方法返回 null。
- String[] getParameterValues(String name) : 在 String 对象数组中获取一组具有相同名称的字段的值。如果不存在具有给定名称的字段,则该方法返回 null。
请注意,上述方法还可以处理 URL 查询字符串中的参数,因此名称为 getParameter。
例如,我们可以在doPost()方法中编写以下代码来读取表单字段的值:
1
2
|
String username = request.getParameter( "username" );
String password = request.getParameter( "password" );
|
要将响应发送回客户端,我们需要通过调用HttpServletResponse接口的getWriter()方法从响应对象中获取写入器:
1
|
PrintWriter writer = response.getWriter();
|
然后使用print()或println()方法传递响应(以 HTML 代码的形式)。例如:
1
2
3
4
5
|
String htmlRespone = "<html>" ;
htmlRespone += "<h2>Your username is: " + username + "</h2>" ;
htmlRespone += "</html>" ;
writer.println(htmlRespone);
|
这是处理登录表单的 servlet 类的完整代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package net.codejava.servlet;
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;
@WebServlet ( "/loginServlet" )
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// read form fields
String username = request.getParameter( "username" );
String password = request.getParameter( "password" );
System.out.println( "username: " + username);
System.out.println( "password: " + password);
// do some processing here...
// get response writer
PrintWriter writer = response.getWriter();
// build HTML code
String htmlRespone = "<html>" ;
htmlRespone += "<h2>Your username is: " + username + "<br/>" ;
htmlRespone += "Your password is: " + password + "</h2>" ;
htmlRespone += "</html>" ;
// return response
writer.println(htmlRespone);
}
}
|
这是在浏览器中提交上述登录表单时的示例输出:
到目前为止,您已经了解了使用 Java servlet 处理 HTML 表单数据的来龙去脉。供您参考,我们提供了处理常见 HTML 表单字段的示例列表,如下所示。请注意,我们使用 servlet 中的System.out.println()语句来演示输出。
1.读取文本字段和密码字段的值
- HTML 代码:
12
Username: <
input
type
=
"text"
name
=
"username"
/>
Password: <
input
type
=
"password"
name
=
"password"
/>
- 现场图片:
- servlet 中的 Java 代码:
12345
String username = request.getParameter(
"username"
);
String password = request.getParameter(
"password"
);
System.out.println(
"username is: "
+ username);
System.out.println(
"password is: "
+ password);
- 输出:
1
2
|
username is: admin
password is: nimda
|
2.读取复选框字段的值
- HTML 代码:
123
Speaking language:
<
input
type
=
"checkbox"
name
=
"language"
value
=
"english"
/>English
<
input
type
=
"checkbox"
name
=
"language"
value
=
"french"
/>French
- 现场图片:
- servlet 中的 Java 代码:
12345678
String languages[] = request.getParameterValues(
"language"
);
if
(languages !=
null
) {
System.out.println(
"Languages are: "
);
for
(String lang : languages) {
System.out.println(
"\t"
+ lang);
}
}
- 输出:
123
Languages are:
english
french
3.读取单选按钮字段的值
- HTML 代码:
123
Gender:
<
input
type
=
"radio"
name
=
"gender"
value
=
"male"
/>Male
<
input
type
=
"radio"
name
=
"gender"
value
=
"female"
/>Female
- 现场图片:
- servlet 中的 Java 代码:
12
String gender = request.getParameter(
"gender"
);
System.out.println(
"Gender is: "
+ gender);
- 输出:
1
|
Gender is: male
|
4.读取文本区域字段的值
- HTML 代码:
12
Feedback:<
br
/>
<
textarea
rows
=
"5"
cols
=
"30"
name
=
"feedback"
></
textarea
>
- 现场图片:
- servlet 中的 Java 代码:
12
String feedback = request.getParameter(
"feedback"
);
System.out.println(
"Feed back is: "
+ feedback);
- 输出:
1
|
Feed back is: This tutorial is very helpful. Thanks a lot!
|
5.读取下拉列表(组合框)字段的值
- HTML 代码:
1234567
Job Category:
<
select
name
=
"jobCat"
>
<
option
value
=
"tech"
>Technology</
option
>
<
option
value
=
"admin"
>Administration</
option
>
<
option
value
=
"biology"
>Biology</
option
>
<
option
value
=
"science"
>Science</
option
>
</
select
>
- 现场图片:
- servlet 中的 Java 代码:
12
String jobCategory = request.getParameter(
"jobCat"
);
System.out.println(
"Job category is: "
+ jobCategory);
- 输出:
1
|
Job category is: science
|
6.读取文件上传字段的数据
要创建一个表单来上传文件,我们需要指定enctype<form>标签的属性如下:
1
2
3
4
5
6
|
< form method = "post" action = "uploadServlet" enctype = "multipart/form-data" >
Select file to upload: < input type = "file" name = "uploadFile" />
< input type = "submit" value = "Upload" />
</ form >
|
对于使用 Java servlet 在服务器端处理文件上传,我们推荐这些教程:
更多推荐
所有评论(0)