本文最后更新于 2023-08-16,文章内容可能已经过时,请注意内容的辨别。

springmvc核心应用

@RequestMapping下的方法的注意事项

返回值

可以为modelandview或者是String

modelandview上一章已经讲过不做赘述

接下来将String返回值的场景

package control;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class userController {

    @RequestMapping("jump")
    public String jump(){
        System.out.println("jump");
        //return "login";//逻辑视图名跳转地址 纯粹用于跳转页面,会拼接配置文件里设置的前缀和后缀

        return "redirect:login";//重定向 两次请求,地址变了,不会拼接配置文件里设置的前缀和后缀

       // return "forward:login";//转发一次请求地址不变,如果是forward,那么不会拼接配置文件里设置的前缀和后缀,直接原字符串转发资源

    }
    @RequestMapping("login")
    public String login() {

        System.out.println("controller");
        return "";
    }
}

参数

直接写接受参数,但是一般在参数前面加上@RequsetParam注解

 @RequestMapping("jump")
    public String jump(@RequestParam String name){
        System.out.println(name);
        //return "login";//逻辑视图名跳转地址 纯粹用于跳转页面,会拼接配置文件里设置的前缀和后缀

        return "redirect:login";//重定向 两次请求,地址变了,不会拼接配置文件里设置的前缀和后缀

       // return "forward:login";//转发一次请求地址不变,如果是forward,那么不会拼接配置文件里设置的前缀和后缀,直接原字符串转发资源

    }

局部异常处理

仅能处理指定Controller中的异常

@ExceptionHandler注解

一般不用

 @ExceptionHandler(value = {RuntimeException.class})
    public String ex(){
        xxxxx
        return "";
    }

全局异常处理

现在流行的就是在web.xml里去做。详细请看webxml配置

Spring 表单标签应用

必须在JSP页面的开头处声明taglib指令

<%@ taglib prefix="fm"     
         uri="http://www.springframework.org/tags/form" %>

Spring常用表单标签

名称说明
fm:form/渲染表单元素
fm:input/输入框组件标签
fm:password/密码框组件标签
fm:hidden/隐藏框组件标签
fm:textarea/多行输入框组件标签
fm:radiobutton/单选框组件标签
fm:checkbox/复选框组件标签
fm:select/下拉列表组件标签
fm:error/显示表单数据校验所对应的错误信息

了解一下,基本不用

Rest风格

简介

REST规范:

  • 强调HTTP应当以资源为中心,并且规范了资源URI的风格;
  • 规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;

遵循REST规范的网络应用将会获得下面好处:

  • URL具有很强可读性的,具有自描述性;
  • 资源描述与视图的松耦合;
  • 可提供的OpenAPI,便于第三方系统集成,提高互操作性;
  • 如果提供无状态的服务接口,可提高应用的水平扩展性;

@PathVariable与@RequestParam区别

@PathVariable主要用于接收http://host:port/path/{参数值}数据。

@RequestParam主要用于接收http://host:port/path?参数名=参数值数据,这里后面也可以不跟参数值。

现在一般不使用这种方式了

服务器端的数据校验

利用JSR 303实现

步骤

1.加入jar文件

hibernate-validator-4.3.2.Final.jar jboss-logging-3.1.0.CR2.jar validation-api-1.0.0.GA.jar

2.实体类添加注解

约束说明
@Null被注释的元素必须为****null
**@**NotNull被注释的元素必须不为****null
**@**AssertTrue被注释的元素必须为 true
@AssertFalse被注释的元素必须为 false
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期

3.在controller层改动

方法参数中的实体类上加入@Vaild注解,紧跟着后面加上BindingResult br

方法体中通过hasErrors()方法判断是否要执行下面的程序

注意:@Valid注解标示的参数后面,必须紧挨着一个BindingResult参数,否则Spring会在校验不通过时直接抛出异常