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

     

  • 相关阅读:
    python爬取图片
    TensorFlow学习系列(四):minist实例--卷积神经网络
    TensorFlow学习系列(四):minist实例--用简单的神经网络训练和测试
    TensorFlow学习系列(三):实例数据下载和读取
    TensorFlow学习系列(二):入门起步
    TensorFlow学习系列(一):安装调试
    Anaconda安装
    screen的安装和使用
    YII 使用mysql语句查询
    YII 返回值为JSON格式
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/7718250.html
Copyright © 2020-2023  润新知