JavaEE主流框架总结~03.DispatcherServlet
JavaEE主流框架总结~03.DispatcherServlet上一期SpringMVC基本运行流程 步骤大概就是 : 客户端浏览器发送请求给DispatcherServlet主控制器,主控制器会根据请求通过调用HandlerMapping处理器映射器找到能够处理该请求的controller。找到controlle
JavaEE主流框架总结~03.DispatcherServlet
上一期
SpringMVC基本运行流程
步骤大概就是 : 客户端浏览器发送请求给DispatcherServlet主控制器,主控制器会根据请求通过调用HandlerMapping处理器映射器找到能够处理该请求的controller。找到controller后会把它交给HandlerAdapter处理器适配器进行执行。
执行完毕后就会返回一个ModelAndView对象给DispatcherServlet。DispatcherServlet再将ModelAndView交给ViewResolver视图解析器去做视图和模型的处理。
然后主控制器会把视图解析器所返回来的Model渲染给View视图,视图再以字符串的形式响应给浏览器。
DispatcherServlet
DispatcherServlet 继承了 FrameworkServlet。而FrameworkServlet 继承了 HttpServletBean。HttpServletBean 又继承了 HttpServlet
HttpServletBean
HttpServletBean 覆写了 init 方法,主要做一些初始化的工作,将 web.xml 中配置的参数设置到 Servlet 中。比如 servlet 标签的子标签 init-param 标签中配置的参数
ServletConfigPropertyValues
ServletConfigPropertyValues 是 HttpServletBean 的静态内部类。在其构造方法中通过传递的 ServletConfig 对象对 web.xml 文件中的 DispatcherServlet 节点中的参数进行解析处理。
init方法解析
现在回到刚刚的init方法
public final void init() throws ServletException {
// Set bean properties from init parameters.
PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
if (!pvs.isEmpty()) {
try {
//将HttpServletBean类型转换为BeanWrapper类型,从而能对init-parameter的值进行注入
BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
//注册自定义属性编辑器,遇到 Resource 类型的属性将会使用 ResourceEditor 进行解析
bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
//该方法并未做什么,为了留给子类覆盖。
initBeanWrapper(bw);
//设置 DispatcherServlet 属性
bw.setPropertyValues(pvs, true);
}
catch (BeansException ex) {
if (logger.isErrorEnabled()) {
logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
}
throw ex;
}
}
// 调用在 FrameworkServlet 中覆盖的该方法
initServletBean();
}
FrameworkServlet
将Servlet 上下文与 Spring 容器上下文关联。其实也就是初始化 FrameworkServlet 的属性 webApplicationContext , 这 个 属 性 代 表 SpringMVC 上 下 文 对 象 , 实 际 类 型ConfigurableWebApplicationContext。如果项目中用到 spring 了那么它有个父容器,既 web.xml 中配置的 ContextLoaderListener 监听器初始化的容器上下文
initWebApplicationContext()
createWebApplicationContext
这个方法主要作用是帮助创建SpringIOC容器。
configureAndRefreshWebApplicationContext
refresh()
解析配置文件初始化 SpringMVC 的 IOC 容器环境。并解析 springmvc 配置文件
DispatcherServlet
最后可以给程序加个断点Debug 走读看看 DispatcherServlet
更多推荐
所有评论(0)