0
点赞
收藏
分享

微信扫一扫

带有 Spring 表单标签和 JSP 的 Spring Boot 表单处理教程

Java旺 2022-03-11 阅读 100

在本教程中,您将学习如何编写代码以显示从用户那里获取信息的表单,以及如何编写代码以在用户提交表单时获取表单数据。我将引导您开发一个 Spring Boot 应用程序,该应用程序向用户呈现以下表单:

 

如您所见,此表单包含几乎标准的 HTML 输入字段,如文本框、单选按钮、选择框(下拉列表)、复选框和文本区域——以及标签和提交按钮。

我们将使用带有 Spring MVC、Spring Form 标签和 JSP 的 Spring Boot。您可以使用任何 Java IDE,例如 Eclipse 或 Spring Tool Suite。

如果您是 Spring Boot 新手,我建议您先学习本教程。然后回到这个。

 

1.创建Spring Boot项目

您可以使用Spring Initializr 工具创建一个 Spring Boot 项目,然后将该项目导入 Eclipse IDE。如果您使用 Spring Tool Suite,则可以直接在 IDE中创建 Spring Boot 项目。无论如何,项目在pom.xml文件中必须有以下依赖信息:

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

<?xml version="1.0" encoding="UTF-8"?>

<project ...>

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.2.4.RELEASE</version>

        <relativePath />

    </parent>

     

    <groupId>net.codejava</groupId>

    <artifactId>SpringBootFormHandling</artifactId>

    <version>1.0</version>

     

    <name>SpringBootFormHandling</name>

    <description>Form handling with Spring Boot</description>

 

    <properties>

        <java.version>1.8</java.version>

    </properties>

 

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>    

    </dependencies>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

 

</project>

如您所见,这里我们使用 Spring Boot 2.2.4 和 Java 1.8。spring-boot-starter-web依赖项为在嵌入式 Tomcat 服务器上运行的Spring MVC Web 应用程序提供了默认配置。spring-boot-maven-plugin可以将我们的 Spring Boot 应用程序打包到 JAR/WAR 文件中。

并确保项目具有以下目录结构:


 

Spring MVC 应用程序的所有配置都是由 Spring Boot 在后台完成的。

提示: 使用 Spring Boot DevTools 进行自动重启 ,因此您不必在开发过程中手动重启应用程序。

 

2. 使用 Spring Boot 启用 JSP

要将 JSP (JavaServer Pages) 与 Spring Boot 一起使用,您必须在pom.xml文件中添加以下依赖项:

1

2

3

4

5

<dependency>

    <groupId>org.apache.tomcat.embed</groupId>

    <artifactId>tomcat-embed-jasper</artifactId>

    <scope>provided</scope>

</dependency>

并在application.properties文件中配置 Spring MVC 解析器如下:

1

2

spring.mvc.view.prefix=/WEB-INF/views/

spring.mvc.view.suffix=.jsp

这意味着您必须将 JSP 文件放在项目中的此目录下:

src/main/webapp/WEB-INF/views

 

3.创建Spring MVC控制器类

使用以下初始代码创建一个名为MvcController的 Spring MVC 控制器类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

package net.codejava;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

public class MvcController {

     

    @RequestMapping("/")

    public String home() {

        System.out.println("Going home...");

        return "index";

    }

}

您可以看到处理程序方法home()将向应用程序的主页(上下文根 /)提供请求。它返回名为 index 的视图,该视图将被解析为/WEB-INF/views/index.jsp下的 JSP 文件。

 

4. 更新主页

接下来,使用以下 HTML 代码在src/main/webapp/WEB-INF/views目录下创建主页index.jsp :

1

2

3

4

5

6

7

8

9

10

11

12

<!DOCTYPE html>

<html>

<head>

<meta charset="ISO-8859-1">

<title>Spring Boot Form Handling Example</title>

</head>

<body>

    <h1>Spring Boot Form Handling Example</h1>

    <h2>Spring Form Tags with JSP</h2>

    <a href="/register">Click here</a>

</body>

</html>

运行 Spring Boot 应用程序,并在 localhost 访问 Web 应用程序,您将看到如下所示的主页:

当用户单击超链接时,将显示用户注册表单。

 

5. 代码域模型类

注册表单中创建代表用户详细信息的 User r类,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package net.codejava;

 

import java.sql.Date;

 

public class User {

    private String name;

    private String email;

    private String gender;

    private String password;

    private String profession;

    private String note;

    private Date birthday;

    private boolean married;

 

    // getters...

    // setters...

 

    // override toString()

     

}

请注意,为简洁起见,未显示 getter 和 setter 方法。您还应该覆盖返回用户所有详细信息的toString()方法。

 

6.代码展示表单处理方法

当用户点击主页中的超链接时,为了处理应用程序的请求,在控制器类中添加以下方法:

1

2

3

4

5

6

7

8

9

public String showForm(Model model) {

    User user = new User();

    List<String> professionList = Arrays.asList("Developer""Designer""Tester");

     

    model.addAttribute("user", user);

    model.addAttribute("professionList", professionList);

     

    return "register_form";

}

使用以下导入语句:

1

2

3

4

5

import java.util.Arrays;

import java.util.List;

 

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.GetMapping;

当用户单击主页中的超链接/register时,将调用showForm()处理程序方法。它创建两个对象并将其添加到模型中:

