博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC之HandlerMapping的使用
阅读量:6586 次
发布时间:2019-06-24

本文共 2619 字,大约阅读时间需要 8 分钟。

上篇博客在了解SpringMVC的工作流程时留了一些疑问,今天先学习下HandlerMapping,在HandlerMapping中可以通过HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;方法来获取HandlerExecutionChain,那它到底是什么东西呢?我们可以先看下日志.

 日志中用的例子还是 ,其实看日志能看出好多信息,在日志中可以找到黑框的信息。一个是通过AbstractHandlerMethodMapping将{[/index/hello.do]}映射到com.cyw.web.controller.IndexController.getTest方法上,第二个是通过AbstractUrlHandlerMapping将URL path [/**] 映射到handler 'org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler。这只是列了两种映射方法,我们可以查看api文档来找(百度出来好多教程,可能是版本原因,在找对应的类时有的找不到,还是看api文档准确一些)。

 从api可以看到,实现HandlerMapping接口的还挺多的,大部分的几个mapping都能在org.springframework.web.servlet.handler这个包中找到.如果不知道这些都是在哪使用可以直接选中右键->references->project,查看哪些地方有引用到它,至于这几个类之间的关系,可以看api介绍.下图是我自己画的UML类图(UNL好久没看了,今天在回来的路上看xml的内容突然意识到好像这博客画的有问题,回来又重新画了一个,箭头方向反了,不知道这个对不对,也希望不要误人子弟).

 

 下面就分别介绍这几个mapping的使用。

 1.RequestMappingHandlerMapping

在上面的日志图中的第一个黑框中可以看到是通过AbstractHandlerMethodMapping来映射的,RequestMappingInfoHandlerMapping和AbstractHandlerMethodMapping都是抽象类,实际上最终还是用的RequestMappingHandlerMapping,它是用作使用注解的时候,通过注解将url映射到对应的Controller上。

@Controller@RequestMapping("/index")public class IndexController {    @RequestMapping(value="/index.do")        public ModelAndView getTest(HttpServletRequest request,HttpServletResponse response){        ModelAndView modelAndView = new ModelAndView("Index");        String name=request.getQueryString();        System.out.println(name);        request.setAttribute("name", name+"abc");        return modelAndView;                }
View Code

2.BeanNameUrlHandlerMapping

需要在spring-mvc.xml中配置BeanNameUrlHandlerMapping以及bean对应的Controller.Controller要实现AbstractController,通过bean将url映射的对应的Controller.

package com.cyw.web.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.AbstractController;public class HelloController extends AbstractController {    @Override    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)            throws Exception {                return new ModelAndView("Hello");    }}
View Code

3.SimpleUrlHandlerMapping

顾名思义就是通过url直接映射。它有两种配置方式,还是用上面的hello.它通过url直接映射到对应的Controller上。

1.prop key

helloController

2.value

/*/welcome.htm=helloController

上面只是简单了解了HandlerMapping的使用,其实里面还有好多,比如这几个mapping是怎么查找的,这个需要读源码来进一步学习。

转载地址:http://bihno.baihongyu.com/

你可能感兴趣的文章
绕开“陷阱“,阿里专家带你深入理解C++对象模型的特殊之处
查看>>
Apple Watch新玩法:手势操控无人机
查看>>
ElasticSearch
查看>>
2018“一带一路”阿里巴巴诸神之战全球创客大赛全面启动
查看>>
快轮天才发明家刘峰,上榜福布斯2017年亚洲人物
查看>>
9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...
查看>>
物联网安全形势严峻——除严加管控外别无选择
查看>>
深度学习机器72小时自学国际象棋达到大师水平
查看>>
香港设计师带来仿生机器人,其身体 70% 构造均由3D打印完成
查看>>
探测能源、跨洲安全通信……你所想不到的量子技术!
查看>>
bootstrap16-上下文表格布局
查看>>
不规则物体形状匹配综述
查看>>
自动化设计-框架介绍 TestCase
查看>>
CJ看showgirl已经out!VR体验才是王道
查看>>
postgresql 数组类型
查看>>
Vue+Webpack常见问题(持续更新)
查看>>
栈与递归的实现
查看>>
Manually Summarizing EIGRP Routes
查看>>
spring boot 1.5.4 整合webService(十五)
查看>>
modsecurity(尚不完善)
查看>>