SpringMVC学习(01)--前端控制器DispatcherServlet的初始化
来源:互联网 发布:dnf经常网络中断2017 编辑:程序博客网 时间:2024/04/29 13:58
一、DispatcherServlet的初始化过程
DispatcherServlet,也就是我们的前端控制器,它是SpringMVC的核心,那么,Spring容器在初始化DispatcherServlet的时候做了什么?
先看一下DispatcherServlet类的集成关系
1、调用init()方法
init()方法在在HttpServlet中定义,在HttpServletBean中有实现,
可以看到:
a、web.xml中配置的参数是通过HttpServletBean的内部类ServletConfigPropertyValues保存的
b、DispatcherServlet是通过BeanWrapper类构造完成的,并将上面的属性设置到DispatcherServlet中。为什么这样做,原因是,我们web.xml的配置
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springConfig/dispatcher-servlet.xml</param-value> </init-param></servlet><servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
contextConfigLocation参数是在子类FrameWorkServlet中定义的,HttpServletBean中没有这个属性的定义,第二,利用Spring的注入,使用setPropertyValues方法就可将contextConfigLocation属性设置到对应实例中,也就是以依赖注入的方式初始化属性。(BeanWrapper是Bean的包装,可以访问Bean的属性描述器,也可以对Bean的属性进行设置获取,通过BeanWrapper,IOC容器可以用统一的方式来访问Bean的属性)。
2、FrameWorkServlet.initServletBean()方法
由上面的代码,可以知道
a、FramWorkServlet的作用就是,将Servlet和Spring通过上下文联系起来
需要注意的是,注释中的根上下文指的是web.xml中配置的ContextLoaderListener监听器中根据contextConfigLocation路径生成的上下文。
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springConfig/applicationContext.xml</param-value> </context-param><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3、DispatcherServlet.onRefresh()
如上,此方法的作用就是初始化各个策略接口,比如
异常处理初始化initHandlerExceptionResolvers方法
视图处理初始化initViewResolvers方法
请求映射处理初始化initHandlerMappings方法
这些将在后面解释。
整个MVC的初始化工作就此完成,总结一个这几个接口/类的主要职责
1、HttpServletBean
初始化工作,将初始化参数,设置到Servlet中,比如,web.xml中servlet标签的init-para配置的参数。
2、FramWorkServlet
将Servlet与Spring容器相关联。也就是初始化属性webApplicationContext,这个参数代表的就是Spring容器的上下文,这个上下文有个父类的上下文,就是既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文
3、DispatcherServlet
初始化各个组件接口,比如请求映射,视图处理,异常处理。
- SpringMVC学习(01)--前端控制器DispatcherServlet的初始化
- SpringMVC前端控制器-----DispatcherServlet
- SpringMVC源码深度分析DispatcherServlet核心的控制器(初始化)
- SpringMVC源码深度分析DispatcherServlet核心的控制器(初始化)
- 前端控制器(dispatcherServlet)Servlet初始化异常
- SpringMVC学习笔记(一) DispatcherServlet初始化详解(应用上下文的初始化)
- springMvc DispatcherServlet的初始化过程
- 配置DispatcherServlet前端控制器
- springmvc学习2 dispatcherservlet 中初始化策略
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
- BZOJ 1007
- No service of type Factory available in ProjectScopeServices apply plugin: 'com.github.dcendents.an
- windows安装mysql到最后一步时卡死
- 【Android】SQLite数据库实例
- RabbitMQ与java、Spring结合实例详细讲解
- SpringMVC学习(01)--前端控制器DispatcherServlet的初始化
- Java进阶3 —— 类和接口设计原则
- AOP术语
- phpMyAdmin提示“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。”
- opengl中将三维坐标转换到屏幕坐标
- Spring MVC(九)常用注解及例子
- Error:Execution failed for task :app:transformClassesWithInstantRunForDebug解决方案
- 【SSH网上商城】——MySQL存入数据库乱码问题及解决方案
- C++截图并保存为文件