-用于捕获表单上字段值的用户对象。

-显示表单上下拉列表(选择框)值的职业列表。

然后它返回视图名称register_form - 它将被解析为接下来描述的 JSP 文件。

 

7.代码Spring MVC表单页面

要向用户显示用户注册表单,请使用以下代码在/WEB-INF/views下创建register_form.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

40

41

42

43

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>   

<!DOCTYPE html>

<html>

<head>

<meta charset="ISO-8859-1">

<title>User Registration Form</title>

</head>

<body>

    <div align="center">

        <h2>User Registration</h2>

        <form:form action="register" method="post" modelAttribute="user">

            <form:label path="name">Full name:</form:label>

            <form:input path="name"/><br/>

             

            <form:label path="email">E-mail:</form:label>

            <form:input path="email"/><br/>

             

            <form:label path="password">Password:</form:label>

            <form:password path="password"/><br/>      

 

            <form:label path="birthday">Birthday (yyyy-mm-dd):</form:label>

            <form:input path="birthday"/><br/>

             

            <form:label path="gender">Gender:</form:label>

            <form:radiobutton path="gender" value="Male"/>Male

            <form:radiobutton path="gender" value="Female"/>Female<br/>

             

            <form:label path="profession">Profession:</form:label>

            <form:select path="profession" items="${professionList}" /><br/>

                     

            <form:label path="married">Married?</form:label>

            <form:checkbox path="married"/><br/>

             

            <form:label path="note">Note:</form:label>

            <form:textarea path="note" cols="25" rows="5"/><br/>

                 

            <form:button>Register</form:button>

        </form:form>

    </div>

</body>

</html>

我们使用 Spring 表单标签将模型中的对象与表单中的字段进行映射,因此需要在文件开头声明以下指令:

1

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

然后我们使用<form:form>标签来创建一个表单:

1

<form:form action="register" method="post" modelAttribute="user">

在这里,请注意modelAttribute 属性,该属性指定映射到此表单的模型中对象的名称。还记得showForm()方法中的用户对象吗?

然后对于每个表单字段,我们使用 Spring 表单标签作为标签和字段:

1

2

<form:label path="email">E-mail:</form:label>

<form:input path="email"/>

请注意,路径属性的值必须引用模型对象中的字段。

要格式化表单,请将以下 CSS 样式添加到页面的 head 部分:

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

<head>

...

<style type="text/css">

    label {

        display: inline-block;

        width: 200px;

        margin: 5px;

        text-align: left;

    }

    input[type=text], input[type=password], select {

        width: 200px;  

    }

    input[type=radio] {

        display: inline-block;

        margin-left: 45px;

    }

    input[type=checkbox] {

        display: inline-block;

        margin-right: 190px;

    }  

     

    button {

        padding: 10px;

        margin: 10px;

    }

</style>

</head>

运行时,表单如下图所示:

 

8.代码表单提交处理方法

要在用户单击表单上的注册按钮时处理表单提交,请将以下方法添加到控制器类:

1

2

3

4

5

6

7

@PostMapping("/register")

public String submitForm(@ModelAttribute("user") User user) {

     

    System.out.println(user);

     

    return "register_success";

}

使用以下导入语句:

1

2

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.PostMapping;

如您所见,表单的方法是 post,因此@PostMapping 注解用于处理程序方法来处理 HTTP POST 请求。

请注意,@ModelAttribute注释用于方法参数User user - 因此 Spring 将知道读取表单上的字段值并将它们设置为模型对象的字段。我们不必编写一行代码来获取表单数据——只需使用模型对象!

submitForm()方法简单地将用户对象的详细信息打印到控制台,并返回名为register_success的视图,该视图解析到下面描述的 JSP 页面。

 

9.代码结果页面

最后,使用以下代码创建register_success.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

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="ISO-8859-1">

<title>Registration Success</title>

<style type="text/css">

    span {

        display: inline-block;

        width: 200px;

        text-align: left;

    }

</style>

</head>

<body>

    <div align="center">

        <h2>Registration Succeeded!</h2>

        <span>Full name:</span><span>${user.name}</span><br/>

        <span>E-mail:</span><span>${user.email}</span><br/>

        <span>Password:</span><span>${user.password}</span><br/>

        <span>Birthday:</span><span>${user.birthday}</span><br/>

        <span>Gender:</span><span>${user.gender}</span><br/>

        <span>Profession:</span><span>${user.profession}</span><br/>

        <span>Married?:</span><span>${user.married}</span><br/>

        <span>Note:</span><span>${user.note}</span><br/>

    </div>

</body>

</html>

该页面简单地使用了 JSP 的表达式语言(EL)来显示用户提交的表单信息,如下图所示:

那是关于在 Spring Boot 中使用 Spring 表单标签和 JSP 处理表单的教程。您可以下载下面附加的示例项目。

要验证用户对表单的输入,请参阅 Spring Boot 表单验证教程。

ava 程序员(SCJP 和 SCWCD)。他从 Java 1.4 开始使用 Java 编程,从那时起就爱上了 Java。在Facebook 上与他交朋友,观看Spring Boot 表单验证教程



 

附件:
SpringBootFormHandling.zip【Spring Boot Form示例项目】69 KB

添加评论

举报

相关推荐

0 条评论