• 【SSM】SpringMVC系列——SpringMVC注解式开发1


    第2章 SpringMVC注解式开发

    2.1@RequestMapping定义请求规则

    1.1.1 指定模块名称

    • 通过@RequestMapping 注解可以定义处理器对于请求的映射规则。

    • 该注解可以注解在方法上,也可以注解在类上,但意义是不同的。

    • value 属性值常以“/”开始。

    • @RequestMapping 的 value 属性用于定义所匹配请求的 URI。

    • 一个@Controller 所注解的类中,可以定义多个处理器方法。

    • 不同的处理器方法所匹配的 URI 是不同的。这些不同的 URI 被指定在注解于方法之上的@RequestMapping 的value 属性中。但若这些请求具有相同的 URI 部分,则这些相同的 URI部分可以被抽取到注解在类之上的@RequestMapping 的 value 属性中。此时的这个 URI 表示模块(相当于包)的名称。URI 的请求是相对于 Web 的根目录。

    • 换个角度说,要访问处理器的指定方法,必须要在方法指定 URI 之前加上处理器类前定义的模块名称。

    示例:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1MWomNYS-1658935337946)(../../../../Pictures/Spring/wps5.jpg)]

    提取后

    @Controller 
    @RequestMapping("/zar")
    public class HelloSpringMvc { 
        //相当于一个控制器处理的方法
        @RequestMapping("/hello") 
        public String one() {
            return "main";
        }
        @RequestMapping("/two")
        public String two() { 
            return "main"; 
        } 
        //客户端的请求:
        // 
    // }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.1.1对请求提交方式的定义

    • 对于@RequestMapping,其有一个属性 method,用于对被注解方法所处理请求的提交方式进行限制,即只有满足该 method 属性指定的提交方式的请求,才会执行该被注解方法。
    • Method 属性的取值为 RequestMethod 枚举常量。常用的为 RequestMethod.GET 与 RequestMethod.POST,分别表示提交方式的匹配规则为 GET 与 POST 提交。
    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public String one() { 
        return "main";
    }
    
    • 1
    • 2
    • 3
    • 4

    以上处理器方法只能处理 POST 方式提交的请求。

    客户端浏览器常用的请求方式,及其提交方式有以下几种:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s1bpzH4X-1658935337947)(../../../../Pictures/Spring/wps6.jpg)]

    也就是说,只要指定了处理器方法匹配的请求提交方式为 POST,则相当于指定了请求发送的方式:要么使用表单请求,要么使用 AJAX 请求。其它请求方式被禁用。

    当然,若不指定 method 属性,则无论是 GET 还是 POST 提交方式,均可匹配。即对于请求的提交方式无要求。

    (1) post提交方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2sz14iw-1658935337948)(../../../../Pictures/Spring/wps7.jpg)]

    (2)get提交方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anq1DpGv-1658935337948)(../../../../Pictures/Spring/wps8.jpg)]

    2.2 五种数据提交的方式

    前四种数据注入的方式,会自动进行类型转换。但无法自动转换日期类型。

    (1)单个数据注入

    在方法中声明一个和表单提交的参数名称相同的参数,由框架按照名称直接注入。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyoMZBKh-1658935337948)(../../../../Pictures/Spring/wps9.jpg)]

    (2)对象封装注入

    在方法中声明一个自定义的实体类参数,框架调用实体类中相应的setter方法注入属性值,只要保证实体类中成员变量的名称与提交请求的name属性值一致即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twqOep6p-1658935337948)(../../../../Pictures/Spring/wps10.jpg)]

    (3)动态占位符提交(仅用于超链接)

    使用框架提供的一个注解@PathVariable,将请求url中的值作为参数进行提取,只能是超链接。restful风格下的数据提取方式。restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KuI8cIUM-1658935337949)(../../../../Pictures/Spring/wps11.jpg)]

    (4)请求参数名称与形参名称不一致

    请求与形参中的名字不对应,可以使用

    @RequestParam(value="name1",required=true)String namea
    
    • 1

    来进行参数名称绑定。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V3dbxazs-1658935337949)(../../../../Pictures/Spring/wps12.jpg)]

    (5)使用HttpServletRequest对象提取

    在方法参数中声明一个request对象,使用request的getParameter()获取表单提交的数据,这样得到的数据还要手工进行数据类型的转换。

    public String five(HttpServletRequest request){ 
        int age=new Integer(request.getParameter("stuage")); 
        String name=request.getParameter("stuname"); 
        System.out.println(age+"*********"+name);
        return "main";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.3请求参数中文乱码解决

    对于前面所接收的请求参数,若含有中文,则会出现中文乱码问题。Spring 对于请求参数中的中文乱码问题,给出了专门的字符集过滤器: spring-web-5.2.5.RELEASE.jar 的org.springframework.web.filter 包下的 CharacterEncodingFilter 类。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5Otpgbl-1658935337949)(../../../../Pictures/Spring/wps13.jpg)]

    (1)解决方案

    在 web.xml 中注册字符集过滤器,即可解决 Spring 的请求参数的中文乱码问题。不过,最好将该过滤器注册在其它过滤器之前。因为过滤器的执行是按照其注册顺序进行的。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbnEraw0-1658935337949)(../../../../Pictures/Spring/wps14.jpg)]

    (2)源码分析

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sCdufXk-1658935337950)(../../../../Pictures/Spring/wps15.jpg)]

  • 相关阅读:
    ik分词器是什么,有那些配置? ik_smart和ik_max_word的两个分词算法有何区别?
    python实现中缀表达式转后缀表达式
    HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现
    积分商城游戏设置的基本要点
    20个短视频素材网站
    spring cloud config 占位符 application用法
    live555 音视频处理相关文档解读,
    低代码没有技术含量?来扒扒你所不了解的低代码
    【golang】interface 如此动人,却被遗忘
    深信服面经——技服岗位
  • 原文地址:https://blog.csdn.net/m0_61163395/article/details/126025306