Spring MVC入口Servlet原理简介说明(HttpServletBean,FrameworkServlet,DispatcherServlet)
下文笔者讲述Spring MVC中Servlet的转发原理,如下所示:
各类的功能,如下所示:
并留出空方法initFrameworkServlet()供子类扩展
initWebApplicationContext方法的具体实现逻辑:
FrameworkServlet中initWebApplicationContext源码 FrameworkServlet中initWebApplicationContext源码
web.xml配置
initStrategies方法内部会初始化各个策略接口的实现类,包括以下接口
Spring MVC中DispatcherServlet前端控制器是web服务器的入口,它的继承关系,如下图所示:
各类的功能,如下所示:
- HttpServletBean
主要做一些初始化的工作,
将web.xml中配置的参数设置到Servlet中
如servlet标签的子标签init-param标签中配置的参数 - FrameworkServlet
将Servlet与Spring容器上下文关联
其实也就是初始化FrameworkServlet的属性webApplicationContext
这个属性代表SpringMVC上下文
它有个父类上下文
既web.xml中配置的ContextLoaderlistener监听器初始化的容器上下文 - DispatcherServlet
初始化各个功能的实现类
如异常处理、视图处理、请求映射处理等
HttpSerlvetBean初始化
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>
覆写initServletBean
FrameworkServlet继承自HttpServletBean,该类覆写的initServletBean方法并留出空方法initFrameworkServlet()供子类扩展
initWebApplicationContext方法的具体实现逻辑:
FrameworkServlet中initWebApplicationContext源码 FrameworkServlet中initWebApplicationContext源码
web.xml配置
<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> web.xml中配置的ContextLoaderListener监听器中根据contextConfigLocation路径生成的上下文。
覆写onRefresh
DispatcherServlet覆写了FrameworkServlet中的onRefresh方法DispatcherServlet覆写onRefresh
initStrategies方法内部会初始化各个策略接口的实现类,包括以下接口
- 异常处理初始化initHandlerExceptionResolvers方法:SpringMVC异常处理机制详解
- 视图处理初始化initViewResolvers方法:SpringMVC视图机制详解
- 请求映射处理初始化initHandlerMappings方法:详解SpringMVC请求的时候是如何找到正确的Controller
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。