zoukankan      html  css  js  c++  java
  • SpringMVC的九大组件

    SpringMVC的九大组件

    SpringMVC是Spring框架中的一个表现层框架,也称为控制层,SpringMVC中有很重要的九大组件

    <!-- spring mvc的配置上下文 -->
        <servlet>
            <servlet-name>mvc-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:mvc-dispatcher-servlet.xml</param-value>
            </init-param>
    
            <load-on-startup>1</load-on-startup>
        </servlet>
    

    从上面的配置可以看出,SpringMVC与WEB项目集成的入口就是这个DispatcherServlet类,这个类会加载我们配置的spring-mvc.xml文件,源码如下:

    public class DispatcherServlet extends FrameworkServlet {
    
    	/** Well-known name for the MultipartResolver object in the bean factory for this namespace. */
    	public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
    
    	/** Well-known name for the LocaleResolver object in the bean factory for this namespace. */
    	public static final String LOCALE_RESOLVER_BEAN_NAME = "localeResolver";
    
    	/** Well-known name for the ThemeResolver object in the bean factory for this namespace. */
    	public static final String THEME_RESOLVER_BEAN_NAME = "themeResolver";
    
    	/**
    	 * Well-known name for the HandlerMapping object in the bean factory for this namespace.
    	 * Only used when "detectAllHandlerMappings" is turned off.
    	 * @see #setDetectAllHandlerMappings
    	 */
    	public static final String HANDLER_MAPPING_BEAN_NAME = "handlerMapping";
    
    	/**
    	 * Well-known name for the HandlerAdapter object in the bean factory for this namespace.
    	 * Only used when "detectAllHandlerAdapters" is turned off.
    	 * @see #setDetectAllHandlerAdapters
    	 */
    	public static final String HANDLER_ADAPTER_BEAN_NAME = "handlerAdapter";
    
    	/**
    	 * Well-known name for the HandlerExceptionResolver object in the bean factory for this namespace.
    	 * Only used when "detectAllHandlerExceptionResolvers" is turned off.
    	 * @see #setDetectAllHandlerExceptionResolvers
    	 */
    	public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME = "handlerExceptionResolver";
    
    	/**
    	 * Well-known name for the RequestToViewNameTranslator object in the bean factory for this namespace.
    	 */
    	public static final String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME = "viewNameTranslator";
    
    	/**
    	 * Well-known name for the ViewResolver object in the bean factory for this namespace.
    	 * Only used when "detectAllViewResolvers" is turned off.
    	 * @see #setDetectAllViewResolvers
    	 */
    	public static final String VIEW_RESOLVER_BEAN_NAME = "viewResolver";
    
    	/**
    	 * Well-known name for the FlashMapManager object in the bean factory for this namespace.
    	 */
    	public static final String FLASH_MAP_MANAGER_BEAN_NAME = "flashMapManager";
    

    一共是十个方法,其中有一个初始化策略的方法initStrategies

    /**
    	 * This implementation calls {@link #initStrategies}.
    	 */
    	@Override
    	protected void onRefresh(ApplicationContext context) {
    		initStrategies(context);
    	}
    
    	/**
    	 * Initialize the strategy objects that this servlet uses.
    	 * <p>May be overridden in subclasses in order to initialize further strategy objects.
    	 */
    	protected void initStrategies(ApplicationContext context) {
    		initMultipartResolver(context);
    		initLocaleResolver(context);
    		initThemeResolver(context);
    		initHandlerMappings(context);
    		initHandlerAdapters(context);
    		initHandlerExceptionResolvers(context);
    		initRequestToViewNameTranslator(context);
    		initViewResolvers(context);
    		initFlashMapManager(context);
    	}
    

    可看出,初始化策略是其他九个初始化方法的概括,而其他九个初始化方法就是我们要介绍的九大组件

    • 1、MultipartResolver(文件处理器)
      • 对应的初始化方法是initMultipartResolver(context),用于处理上传请求。
      • 处理方法是将普通的request包装成MultipartHttpServletRequest,后者可以直接调用getFile方法获取File。
    • 2、LocaleResolver(当前环境处理器)
      • 对应的初始化方法是initLocaleResolver(context),这就相当于配置数据库的方言一样,有了这个就可以对不同区域的用户显示不同的结果。
      • SpringMVC主要有两个地方用到了Locale:
        • 一是ViewResolver视图解析的时候;
        • 二是用到国际化资源或者主题的时候。
    • 3、ThemeResolver(主题处理器)
      • 对应的初始化方法是initThemeResolver(context),用于解析主题。
      • SpringMVC中一个主题对应一个properties文件,里面存放着跟当前主题相关的所有资源,如图片、css样式等。
      • SpringMVC的主题也支持国际化。
    • 4、HandlerMapping(处理器映射器)
      • 对应的初始化方法是initHandlerMappings(context),这就是根据用户请求的资源uri来查找Handler的。
      • 在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行处理呢?这就是HandlerMapping需要做的事。
    • 5、HandlerAdapters(处理器适配器)
      • 对应的初始化方法是initHandlerAdapters(context),从名字上看,它就是一个适配器。
      • Servlet需要的处理方法的结构却是固定的,都是以request和response为参数的方法。
      • 如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢?这就是HandlerAdapters要做的事情。
    • 6、HandlerExceptionResolvers(异常处理器)
      • 对应的初始化方法是initHandlerExceptionResolvers(context),其它组件都是用来干活的。
      • 在干活的过程中难免会出现问题,出问题后怎么办呢?这就要有一个专门的角色对异常情况进行处理,在SpringMVC中就是HandlerExceptionResolver。
    • 7、RequestToViewNameTranslator(视图名称翻译器),
      • 对应的初始化方法是initRequestToViewNameTranslator(context),有的Handler处理完后并没有设置View也没有设置ViewName,这时就需要从request获取ViewName了,如何从request中获取ViewName就是RequestToViewNameTranslator要做的事情了。
    • 8、ViewResolvers(页面渲染处理器)
      • 对应的初始化方法是initViewResolvers(context),ViewResolver用来将String类型的视图名和Locale解析为View类型的视图。
      • View是用来渲染页面的,也就是将程序返回的参数填入模板里,生成html(也可能是其它类型)文件。
    • 9、FlashMapManager(参数传递管理器)
      • 对应的初始化方法是initFlashMapManager(context),用来管理FlashMap的,FlashMap主要用在redirect重定向中传递参数。
  • 相关阅读:
    AIR 移动设备上的存储控制
    air写文件 SecurityError: fileWriteResource 时报错的解决方法
    [Embed(source="asset.swf")] 使用其中的所有资源
    as3调用外部swf里的类的方法
    Starling性能优化技巧十五则
    air开发中的requestedDisplayResolution 扫盲
    粒子编辑器的选择
    关于粒子..
    清理缓存功能的实现
    SegmentedControl的使用
  • 原文地址:https://www.cnblogs.com/d534/p/15257237.html
Copyright © 2011-2022 走看看