SpringMVC框架笔记整理(二): 注解式控制器-URL路径映射

注解式控制器

通过@Controller@RequestMapping注解定义我们的处理器类

spring2.5需要通过处理器映射DefaultAnnotationHandlerMapping和处理器适配器
AnnotationMethodHandlerAdapter
来开启支持@Controller 和@RequestMapping注解的处理器。

<!-- Spring3.1之前的注解 HandlerMapping --> 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<!-- Spring3.1之前的注解 HandlerAdapter --> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

Spring3.1使用新的@Contoller和@RequestMapping注解支持类:
处理器映射RequestMappingHandlerMapping
和处理器适配器RequestMappingHandlerAdapter

<!-- Spring3.1开始的注解HandlerMapping -->
<bean
 class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!-- Spring3.1开始的注解 HandlerAdapter -->
<bean
 class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

Spring2.5+ 通过注解式处理器支持,通过@Controller@RequestMapping注解定义处理器类。

  • @Controller
    负责注册一个bean 到spring 上下文中, 用于标识是处理器类;

  • @RequestMapping
    注解为控制器指定可以处理哪些 URL 请求

  • @RequestParam
    在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法

  • @ModelAttribute
    Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了- @ModelAttribute 的方法,可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中

  • @InitBinder
    自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型

RestFul架构风格注解

  • @RequestBody
    该注解用于读取Request请求的body部分数据,使用系统默认配置的
    HttpMessageConverter进行解析,
    然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上

  • @ResponseBody
    该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区

  • @PathVariable
    绑定 URL 占位符到入参, 请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定

  • @ExceptionHandler
    注解到方法上,出现异常时会执行该方法

  • @ControllerAdvice
    使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

<!-- 自动注册基于注解风格的处理器需要的DefaultAnnotationHandlerMapping ,AnnotationMethodHandlerAdapter -->
<mvc:annotation-driven>

<!-- 注册自定义的处理器拦截器;SpringMVC没有总的拦截器,不能对所有的请求进行前后拦截 -->
<mvc:interceptors>

<mvc:interceptors>
<!-- <!-- 会为每一个HandlerMapping,注入一个拦截器 --> 
    <bean class="com.cpsh.inteceptor.mvc.MyInteceptor01" />
    <!-- 自定义匹配url的拦截器 -->
    <mvc:interceptor>
        <mvc:mapping path="/hello/*" />
        <bean class="com.cpsh.inteceptor.mvc.MyInteceptor02"/>
    </mvc:interceptor>
</mvc:interceptors>


<!-- 逻辑静态资源路径到物理静态资源路径的支;-->
<mvc:resources>

<mvc:resources mapping="/res/images/**" location="/common/images/" cache-period="31556926" />

DispatcherServlet的默认配置在DispatcherServlet.properties(和DispatcherServlet类在一个包下)中,而且是当Spring配置文件中没有指定配置时使用的默认策略

这里写图片描述

一个POJO类上放置@Controller或@RequestMapping,即可把一个POJO类变身为处理器; @RequestMapping(value = “/hello”) 请求URL(/hello) 到 处理器的功能处理方法的映射;

/**
    url = "${contextPath}/user/hello2"
*/
package cn.javass.chapter6.web.controller;
@Controller
@RequestMapping(value="/user") //①处理器的通用映射前缀
public class HelloWorldController2 {
    @RequestMapping(value = "/hello2") //②相对于①处的映射进行窄化
    public ModelAndView helloWorld() {
    //省略实现
    }
}

请求映射可以认为是方法级别的@RequestMapping继承类级别的@RequestMapping。

URL路径映射

普通URL路径映射

@RequestMapping(value={“/test1”, “/user/create”}):多个URL路径可以映射到同一个处理器的功能处理方法,组合使用是或的关系,即“/test1”或“/user/create”请求URL路径都可以映射到@RequestMapping指定的功能处理方法。

URI模板模式映射

@RequestMapping(value=”/users/{userId}”):{×××}占位符, 请求的URL可以是 “/users/123456”, 通过@PathVariable可以提取URI模板模式中的{×××}中的×××变量。

@RequestMapping(value=”/users/{userId}/topics/{topicId}”)

@RequestMapping(value=”/products/{categoryCode:\d+}-{pageNumber:\d+}”):可以匹配“/products/123-1, 通过@PathVariable提取模式中的{×××:正则表达式匹配的值}中的×××变量

正则表达式风格的URL路径映射是一种特殊的URI模板模式映射:

URI模板模式映射是{userId},不能指定模板变量的数据类型,如是数字还是字符串;

正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂

请求方法映射限定

@RequestMapping(value=”/methodOr”, method = {RequestMethod.POST, RequestMethod.GET}):即请求方法可以是 GET POST。

DispatcherServlet默认开启对 GET、POST、PUT、DELETE、HEAD的支持;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值