SpringMVC的Controller

(一)编写控制器。

 

注:如果WEB-INF下存在index.jsp,”/”将会优先访问index.jsp,所以需要将index.jsp删除或重命名。

对应的home.jsp

 

游览器访问:

 

(二)向视图传递模型

web应用中,我们常需要把数据渲染到视图中,下面就看看如何用SpringMVC实现查询用户列表的功能。

1.首先定义一个用户bean

 

2.定义一个获取用户列表的service,这里我直接创建一个List

 

3.控制器的编写。

在新的方法里,新加入了一个Model形参(其实就是Map,甚至可以把Model换成Map),这样,users就可以将产生的信息传递到视图。

 

值得一提的是,在向Model添加数据时,如果不写key,模型的Key将会根据类型推断出(本例中,List<User>就是userList)。

不仅如此,我们甚至可以不使用Model,就像下面这样

 

因为没有指定请求路径,默认会是方法名“/allUser”。当处理器方法返回对象或集合时,这个值会放到模型中,模型的key会根据类型推断得出。而视图的名称会根据请求的路径推断得出“allUser”。

4.最后是视图的渲染

视图使用了EL表达式和jstl,如果是Servlet3.0话,EL默认是关闭的,需要加上<%@ page isELIgnored="false" %>来开启。

 

5.测试

 

三、对请求的处理

Web中,客户端可以通过表单、url等方式,向服务端提交数据或查询数据。那么SpringMVC是如何对请求数据进行接受的呢?

(一)请求处理

SpringMVC中,对于表单数据、Url参数都可以通过@RequestParam(“name”)进行接收。在下例中,需要在查询用户时进行分页,这时就需要传递两个参数:

max 从第几个用户开始

count 一次需要查询的用户数

 

对于这个两个值为空的情况,还需要设置一个默认的值。

 

(二)路径占位符

SpringMVC提供了路径占位符的功能,这样就可以使Url变Restful

 

这样,当我们Url为“users/13”时,SpringMVC就会自动截取13并赋值给userId

对了,如果方法的参数名与占位符的名称一致的话,我们还可以去掉@PathVariableValue属性,就像下面这样。

四、对表单的处理

(一)表单数据处理

在上面的基础上,我们添加一个注册功能,以此来说明SpringMvc对表单的处理。

  1. Controller中添加访问注册页面的方法

 

  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>
View Code

这里的form标签没有设置action属性。在这种情况下,表单会提交到与展现这个页面相同的URL路径上,如本例的“/register”上。

  3.Controller添加接受表单数据的方法

 

此处有3点需要注意。

(1)因为表单提交为Post,所以需要在对应的controller也要设置接受post请求。

(2)我们在方法中放了一个User对象,这个对象有idnamepassword等属性,这些属性会被请求中同名的参数填充。

(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方法启用校验功能它才会生效,如下所示

 

原文地址:https://www.cnblogs.com/chenkeyu/p/7718250.html