Spring 梳理-接收请求的输入(原)
- Spring MVC 允许一下方式将客户端的数据传送到控制器的处理方法中
- 查询参数(Query Parameter)
- 表单参数(Form Parameter)
- 路径变量(Path Variable)
- 处理查询参数
- 不包含默认值
@Controller
@RequestMapping(value="/FirstControl")
public class HelloControl {
@RequestMapping("requestParam")
public String viewRequestParam(@RequestParam("id") String id,@RequestParam("name") String name,Model model){
DeptUserDomain dud=new DeptUserDomain();
dud.setId(id);
dud.setName(name);
model.addAttribute("dud",dud);
return "requestParam";
}
}<body>
viewPersonInfo<br>
${dud.id}<br>
${dud.name}<br>
${dud.salary}
</body>浏览器请求URL
http://localhost:8085/testSpringMVC/FirstControl/requestParam?id=11&name=zs
- 包含默认值
@Controller
@RequestMapping(value = "/FirstControl")
public class HelloControl {
@RequestMapping("requestParam2")
public String viewRequestParam2(@RequestParam(value="id",defaultValue="id2") String id ,@RequestParam(value="name",defaultValue="ls")String name,Model model){
DeptUserDomain dud = new DeptUserDomain();
dud.setId(id);
dud.setName(name);
model.addAttribute("dud", dud);
return "requestParam";
}
}<body>
viewPersonInfo<br>
${dud.id}<br>
${dud.name}<br>
${dud.salary}
</body>浏览器请求 URL http://localhost:8085/testSpringMVC/FirstControl/requestParam2
- 不包含默认值
- 处理路径变量
- 从面向资源的角度,通过URL路径标识 优于 查询参数 的方式;例如 /domain/123 优于 /domain?id=123 ,后则描述的是一个带有参数的一个操作,本质上是通过HTTP发起的RPC
PathVariable参数出现了3次
@Controller
@RequestMapping(value = "/FirstControl")
public class HelloControl {
@RequestMapping(value="/{id}")
public String viewPathParam(@PathVariable("id")String id,Model model){
DeptUserDomain dud = new DeptUserDomain();
dud.setId(id);
model.addAttribute("dud", dud);
return "pathVariable";
}
}<body>
viewPersonInfo<br>
${dud.id}<br>
${dud.name}<br>
${dud.salary}
</body>浏览器请求路径
http://localhost:8085/testSpringMVC/FirstControl/113
- 处理表单参数
- 一个表单,需要三个RequestMapping:原始输入表单(GET)、提交处理(POST)、结果重定向(Redirect)
- 在处理POST类型的请求时,请求处理完后,最好进行一下重定向,这样浏览器的刷新就不会重新提交表单了
- post提交对应的控制器方法,可接收POJO类型参数,POJO参数的属性将会使用请求Form中同名的参数进行填充
- InternalResourceViewResolver 可以识别前缀格式: redirect:xxx forward:xxx
- 校验表单:使用Java校验API(JSR,java Validation API)。包含在 javax.validation.constraints 包中
- 表单校验需要两步:
- 第一步:在POJO类上加上校验注解
- 第二步:在控制器方法参数上,添加@Valid,启用校验
- 在POJO上添加校验注解,并不能阻止表单提交,,校验失败信息存储在控制方法Errors参数上
- @Valid是定义在JSR-303标准中的,我这里使用的是Hibernate Validation对它的实现。这里我们必须使用@Valid标注我们需要校验的参数user,否则Spring不会对它进行校验。另外我们的处理器方法必须给定包含Errors的参数,这可以是Errors本身,也可以是它的子类BindingResult,使用了Errors参数就是告诉Spring关于表单对象数据校验的错误将由我们自己来处理,否则Spring会直接抛出异常,而且这个参数是必须紧挨着@Valid参数的,即必须紧挨着需要校验的参数,这就意味着我们有多少个@Valid参数就需要有多少个对应的Errors参数,它们是一一对应的。
- 校验注解
限制
说明
@Null
限制只能为null
@NotNull
限制必须不为null
@AssertFalse
限制必须为false
@AssertTrue
限制必须为true
@DecimalMax(value)
限制必须为一个不大于指定值的数字
@DecimalMin(value)
限制必须为一个不小于指定值的数字
@Digits(integer,fraction)
限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future
限制必须是一个将来的日期
@Max(value)
限制必须为一个不大于指定值的数字
@Min(value)
限制必须为一个不小于指定值的数字
@Past
限制必须是一个过去的日期
@Pattern(value)
限制必须符合指定的正则表达式
@Size(max,min)
限制字符长度必须在min到max之间
- 表单校验需要两步:
@Controller
@RequestMapping(value = "/FirstControl")
public class HelloControl {
@RequestMapping(value="/registerDeptUser",method=RequestMethod.GET)
public String register(){ return "registerDeptUser";
}
@RequestMapping(value="/registerDeptUser",method=RequestMethod.POST)
public String register(DeptUserDomain dud){
System.out.println("id:"+dud.getId());
System.out.println("name:"+dud.getName());
return "redirect:default";
}
@RequestMapping("/default")
public String mydefault() {
System.out.println("my first controller!!!");
return "default";
}
}<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post">
id:<input type="text" name="id" /><br /> name:<input type="text"
name="name" /><br /> <input type="submit" value="submit" />
</form>
</body>
</html>信息: Server startup in ms
id:id1id1
name:name1
my first controller!!!
Spring 梳理-接收请求的输入(原)的更多相关文章
- spring mvc controller接收请求值及controller之间跳转及传值
spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...
- springMVC中接收请求参数&&数据转发
### 1. 接收请求参数 #### 1.1. [不推荐] 通过HttpServletRequest获取请求参数 假设存在: <form action="handle_login.do ...
- 图解 Spring:HTTP 请求的处理流程与机制【2】
2. HTTP 请求在 Web 容器中的处理流程 Web 容器以进程的方式在计算机上运行,我们知道进程是系统资源分配的最小单元,线程是系统任务执行的最小单元.从这个角度看,Web 容器就像是邮包收件人 ...
- 图解 Spring:HTTP 请求的处理流程与机制【3】
3. HTTP 请求在 Web 应用中的处理流程 在穿越了 Web 容器之后,HTTP 请求将被投送到 Web 应用,我们继续以 Tomcat 为例剖析后续流程.Web 容器与 Web 应用的衔接是通 ...
- 图解 Spring:HTTP 请求的处理流程与机制【4】
4. HTTP 请求在 Spring 框架中的处理流程 在穿越了 Web 容器和 Web 应用之后,HTTP 请求将被投送到 Spring 框架,我们继续剖析后续流程.Web 应用与 Spring M ...
- SpringMVC——接收请求参数和页面传参
Spring接收请求参数: 1.使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...
- Spring Controller 获取请求参数的几种方法
1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/ ...
- Struts系列笔记(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- spring MVC处理请求过程及配置详解
本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...
随机推荐
- JVM内存分配及String常用方法
一,JVM内存分配和常量池 在介绍String类之前,先来简单分析一下在JVM中,对内存的使用是如何进行分配的.如下图所示(注意:在jdk1.8之后便没有方法区了): 如上JVM将内存分为 ...
- Spring Cloud Alibaba | Nacos动态网关路由
Spring Cloud Alibaba | Gateway基于Nacos动态网关路由 本篇实战所使用Spring有关版本: SpringBoot:2.1.7.RELEASE Spring Cloud ...
- Docker笔记(九):网络管理
Docker的应用运行在容器中,其相互之间或与外部之间是如何通信的,涉及到哪些知识点,本文对相关内容进行整理.因网络这块牵涉的面较多,因此只从日常使用或理解的角度出发,过于专业的就不深入探讨了. 1. ...
- c++ uconcontext.h实现协程
目录 c++ uconcontext.h实现协程 什么是协程? ucontext.h库 库的使用示例 代码地址 c++ uconcontext.h实现协程 什么是协程? 协程是一种程序组件,是由子例程 ...
- lightoj 1245 Harmonic Number (II)(简单数论)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1245 题意:求f(n)=n/1+n/2.....n/n,其中n/i保留整数 显 ...
- python读取大文件只能读取部分的问题
最近准备重新研究一下推荐系统的东西,用到的数据集是Audioscrobbler音乐数据集.我用python处理数据集中artist_data.txt这个文件的时候,先读取每一行然后进行处理: with ...
- SQL Server2008 并发数测试
.Net连接SQL Server2008数据库并发数,在默认情况下是100: 上面日志记录当前连接数991,说实话第一次看到还真以为能达到如此高的并发,后头仔细一看其数值都是间隔10,所以算下来是10 ...
- Golang 数组 切片 字典 基本知识点
数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...
- 聊聊JavaScript异步中的macrotask和microtask
前言 首先来看一个JavaScript的代码片段: console.log(1); setTimeout(() => { console.log(2); Promise.resolve().th ...
- jar包运行出现中文乱码的问题
写了一个java Project,在eclipse里运行的时候不会出现乱码,但是用jar包运行的时候,出现了中文乱码. 我将它包装成了一个文件,这样就在没有jre的机器上也可以运行了.start.ba ...