springMVC第一篇【spiengmvc.xml中mvc標籤的來龍去脈】

在springmvc.xml的配置文件中,所有以mvc開頭的標籤,如<mvc:resource>等這樣的標籤,這些mvc:相關的有哪些內容,每個標籤又是在那裏被註冊,又被哪些類來解析的呢,此文章讓我們來看一下。

首先第一個問題:<mvc:***/>,這個後面的***都可以寫哪些東西呢?

找到spring-webmvc-4.3.8.RELEASE.jar\org\springframework\web\servlet\config文件夾,裏面會發現有個spring-mvc-4.3.xsd文件,這裏面就定義了<mvc:***/>中的***可以寫哪些內容。截圖如下:

黑體字部分就是***可以寫的內容。例如以<mvc:resource/>爲例,在上面圖片的黑體字中就可以發現有個name="resource"的。

這裏的每一個黑體,就代表<mvc:***/>中的***可以些什麼東西。

問題二:每一個標籤是誰來解析的呢?

問題一種,我們知道了在哪裏可以找到<mvc:**/>標籤都可以寫那些東西,那麼當我們寫了這些標籤後,又是那個類來幫我們解析這個標籤,然後根據標籤中的屬性來生成相關的對象的呢。看下面這個類:

public class MvcNamespaceHandler extends NamespaceHandlerSupport {

	@Override
	public void init() {
		registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
		registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser());
		registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
		registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser());
		registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
		registerBeanDefinitionParser("redirect-view-controller", new ViewControllerBeanDefinitionParser());
		registerBeanDefinitionParser("status-controller", new ViewControllerBeanDefinitionParser());
		registerBeanDefinitionParser("view-resolvers", new ViewResolversBeanDefinitionParser());
		registerBeanDefinitionParser("tiles-configurer", new TilesConfigurerBeanDefinitionParser());
		registerBeanDefinitionParser("freemarker-configurer", new FreeMarkerConfigurerBeanDefinitionParser());
		registerBeanDefinitionParser("velocity-configurer", new VelocityConfigurerBeanDefinitionParser());
		registerBeanDefinitionParser("groovy-configurer", new GroovyMarkupConfigurerBeanDefinitionParser());
		registerBeanDefinitionParser("script-template-configurer", new ScriptTemplateConfigurerBeanDefinitionParser());
		registerBeanDefinitionParser("cors", new CorsBeanDefinitionParser());
	}

}

相信看到這裏,是不是廓然開朗,我們發現這裏綠色部分的字符串跟上面圖片中的黑體字都是一一對應,那麼綠色後面建立的對象,就是將來用於解析對應標籤的對象了。

以 <mvc:resources mapping="/style/**" location="/style/"/>爲例,這個標籤的解析會由ResourcesBeanDefinitionParser這個類來進行,看下圖:

這個類的registerResourceHandler方法,獲取了標籤中<mvc:resource/>標籤中的location屬性以及其他各個屬性,並將這些寫在標籤中的屬性放到MutablePropertyValues這個對象中,然後創建了以後專門用來處理靜態資源對象ResourceHttpRequestHandler【後期寫一篇這個類的介紹的文章】。然後將這個類註冊到容器中,將來就用這個類來判斷請求是不是對資源的請求。具體的就不多說了,不是本章重點,這裏不做過多解釋。

希望大家看完本篇文章後,能對springmvc中mvc標籤的處理有所瞭解。後期將會有更多的詳細解析文章,請關注。謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章