SpringMVC
1 SpringMVC的0xml配置原理
Servlet 3.0 版本提出了新规范SPI,通过根目录的 META-INF/services/javax.servlet.ServletContainerInitializer目录下建立一个文件
Spring 会在onStartup 启动传入一个Set集合,整合所有的需要被tomcat调用的方法
web容器(Tomcat、JBOSS、Jetty...)
ServletContext(web上下文) 支持web组件注册
web组件: filter、servlet、listener
DispatcherServlet 注册进servletContext
2 Spring MVC的执行流程
分析源码阅读流程:分析程序入口 DispatcherServlet继承自Servlet类 DispatcherServlet继承自FrameworkServlet 会调用doGet、doPost 发现会调用doService在doService中调用doDispatch() 程序入口为doDispatch()
DispatcherServlet拦截请求 :doDispatch() --->
-
checkMultipart(request) 检查是否有无附带文件
-
getHandler(processRequest) 分发请求
- Spring 扫描请求 定义Map集合
- 拿到所有加了@Controller注解的类
- 反射遍历类里边所有的方法对象
- 判断方法是否加了@RequestMapping注解
- 把@RequestMapping注解的value 作为map集合的Key给put进去
- 根据用户发送的请求,拿到请求中的URI (url:http://localhost:8080/test.do uri:/test.do )
- 使用uri作为map的Key 去map中获取对应的方法
-
HaddlerMapping 处理映射器 获取对应请求
-
HaddlerAdapter 适配器
controller 定义
二种类型
- BeanName
- @Controller
三种实现
- @Controller
- implements HttpRequestHandler
- implements Controllter
-
调用Handler
获取参数 argumentResolvers 参数处理器 判断需要调用哪个参数处理器
自定义参数处理器
-
返回ModeAndView对象
-
ViewResolver视图解析器
DispatcherServlet调用ViewResolver通过视图名称查找视图 返回正确的视图
-
进行视图渲染