Spring MVC 之 HandlerMapping

本文介绍了Spring MVC框架中HandlerMapping接口及其子类的功能与使用方式,包括RequestMappingHandlerMapping、BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping等,展示了如何通过这些组件实现请求与处理程序之间的映射。

HanderMapping的作用 

HandlerMapping类定义了request与handler之间映射关系。查找request对应的handler是SpringMVC DispatcherServlet处理request的第一步。通过分析request的url和消息头headers查找对应的handler对象handlerExecutionChain ,然后DispatcherServlet会执行handlerExecutionChain 中包含的处理器方法handler method和一系列前置和后置的方法拦截器handler Interceptor。

public interface HandlerMapping {
      HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}

HandlerMapping的子类

 

  • RequestMappingHandlerMapping

RequestMappingHandlerMapping-根据@Controller注解的类中的类级别和方法级别的@RequestMapping注解来创建定义了request和handler method之间映射关系的RequestMappingInfo实例。基本用法如下:

@Controller
public class WelcomeController 
{
    @RequestMapping("/welcome")
    protected ModelAndView someMethod() throws Exception {
        System.out.println("Inside WelcomeController");

        ModelAndView model = new ModelAndView("welcome");
        model.addObject("message", "JavaInterviewPoint");

        return model;
    }

}
  • BeanNameUrlHandlerMapping

BeanNameUrlHandlerMapping-从URL到以斜杠/开头的bean名称的映射的HandlerMapping接口的实现类,与Struts中URL映射到action名称的方式类似。其特点是,每次只能注册一个url与bean的映射关系,如果将多个url映射到一个bean上,需要多次注册。基本用法如下:

//用法1,直接在@Controller注解上定义别名,注册映射/welcome->WelcomeController
@Controller("/welcome")
public class WelcomeController  extends AbstractController
{
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
                                                 HttpServletResponse response) throws Exception {
       
        ModelAndView model = new ModelAndView("welcome");
        model.addObject("message", "JavaInterviewPoint");

        return model;
    }
}
//用法2,在@Configuration注解类中定义指定别名的Bean,注册映射/welcome1、/welcome2->WelcomeController
@Configuration
public class BeanNameUrlHandlerMappingConfig {
    @Bean
    BeanNameUrlHandlerMapping beanNameUrlHandlerMapping() {
        return new BeanNameUrlHandlerMapping();
    }
 
    @Bean({"/welcome1","/welcome2"})
    public WelcomeController welcome() {
        return new WelcomeController();
    }
}
  • SimpleUrlHandlerMapping

SimpleUrlHandlerMapping-从URL到request处理程序bean的映射的HandlerMapping接口的实现类。支持映射到bean实例以及映射到bean名称。

SimpleUrlHandlerMapping与BeanNameUrlHandlerMapping类似,都是基于url和bean映射关系,但是SimpleUrlHandlerMapping更灵活。其setUrlMap方法支持一次注册多个Url映射关系。

//注册映射/welcome1、/welcome2->WelcomeController
@Configuration
public class UrlHandlerMappingConfig {
 @Bean
    SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
        Map<String, Object> urlMap = new LinkedHashMap<String, Object>();
        urlMap.put("welcome1","welcomeController");
        urlMap.put("welcome2","welcomeController");
        SimpleUrlHandlerMapping handlerMapping=new SimpleUrlHandlerMapping();
        handlerMapping.setUrlMap(urlMap);
        return handlerMapping;
    }

    @Bean WelcomeController welcomeController(){
        return new WelcomeController();
    }
 
     
}

转载于:https://my.oschina.net/yqz/blog/1623703

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值