1.传统xml配置方式

web.xml里面配置:org.springframework.web.servlet.DispatcherServlet,处理项目的spring配置文件:classpath*:wly-servlet.xml

2.DispatcherServlet

## doService
暴露DispatcherServlet中从request获取的属性,并且委派给doDispatch处理 ## doDispatch
## step1:
// Determine handler for the current request.
mappedHandler = getHandler(processedRequest);

3.wly-servlet.xml

在这个配置文件里面配置了很多由spring负责创建的bean实例:包括controller和servlet类
## <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
```
处理bean.name和url映射关系,将url交给
//handlerName:"/wang"
//resolvedHandler:com.wang.controller.WangController@4e2c46ed
resolvedHandler = getApplicationContext().getBean(handlerName);
...
this.handlerMap.put(urlPath, resolvedHandler);//其实就是把url和bean的映射关系放到了一个map里面
```
##<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
```
handler包装为适配器
//根据当前handler获取handlerexecuteChain //根据handler的类型获取handler的适配器
protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
for (HandlerAdapter ha : this.handlerAdapters) {
if (logger.isTraceEnabled()) {
logger.trace("Testing handler adapter [" + ha + "]");
}
//根据handler instanceof Controller判断使用什么适配器类代替当前handler
if (ha.supports(handler)) {
return ha;
}
}
throw new ServletException("No adapter for handler [" + handler +
"]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler");
} 。。。
//ha.supports(handler)方法
@Override
public boolean supports(Object handler) {
return (handler instanceof Controller);
} // 实际调用对应handler的方法
mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); //执行完具体的handler方法后,通过拦截器处理视图信息:
applyDefaultViewName(processedRequest, mv);//设置modelview对象
//通过
mappedHandler.applyPostHandle(processedRequest, response, mv);
[org.springframework.web.servlet.handler.AbstractUrlHandlerMapping$PathExposingHandlerInterceptor@46dafc9f,
org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor@1faa1cba]
``` ## <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
视图处理器,将逻辑视图转转成物理视图

spring mvc源码分析的更多相关文章

  1. 精尽Spring MVC源码分析 - 寻找遗失的 web.xml

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  2. 精尽Spring MVC源码分析 - 调式环境搭建

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  3. 精尽Spring MVC源码分析 - 文章导读

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  4. 精尽Spring MVC源码分析 - WebApplicationContext 容器的初始化

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  5. 精尽Spring MVC源码分析 - 一个请求的旅行过程

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  6. 精尽Spring MVC源码分析 - MultipartResolver 组件

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  7. 精尽Spring MVC源码分析 - HandlerMapping 组件(一)之 AbstractHandlerMapping

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  8. 精尽Spring MVC源码分析 - HandlerMapping 组件(二)之 HandlerInterceptor 拦截器

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  9. 精尽Spring MVC源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  10. 精尽Spring MVC源码分析 - HandlerMapping 组件(四)之 AbstractUrlHandlerMapping

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

随机推荐

  1. CF570E Pig and Palindromes

    完全不会这种类型的$dp$啊…… 考虑回文串一定是可以拆分成(偶数个字母 + 偶数个字母)或者(偶数个字母 + 一个字母 +偶数个字母),两边的偶数个字母其实是完全对称的.因为这道题回文串的长度是给定 ...

  2. linux环境启动django项目

    BBS部署步骤 安装python3.6(如已安装无需重复) install python3.6 把BBS项目传上来 rz 选择文件 BBS.tar 解压文件 tar -xvf BBS.tar 安装my ...

  3. springMvc参数传递的方法

    package cn.edu.hj.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; im ...

  4. Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-3.1.xsd)

    解决方法: 将 Preferences > XML > XML Files > Validation中"Honour all XML schema locations&qu ...

  5. jquery文件上传控件 Uploadify 可以和ajax交互

    http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html  原网址 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

  6. C#去边框以及无边框窗体移动

    1.去边框  : 1) 选中要去除边框的窗体,按F4调出窗体属性. 2)在属性框中找到FormBorderStyle选择none. 2.去掉边框后实现对窗口程序的拖动 1)双击窗体,进入程序设计界面 ...

  7. ASP.NET Core 中的中间件

    前言   由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...

  8. 用LINQ获取XML节点数据

    Insus.NET想对<从字符串中获取XML节点数据> http://www.cnblogs.com/insus/p/3299052.html 这篇改写为使用LINQ的方法实现.LINQ中 ...

  9. 微信小程序小结(4) -- 分包加载及小程序间跳转

    分包加载 某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载(主要是空间不够用,哈哈~). 在构建小程序分包项目时,构建会输出一个或多个功能的分包,其中 ...

  10. [SinGuLaRiTy] NOIP膜你赛-Day 1

    [SinGuLRiTy-1022] Copyright (c) SinGuLaRITy 2017. All Rights Reserved.  对于所有题目:Time Limit:1s || Memo ...