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重定向中傳遞參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM