JSP与HTML表单结合


HTML表单用于从用户处获取数据, 当表单提交后, 在服务端获取这些数据进行进一步处理,比如业务逻辑验证、将数据保存到数据库中等。

表单和JSP处理脚本分离

创建一个HTML表单用于获取用户的信息:

index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP Form Demo</title>
<style type="text/css">
label{ margin-right:20px;}
input{ margin-top:5px;}
</style>
</head>
<body>
<form action="handleUserInfo.jsp" method="post">
<fieldset>
<legend>用户信息</legend>
<label for="name">名字</label>
<input type="text" name="name" /> <br/>
<label for="email">邮箱</label>
<input type="text" name="email" /> <br/>
<input type="submit" value="submit">
</fieldset>
</form>
</body>
</html>

在form标签中,可以看到使用post方法将表单数据发送到服务器。我们需要创建一个负责获取表单数据并进行处理的JSP文件handleUserInfo.jsp

handleUserInfo.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP 表单演示</title>
</head>
<body>
<%
String name = request.getParameter("name");
String email = request.getParameter("email");
%>
<p>Hi <%=name%>!
你提交的邮箱地址是: <%=email%>.</p>
</body>
</html>

在处理脚本Servelet的中,我们使用了request对象的getParameter()方法来获取表单数据, 它返回名称对应的表单字段的值。getParameter()方法的返回值总是字符串类型的,因此,如果表单字段的值是数字,则必须对getParameter()返回值进行转换。如果字段不存在,则返回null

然后, handleUserInfo.jsp通过JSP表达式将这些值显示出来。

单个JSP页面中处理HTML表单

之前的HTML表单的代码和处理表单的JSP代码分别位于不同的文件中。
现在让我们看一下如何在单个JSP页面中处理HTML表单。

首先,我们需要在HTML表单中添加一个额外的隐藏字段。当用户提交表单数据时,我们通过这个隐藏字段的值来判断是否提交了表单。

index.jsp

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
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP 处理表单</title>
<style type="text/css">
label{ margin-right:20px;}
input{ margin-top:5px;}
</style>
</head>
<body>
<%
String val = request.getParameter("isSubmitted");
int isSubmitted = 0;
if (val != null) {
isSubmitted = Integer.parseInt(val);
if (isSubmitted == 1) {
String name = request.getParameter("name");
String email = request.getParameter("email");
out.println("<p>Hi " + name +
"!你提交的邮箱地址是:" + email +".</p>");
}
}
%>
<% if (isSubmitted == 0) {%>
<form action="index.jsp" method="post">
<fieldset>
<legend>用户信息</legend>
<label for="name">名字</label>
<input type="text" name="name" /> <br/>
<label for="email">邮箱</label>
<input type="text" name="email" /> <br/>
<input type="hidden" name="isSubmitted" value="1" />
<input type="submit" value="submit">
</fieldset>
</form>
<%}%>
</body>
</html>

注意,在action中的文件名必须和文件一致,或者留空。
当不是提交表单时,request.getParameter("isSubmitted")返回为空, 转换后isSubmitted值为0。 所以将显示表单。
当提交表单后,isSubmitted值为1。 JSP页面将继续获取name 和email的值并进行显示。

在这里,为了演示,我们是把用户提交的数据未经过处理直接就进行显示了。但是为了系统安全,
处理表单时要记住的最重要的一点是:永远不要信任从客户端提交的数据。

  • 不仅需要在客户端进行简单验证,比如使用JavaScript检查必填字段是否填写,电子邮件格式是否正确。
  • 更需要在服务器端,对收集的数据进行简单验证,业务验证后才可以进行显示或者存储到数据库中。

诊断

如果你遇到这样的问题:

1
2
3
4
5
6
descriptionThe server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.UnsupportedClassVersionError: Class org.mypackage.hello.NameHandler has unsupported major or minor version numbers, which are greater than those found in the Java Runtime Environment version 1.8.0_221
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 5.0 logs.

在Libraries中选择Properties:


原文链接:https://codingdict.com/