SpringMVC之HandlerMapping的使用
上篇博客在了解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的使用的更多相关文章
- SpringMVC之HandlerMapping源码剖析(一)
学习一种知识,我喜欢看看源码是怎么进行它们类之间的关系以及方法的调用,是怎么实现的.这样我才感觉踏实. 既然现在谈到HandlerMapping,我们先知道HandlerMapping的作用:Hand ...
- SpringMVC的HandlerMapping(处理器映射器)
SpringMvc有四种HandlerMapping:BeanNameUrlHandlerMapping ,SimpleUrlHandlerMapping,ControllerClassNameHan ...
- Spring MVC源码分析(三):SpringMVC的HandlerMapping和HandlerAdapter的体系结构设计与实现
概述在我的上一篇文章:Spring源码分析(三):DispatcherServlet的设计与实现中提到,DispatcherServlet在接收到客户端请求时,会遍历DispatcherServlet ...
- SpringMVC中HandlerMapping的三种配置方式
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-/ ...
- SpringMVC之HandlerMapping源码分析
01.doDispatch方法中代码如下:HandlerExecutionChain mappedHandler=this.getHandler(processedRequest) 02.Dispat ...
- springmvc入门程序
学习java有好几个月了,今天才想起每天学习的东西还是会忘记,所以准备开始每天把头一天学习的东西写在博客上,首先也不会写博客,文笔比较差劲,但是为了学习和巩固,也方便以后可以查看.温习. 昨天看了下s ...
- SpringMVC源码情操陶冶-AbstractHandlerMapping
分析下springmvc的HandlerMapping映射的抽象类 初始化操作 通过initApplicationContext()方法进行初始化,其一般是由父类执行ApplicationContex ...
- springMVC学习三 注解开发环境搭建
第一步:导入jar包 第二步:配置DispatcherServlet 前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...
- SpringMVC深度探险(二) —— SpringMVC概览
对于任何事物的研究,总是由表及里.由浅入深地进行.在本系列的第二篇文章中,我们将通过不同的观察视角,对SpringMVC做一些概要性的分析,帮助大家了解SpringMVC的基本构成要素.SpringM ...
随机推荐
- 【洛谷T7153】(考试) 中位数
题目描述 给定 n 个数 a1, a2, ..., an,求这 n 个数两两的差值(共 n(n−1) 2 个)的中位数. 输入格式: 第一行一个正整数 n,表示数的个数. 接下来一行 n 个正整数,分 ...
- js获取本机的网络IP地址
JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...
- NancyFX 第五章 Nancy 路由
在Nancy中,最为神奇的莫过于路由了,定义路由模块是构成Nancy应用的骨架.在Nancy中定义路由,和在 ASP.NET MVC那些类似的框架中有着非常大的区别. 以 ASP.NET MVC 为例 ...
- PHP实现发送模板消息到微信公众号
简述:在这里会具体讲述到如何实现:如何通过后台的代码来实现发送模板消息到已经关注了"心想"公众号的用户. (本人新手,目前实习中,我的所有文档都是在自己开发过程中的记录,有些言语跟 ...
- IPFS: NAT traversal(NAT穿越)
IPFS是一个p2p网络,那么一定绕不开的一个问题就是NAT穿越.之前的文章里面也提到过IPFS网络连通性使用的ICE NAT穿越框架,本文简单介绍一下什么是NAT. 为什么有NAT技术? NAT ...
- PHP7变量的内部实现
PHP7变量的内部实现 受篇幅限制,这篇文章将分为两个部分.本部分会讲解PHP5和PHP7在zval结构体的差异,同时也会讨论引用的实现.第二部分会深入探究一些数据类型如string和对象的实现. P ...
- LNMP+FARM+DNS
LNMP 1.安装Nginx前的环境. # yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel 2.添加www系统用户,在 ...
- Javascripte的原型链之基础讲解
一.函数对象与普通对象 var o1 = {}; var o2 =new Object(); var o3 = new f1(); function f1(){}; var f2 = function ...
- 【Android】你知道还可以通过 View.animate() 来实现动画么
这次想来讲讲 View.animate(),这是一种超好用的动画实现方式,用这种方式来实现常用的动画效果非常方便,但在某些场景下会有一个坑,所以这次就来梳理一下它的原理. 基础 首先,先来看一段代码: ...
- java-线程实现方式
实现方式: 1,继承Thread类 public class ThreadTest extends Thread { @Override public void run() { System.out. ...