博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring处理表单提交
阅读量:4089 次
发布时间:2019-05-25

本文共 4135 字,大约阅读时间需要 13 分钟。

处理表单提交 由发表在

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

看这边文章之前,你至少应该了解基于Spring的Web开发的基础知识,需要补课的赶紧戳。​当然,你还是应该准备好开发环境:

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

准备POM文件

POM.xml

4.0.0
com.tianmaying
springboot-form-submission-demo
0.0.1-SNAPSHOT
jar
springboot-form-submission-demo
Springboot form submission demo
org.springframework.boot
spring-boot-starter-parent
1.2.5.RELEASE
UTF-8
1.8
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin

创建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;@Controllerpublic 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了。

    天码营经验: Spring表单提交处理    

表单处理演示

friend:

message:

  • 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对象来处理用户提交的信息了。

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

Run起来

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

package com.tianmaying.springboot.formsubmission;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App {    public static void main(String[] args) {        SpringApplication.run(App.class, args);    }}

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

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

更多文章请访问

你可能感兴趣的文章
ubuntu19 安装python虚拟环境
查看>>
我的ubuntu19.04在执行一次全面升级后,导致不能进入桌面
查看>>
我在ubuntu19.01中 使用pip3安装 pgadmin4
查看>>
我在unbutu19.01中使用阿里云的容器服务搭建fusionpbx
查看>>
我在ubuntu19.01中安装docker-composer
查看>>
我在ubuntu19.01中,使用docker-compose启动docker
查看>>
fusionpbx在換了服务器主机后,或换了ip地址后,必须改的设置
查看>>
使用python-ESL开发呼叫系统
查看>>
我在djiango的单页文件中,使用邮件发送接口与功能
查看>>
在vue页面中,使用audio标签 播放音频和视频
查看>>
我的后台规范
查看>>
我的前端vue开发规范
查看>>
我在ubuntu19.1使用django-crontab 执行服务器定时任务
查看>>
vue 播放音频
查看>>
版本更新步骤与命令
查看>>
在centos和ubuntu中 安装 python-ESL
查看>>
在内网使用DBL落地网关,连接公网的freeswitch
查看>>
关于我的整个系统的一个调试
查看>>
django-email中, 本地配置和阿里云配置是不同的。
查看>>
debian中修改freeswitch的 sip默认端口,防盗打
查看>>