(一)编写控制器。html
注:若是WEB-INF下存在index.jsp,”/”将会优先访问index.jsp,因此须要将index.jsp删除或重命名。java
对应的home.jspgit
游览器访问:web
(二)向视图传递模型正则表达式
在web应用中,咱们常须要把数据渲染到视图中,下面就看看如何用SpringMVC实现查询用户列表的功能。api
1.首先定义一个用户bean数组
2.定义一个获取用户列表的service,这里我直接建立一个List。jsp
3.控制器的编写。ide
在新的方法里,新加入了一个Model形参(其实就是Map,甚至能够把Model换成Map),这样,users就能够将产生的信息传递到视图。post
值得一提的是,在向Model添加数据时,若是不写key,模型的Key将会根据类型推断出(本例中,List<User>就是userList)。
不只如此,咱们甚至能够不使用Model,就像下面这样
由于没有指定请求路径,默认会是方法名“/allUser”。当处理器方法返回对象或集合时,这个值会放到模型中,模型的key会根据类型推断得出。而视图的名称会根据请求的路径推断得出“allUser”。
4.最后是视图的渲染
视图使用了EL表达式和jstl,若是是Servlet3.0话,EL默认是关闭的,须要加上<%@ page isELIgnored="false" %>来开启。
5.测试
3、对请求的处理
在Web中,客户端能够经过表单、url等方式,向服务端提交数据或查询数据。那么SpringMVC是如何对请求数据进行接受的呢?
(一)请求处理
在SpringMVC中,对于表单数据、Url参数均可以经过@RequestParam(“name”)进行接收。在下例中,须要在查询用户时进行分页,这时就须要传递两个参数:
max 从第几个用户开始
count 一次须要查询的用户数
对于这个两个值为空的状况,还须要设置一个默认的值。
(二)路径占位符
SpringMVC提供了路径占位符的功能,这样就可使Url变Restful
这样,当咱们Url为“users/13”时,SpringMVC就会自动截取13并赋值给userId。
对了,若是方法的参数名与占位符的名称一致的话,咱们还能够去掉@PathVariable的Value属性,就像下面这样。
4、对表单的处理
(一)表单数据处理
在上面的基础上,咱们添加一个注册功能,以此来讲明SpringMvc对表单的处理。
2.建立一个注册页面register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form method="post"> 用户名:<input type="text" name="name"/><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="提交"> </form> </body> </html>
这里的form标签没有设置action属性。在这种状况下,表单会提交到与展示这个页面相同的URL路径上,如本例的“/register”上。
3.在Controller添加接受表单数据的方法
此处有3点须要注意。
(1)由于表单提交为Post,因此须要在对应的controller也要设置接受post请求。
(2)咱们在方法中放了一个User对象,这个对象有id、name、password等属性,这些属性会被请求中同名的参数填充。
(3)当在返回的值前添加“redirect”前缀时,InternalResourceViewResolver视图解析器会将值解析成重定向规则,而不是视图的名称。
(二)校验表单
若是用户在提交表单时忘记填写name或者password,咱们目前的程序依然会正常执行,这显然是不合理的,
从Spring3.0开始,SpringMVC提供了对Java校验API的支持,咱们能够根据注解方便的进行表单校验。
下表列出了这些注解:
@AssertFalse |
所注解的元素必须为Boolean类型,而且为false |
@AssertTrue |
所注解的元素必须为Boolean类型,而且为true |
@DecimalMax |
所注解的元素必须为数字,而且值要小于等于给定的BigDecimalString值 |
@DecimalMin |
所注解的元素必须为数字,而且值要大于等于给定的BigDecimalString值 |
@Digits |
所注解的元素必须为数字,而且值必须为指定位数 |
@Future |
所注解的元素必须为一个未来的日期 |
@Max |
所注解的元素必须为数字,而且值要小于等于给定的 |
@Min |
所注解的元素必须为数字,而且值要大于等于给定的 |
@NotNull |
所注解的元素必须不为null |
@Null |
所注解的元素必须为null |
@Past |
所注解的元素必须为一个过去的日期 |
@Pattern |
所注解的元素必须匹配给定的正则表达式 |
@Size |
所注解的元素必须为String、集合或数组,且长度要符合给定的范围 |
下面咱们就把这些规则应用到咱们的User实体中
首先,须要添加Java校验APi的依赖
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
而后在须要验证的实体类添加对应的校验注解:
咱们须要在Controller方法启用校验功能它才会生效,以下所示