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

日志中用的例子还是JavaWeb之Eclipse中使用Maven构建SpringMVC项目 ,其实看日志能看出好多信息,在日志中可以找到黑框的信息。一个是通过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; }

2.BeanNameUrlHandlerMapping

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

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<bean id="/hello" class="com.cyw.web.controller.HelloController"></bean>
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");
} }

3.SimpleUrlHandlerMapping

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

1.prop key

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.htm">helloController</prop>
</props>
</property>
</bean> <bean id="helloController"
class="com.cyw.web.controller.HelloController" />

2.value

    <bean id="helloController"
class="com.cyw.web.controller.HelloController" />
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/*/welcome.htm=helloController
</value>
</property>
</bean>

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

SpringMVC之HandlerMapping的使用的更多相关文章

  1. SpringMVC之HandlerMapping源码剖析(一)

    学习一种知识,我喜欢看看源码是怎么进行它们类之间的关系以及方法的调用,是怎么实现的.这样我才感觉踏实. 既然现在谈到HandlerMapping,我们先知道HandlerMapping的作用:Hand ...

  2. SpringMVC的HandlerMapping(处理器映射器)

    SpringMvc有四种HandlerMapping:BeanNameUrlHandlerMapping ,SimpleUrlHandlerMapping,ControllerClassNameHan ...

  3. Spring MVC源码分析(三):SpringMVC的HandlerMapping和HandlerAdapter的体系结构设计与实现

    概述在我的上一篇文章:Spring源码分析(三):DispatcherServlet的设计与实现中提到,DispatcherServlet在接收到客户端请求时,会遍历DispatcherServlet ...

  4. SpringMVC中HandlerMapping的三种配置方式

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-/ ...

  5. SpringMVC之HandlerMapping源码分析

    01.doDispatch方法中代码如下:HandlerExecutionChain mappedHandler=this.getHandler(processedRequest) 02.Dispat ...

  6. springmvc入门程序

    学习java有好几个月了,今天才想起每天学习的东西还是会忘记,所以准备开始每天把头一天学习的东西写在博客上,首先也不会写博客,文笔比较差劲,但是为了学习和巩固,也方便以后可以查看.温习. 昨天看了下s ...

  7. SpringMVC源码情操陶冶-AbstractHandlerMapping

    分析下springmvc的HandlerMapping映射的抽象类 初始化操作 通过initApplicationContext()方法进行初始化,其一般是由父类执行ApplicationContex ...

  8. springMVC学习三 注解开发环境搭建

    第一步:导入jar包 第二步:配置DispatcherServlet  前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...

  9. SpringMVC深度探险(二) —— SpringMVC概览

    对于任何事物的研究,总是由表及里.由浅入深地进行.在本系列的第二篇文章中,我们将通过不同的观察视角,对SpringMVC做一些概要性的分析,帮助大家了解SpringMVC的基本构成要素.SpringM ...

随机推荐

  1. 【NOI2002】银河英雄传说(并查集)

    [NOI2002]银河英雄传说 题面 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军 ...

  2. [USACO12FEB]Nearby Cows

    题意 给出一棵n个点的无根树,每个点有权值,问每个点向外不重复经过k条边的点权和 题解 设f[i][j]表示所有离i节点距离为j的点权和,v为它周围相邻的点,t为v的个数,则 j > 2 f[i ...

  3. [BZOJ3293] [Cqoi2011] 分金币 (贪心)

    Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...

  4. Spring Boot Security 基于角色的访问控制

    @Override protected void configure(HttpSecurity http) throws Exception { //如果配置为需要登录 if (needLogin) ...

  5. xx-net连接教程

    第一步:安装xx-net 在github上下载xx-net,网址 解压后点击运行start.bat文件,此时会提醒是不信任的文件,此时在系统偏好设置里的安全性与隐私去设置让它能打开. 第二步:安装Sw ...

  6. 动态增加表单元素并获取元素的text和value提交

    以上是效果图 需求是这样的: 专家设置好条件,然后设备检测到达到相应的条件之后,设备发出提醒给用户. 这就需要专家设置好能看懂的条件之后,然后把给专家看的,正常人能看懂的条件和发送的设备的,设备能够识 ...

  7. STM32F10x的启动汇编分析

    ;******************** (C) COPYRIGHT 2009 STMicroelectronics ********************;* File Name         ...

  8. Django 2.0 学习(04):Django数据库

    数据库设置/配置 打开mysite/settings.py,我们会发现Django是用的是默认的数据库SQLite,如下图所示: Django也是支持其它数据库的,比如PostgreSQL.MySQL ...

  9. java ssm框架实现分页功能 (oracle)

    java web 实现分页功能 使用框架:ssm 数据库:oracle 话说 oracle 的分页查询比 mysql 复杂多了,在这里简单谈一下: 查询 前十条数据: SELECT * FROM( S ...

  10. openstack安装系列问题:window7 64位安装的virtualBox 只能选择32位的系统安装不能选择64位的系统安装

    个人原创,转载请注明作者,出处,否则依法追究法律责任 2017-10-03-12:22:22 现象:window7 64位安装的virtualBox 只能选择32位的系统安装不能选择64位的系统安装 ...