Spring如何处理表单提交

今天我们来讲一个最简单的表单提交处理的例子,通过提交一个表单给朋友打一声招呼!

看这边文章之前,你至少应该了解基于Spring的Web开发的基础知识,当然,你还是应该准备好开发环境:

  • IDE+Java环境(JDK 1.7或以上版本)
  • Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)

准备POM文件

POM.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.tianmaying</groupId>
 <artifactId>springboot-form-submission-demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>springboot-form-submission-demo</name>
 <description>Springboot form submission demo</description>

 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.2.5.RELEASE</version>
 <relativePath/>
 </parent>

 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <java.version>1.8</java.version>
 </properties>

 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>

 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>

</project>

创建Controller

我们已经知道可以通过Controller来进行URL路由,Spring WebMvc框架会将Servlet容器里收到的HTTP请求根据路径分发给对应的@Controller类进行处理、而 @RequestMapping注解表明该方法处理那些URL对应的HTTP请求。

我们的SayHelloController的代码如下:

package com.tianmaying.springboot.formsubmission;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class SayHelloController {

 @RequestMapping(value="/sayhello", method=RequestMethod.GET)
 public String sayHelloForm(Model model) {
 model.addAttribute("helloMessage", new HelloMessage());
 return "sayhello";
 }

 @RequestMapping(value="/sayhello", method=RequestMethod.POST)
 public String sayHello(@ModelAttribute HelloMessage helloMessage, Model model) {
 model.addAttribute("helloMessage", helloMessage);
 return "message";
 }

}
  • 针对/sayhelloGET请求,我们返回提交表单的页面,即sayHello.html
  • 针对/sayhelloPOST请求,我们进行表单的处理,然后将打招呼的信息渲染到message.html页面返回。

表单处理也无外乎这两件事情:显示表单,处理表单提交。

显示表单

/sayhelloGET请求里,在渲染页面之前,我们通过model.addAttribute("helloMessage", new HelloMessage());告诉页面绑定到一个空的HelloMessage对象,这样sayHello.html页面初始时就会显示一个空白的表单。

HelloMessage

package com.tianmaying.springboot.formsubmission;

public class HelloMessage {

 private String name;
 private String message;

 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getMessage() {
 return message;
 }
 public void setMessage(String message) {
 this.message = message;
 }

}

仅仅扔一个空白对象给表单还不够,你还得告诉表单的各个输入如何绑定到对象的各个属性上。这个时候我们要用上Themeleaf了。

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <title>我们: Spring表单提交处理</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
 <h1>表单处理演示</h1>
 <form action="#" th:action="@{/sayhello}" th:object="${helloMessage}" method="post">
 <p>friend: <input type="text" th:field="*{name}" /></p>
 <p>message: <input type="text" th:field="*{message}" /></p>
 <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
 </form>
</body>
</html>
  • th:action="@{/sayhello}"表示将表单提交的POST请求交给/sayhello这个URL来处理
  • th:object="${helloMessage}"表示用来搜集的表单数据的对象时helloMessage,即用户输入信息将存储于这个对象中
  • 两个表单域分别增加了属性th:field="*{name}"th:field="*{message}",这就是将一个表单域绑定到特定的对象属性

处理表单

把处理表单的Controller代码再单独拿出来:

 @RequestMapping(value="/sayhello", method=RequestMethod.POST)
 public String greetingSubmit(@ModelAttribute HelloMessage helloMessage, Model model) {
 model.addAttribute("helloMessage", helloMessage);
 return "message";
 }

处理表单就非常简单了,通过@ModelAttribute,我们可以直接通过helloMessage对象来处理用户提交的信息了。

从最早JSP和Servlet时代过来的人,对从request中根据参数名称逐个获取信息,然后自己去设置对应对象属性的场景一定会历历在目,那叫惨绝人寰哪。现在我们只需专注于Model的业务逻辑处理了,Spring MVC和Thymeleaf这对黄金组合帮我们搞定了表单和对象绑定这样繁琐的事情。

Run起来

这应该是你很熟悉的代码了:

package com.tianmaying.springboot.formsubmission;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {

 public static void main(String[] args) {
 SpringApplication.run(App.class, args);
 }

}

SpringBootApplication标注做的事情参考这里,mvn spring-boot:run或在IDE中运行main()方法就可以看到效果了!​不用装Web服务器不用部署就能直接Run Web应用的感觉确实很酸爽!

当然,一个成熟的应用,通常还需要做表单的验证操作,即确保用户提交上来的数据是合法而且有效的!且待下回分解!

