昨天讲到DispatcherServlet因为继承了FrameworkServlet、HttpServletBean、HttpServlet,因此可以通过Servlet的API对请求进行一些处理与响应。
DispatcherServlet的初始化在ContextLoaderListener完成对根上下文的初始化之后才会执行。
具体的初始化时间取决于web.xml中servlet关于load-on-startup的配置。
当load-on-startup为负数或者没有配置时,在第一次request请求时加载;
当load-on-startup不为负数时,代表DispatcherServlet在ContextLoaderListener完成根上下文的初始化之后即加载。
下面来看DispatcherServlet具体的初始化源码:
HttpServletBean重写了其父类HttpServlet的init方法:
public final void init() throws ServletException {
// Set bean properties from init parameters.
PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
if (!pvs.isEmpty()) {
try {
BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironme