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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