以上就是Spring如何处理表单提交的详细内容,更多关于Spring处理表单提交的资料请关注我们其它相关文章!

(0)

相关推荐

  • layui 图片上传+表单提交+ Spring MVC的实例

    Layui 的上传是最常用的, 不可或缺, 记录一下代码, 以后复制都能用!! 1.前端HTML: <div class="layui-form-item"> <label class="layui-form-label">修改头像</label> <div class="layui-input-inline uploadHeadImage"> <div class="layui-u

  • Spring MVC接受表单自动封装特性实例解析

    这篇文章主要介绍了Spring MVC接受表单自动封装特性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring MVC中的Controller可以以实体类接受来自客户端的form表单,表单的字段自动构成实体类对象 客户端的表单 <form action="http://localhost:8080/test/user" method="POST"> <!-- 每个字段名对应实体类

  • 详解SpringBoot构建的Web项目如何在服务端校验表单输入

    这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使用validation注解来检查,并且当用户输入错误时,应用需要再屏幕上显示错误信息提示用户重新输入. 首先构建Maven项目,该项目的pom文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apac

  • SpringSecurity 默认表单登录页展示流程源码

    SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程, 涉及 1.FilterSecurityInterceptor, 2.ExceptionTranslationFilc,xmccmc,ter , 3.DefaultLoginPageGeneratingFilter 过滤器, 并且简单介绍了 AccessDecisionManager 投票机制  1.准备工作(体验SpringSecurity默认表单认证

  • SpringSecurity 自定义表单登录的实现

    本篇主要讲解 在SpringSecurity中 如何 自定义表单登录 , SpringSecurity默认提供了一个表单登录,但是实际项目里肯定无法使用的,本篇就主要讲解如何自定义表单登录 1.创建SpringSecurity项目 1.1 使用IDEA 先通过IDEA 创建一个SpringBoot项目 并且依赖SpringSecurity,Web依赖 此时pom.xml会自动添加 <dependency> <groupId>org.springframework.boot</

  • Spring Boot 2 Thymeleaf服务器端表单验证实现详解

    这篇文章主要介绍了Spring Boot 2 Thymeleaf服务器端表单验证实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 表单验证分为前端验证和服务器端验证. 服务器端验证方面,Java提供了主要用于数据验证的JSR 303规范,而Hibernate Validator实现了JSR 303规范. 项目依赖加入spring-boot-starter-thymeleaf时,默认就会加入Hibernate Validator的依赖. 开

  • SpringBoot基于SpringSecurity表单登录和权限验证的示例

    一.简介 上篇介绍了一个自己做的管理系统,最近空闲的时间自己在继续做,把之前登录时候自定义的拦截器过滤器换成了基于SpringSecurity来做,其中遇到了很多坑,总结下,大家有遇到类似问题的话就当是为大家闭坑吧. 二.项目实现功能和成果展示 首先来看下登录界面:这是我输入的一个正确的信息,点击登录后SpringSecurity会根据你输入的用户名和密码去验证是否正确,如果正确的话就去你定义的页面,我这里定义的是查询教师信息页面.来看下代码吧. 三.准备工作(前台页面.实体类) 实体类Teac

  • springmvc后台基于@ModelAttribute获取表单提交的数据

    1.通过注解ModelAttribute直接映射表单中的参数到POJO.在from中的action写提交的路径,在input的name写参数的名称. POJO package com.demo.model; public class user { private String username; private String password; private int nsex; public String getUsername() { return username; } public vo

  • Spring Security在标准登录表单中添加一个额外的字段

    概述 在本文中,我们将通过向标准登录表单添加额外字段来实现Spring Security的自定义身份验证方案. 我们将重点关注两种不同的方法,以展示框架的多功能性以及我们可以使用它的灵活方式. 我们的第一种方法是一个简单的解决方案,专注于重用现有的核心Spring Security实现. 我们的第二种方法是更加定制的解决方案,可能更适合高级用例. 2. Maven设置 我们将使用Spring Boot启动程序来引导我们的项目并引入所有必需的依赖项.  我们将使用的设置需要父声明,Web启动器和安

  • Spring Security 表单登录功能的实现方法

    1.简介 本文将重点介绍使用 Spring Security 登录. 本文将构建在之前简单的 Spring MVC示例 之上,因为这是设置Web应用程序和登录机制的必不可少的. 2. Maven 依赖 要将Maven依赖项添加到项目中,请参阅Spring Security with Maven 一文. 标准的 spring-security-web 和 spring-security-config 都是必需的. 3. Spring Security Java配置 我们首先创建一个扩展 WebSe

随机推荐