zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Spring dispatcherServlet

Spring dispatcherServlet
2023-09-27 14:20:52 时间

 

 在一个工程中如果想要使用 spring MVC的话,只需要两个步骤

在web.xml中配置一个DispatcherServlet。
需要配置一个org.springframework.web.servlet.DispatcherServlet的servlet。

再定义一个dispatcherServlet-servlet.xml配置文件。
在这个配置文件里面只需要扩展一个路径映射关系定义一个视图解析器再定义一个业务逻辑的处理流程规则

 

 这样就可以搞定一个最基本的Spring MVC的应用了。

 

 

 对于DispatcherServlet初始化的时候初始了哪些东西,这些可以在initStrategies中看到。

    protected void initStrategies(ApplicationContext context) {
        //初始化MultipartResolver,主要是处理文件上传服务。
        initMultipartResolver(context);
        //用于处理应用的国际化问题
        initLocaleResolver(context);
        //用于定义一个主题
        initThemeResolver(context);
         //用于定义用户设置的请求映射关系
        initHandlerMappings(context);
        //用于根据Handler的类型定义不同的处理规则
        initHandlerAdapters(context);
        //当Handler处理错误的时候,通过这个handler来做统一的处理
        initHandlerExceptionResolvers(context);
        //将指定的ViewName按照定义的RequestToViewNameTranslator替换成想要的格式。
        initRequestToViewNameTranslator(context);
        //用于将view解析成页面
        initViewResolvers(context);
        //用于映射flash管理的。
        initFlashMapManager(context);
    }

 

 

 对于spring MVC框架中,有三个组件是用户必须定义和扩展的:

handlerMapping
    定义URL映射规则

handlerAdapter
    实现业务逻辑的handler实例对象

ViewResolver
    渲染模版资源

 

 

看看DispatcherServlet启用的时候做了哪些工作?

public final void init() throws ServletException {
        if (logger.isDebugEnabled()) {
            logger.debug("Initializing servlet '" + getServletName() + "'");
        }
 
        // Set bean properties from init parameters.
        try {
            PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
            BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
            ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
            bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, this.environment));
            initBeanWrapper(bw);
            bw.setPropertyValues(pvs, true);
        }
        catch (BeansException ex) {
            logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
            throw ex;
        }
 
        // Let subclasses do whatever initialization they like.
        initServletBean();
 
        if (logger.isDebugEnabled()) {
            logger.debug("Servlet '" + getServletName() + "' configured successfully");
        }
    }

 

  调用FrameworkServlet的createWebApplicationContext方法,初始化spring容器。

  调用FrameworkServlet的onRefresh方法完成配置文件的加载,配置文件的加载同样是先查找servlet的init-param参数中设置的路径,如果没有,就会根据namespace+Servlet的名称来查找XML文件。

  Spring容器加载的时候会调用DispatcherServlet的initStrategies方法来初始化springMVC框架所需要的八个组件,这八个组件对应的八个bean对应都保存在DispatcherServlet类中。

    这样:spring MVC的初始化工作就完成了。这样就可以接受你的http请求了。