zoukankan      html  css  js  c++  java
  • Spring—请求映射之URL路径映射

    Spring2.5引入注解式处理器支持,通过@Controller 和 @RequestMapping注解定义我们的处理器类。
    并且提供了一组强大的注解:
    需要通过处理器映射DefaultAnnotationHandlerMapping和处理器适配器
    AnnotationMethodHandlerAdapter来开启支持@Controller 和 @RequestMapping注解的处理器。
    @Controller:用于标识是处理器类;
    @RequestMapping:请求到处理器功能方法的映射规则;
    @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
    @ModelAttribute:请求参数到命令对象的绑定;
    @SessionAttributes:用于声明session级别存储的属性,放置在处理器类上,通常列出
    模型属性(如@ModelAttribute)对应的名称,则这些属性会透明的保存到session中;
    @InitBinder:自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;

    Spring3.0引入RESTful架构风格支持(通过@PathVariable注解和一些其他特性支持),且又引入了
    更多的注解支持:
    @CookieValue:cookie数据到处理器功能处理方法的方法参数上的绑定;
    @RequestHeader:请求头(header)数据到处理器功能处理方法的方法参数上的绑定;
    @RequestBody:请求的body体的绑定(通过HttpMessageConverter进行类型转换);
    @ResponseBody:处理器功能处理方法的返回值作为响应体(通过HttpMessageConverter进行类型转换);
    @ResponseStatus:定义处理器功能处理方法/异常处理器返回的状态码和原因;
    @ExceptionHandler:注解式声明异常处理器;
    @PathVariable:请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定,
    从而支持RESTful架构风格的URI;

    Spring3.1使用新的HandlerMapping 和 HandlerAdapter来支持@Contoller和@RequestMapping注解处理器。
    新的@Contoller和@RequestMapping注解支持类:处理器映射RequestMappingHandlerMapping和处理器适配器RequestMappingHandlerAdapter组合来代替Spring2.5开始的处理器映射
    DefaultAnnotationHandlerMapping和处理器适配器AnnotationMethodHandlerAdapter,提供更多的扩展点。

    @Controller // 或 @RequestMapping //将一个POJO类声明为处理器
    public class HelloWorldController {
    @RequestMapping(value = "/hello") //请求URL到处理器功能处理方法的映射
    public ModelAndView helloWorld() {
    //1、收集参数
    //2、绑定参数到命令对象
    //3、调用业务对象
    //4、选择下一个页面
    ModelAndView mv = new ModelAndView();
    //添加模型数据 可以是任意的POJO对象
    mv.addObject("message", "Hello World!");
    //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
    mv.setViewName("hello");
    return mv; //模型数据和逻辑视图名
    }
    }

    http请求信息包含六部分信息:
    ①请求方法,如GET或POST,表示提交的方式;
    ②URL,请求的地址信息;
    ③协议及版本;
    ④请求头信息(包括Cookie信息);
    ⑤回车换行(CRLF);
    ⑥请求内容区(即请求的内容或数据),如表单提交时的参数数据、URL请求参数(?abc=123 ?后边的)等。

    处理器的功能处理方法的映射,因此请求的映射分为如下几种:
    URL路径映射:使用URL映射请求到处理器的功能处理方法;
    请求方法映射限定:如限定功能处理方法只处理GET请求;
    请求参数映射限定:如限定只处理包含“abc”请求参数的请求;
    请求头映射限定:如限定只处理“Accept=application/json”的请求。

    普通URL路径映射
    @RequestMapping(value={"/test1", "/user/create"}):多个URL路径可以映射到同一个处理器的功能处理方法。
    URI模板模式映射
    @RequestMapping(value="/users/{userId}"):{×××}占位符, 请求的URL可以是 “/users/123456”或“/users/abcd”,通过@PathVariable可以提取URI模板模式中的{×××}中的×××变量。
    @RequestMapping(value="/users/{userId}/create"):这样也是可以的,请求的URL可以是“/users/123/create”。
    @RequestMapping(value="/users/{userId}/topics/{topicId}"):这样也是可以的,请求的URL可以是“/users/123/topics/123”。
    Ant风格的URL路径映射
    @RequestMapping(value="/users/**"):可以匹配“/users/abc/abc”,但“/users/123”将会被【URI模板模式映射中的“/users/{userId}”模式优先映射到】@RequestMapping(value="/product?"):可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;
    @RequestMapping(value="/product*"):可匹配“/productabc”或“/product”,但不匹配“/productabc/abc”;
    @RequestMapping(value="/product/*"):可匹配“/product/abc”,但不匹配“/productabc”;
    @RequestMapping(value="/products/**/{productId}"):可匹配“/products/abc/abc/123”或“/products/123”,也就是Ant风格和URI模板变量风格可混用;

    正则表达式风格的URL路径映射
    从Spring3.0开始支持正则表达式风格的URL路径映射,格式为{变量名:正则表达式},通过@PathVariable提取模式中的{×××:正则表达式匹配的值}中的×××变量了。
    @RequestMapping(value="/products/{categoryCode:\d+}-{pageNumber:\d+}"):可以匹配“/products/123-1”,但不能匹配“/products/abc-1”,这样可以设计更加严格的规则。
    正则表达式风格的URL路径映射是一种特殊的URI模板模式映射:
    URI模板模式映射是{userId},不能指定模板变量的数据类型,如是数字还是字符串;
    正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂。

    组合使用是“或”的关系
    如 @RequestMapping(value={"/test1", "/user/create"}) 组合使用是或的关系,即“/test1”或“/user/create”请求URL路径都可以映射到@RequestMapping指定的功能处理方法。
    以上URL映射的测试类为:cn.javass.chapter6.web.controller.mapping.MappingController.java。
    Spring WebMVC不仅仅提供URL路径映射,还提供了其他强大的映射规则。

  • 相关阅读:
    CSS笔记
    EasyUI笔记
    EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
    2019.10.12解题报告
    %lld 和 %I64d
    关于kmp算法
    洛谷p2370yyy2015c01的U盘题解
    About me & 友链
    关于Tarjan
    洛谷p3398仓鼠找suger题解
  • 原文地址:https://www.cnblogs.com/Jsonlu/p/4849183.html
Copyright © 2011-2022 走看看