SpringMVC之context-dispatcher.xml,瞭解基本的控制器
本篇來完成SpringMVC的三大XML的最後一個context-dispatcher.xml,瞭解spring如何控制檢視、如何掃描註解、資料轉換、靜態資源載入等關鍵配置項。
另外附上前兩個xml的配置連結:
①、xml內容
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
>
<!-- 檢視解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!-- 將jsp頁面放置在web-info中可以保護這些頁面不被瀏覽器直接訪問 -->
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 掃描web包,應用Spring的註解 @Controller -->
<!-- 具體的包可以使spring在載入時不掃描沒有必要的包 -->
<context:component-scan base-package="com.honzh.spring.controller" />
<!-- 掃描業務層service實現類 -->
<context:component-scan base-package="com.**.service" />
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 這裡使用string to date可以將dao在jsp到controller轉換的時候直接將string格式的日期轉換為date型別 -->
<bean class="com.honzh.common.plugin.StringToDateConverter" />
</list>
</property>
</bean>
<mvc:resources location="/assets/" mapping="/assets/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/components/" mapping="/components/**"/>
<!-- 以上和下面這句話等效 -->
<!-- <mvc:default-servlet-handler/> -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8">
<property name="maxUploadSize" value="1024000000"></property>
</bean>
</beans>
②、重點內容介紹
1、viewResolver
<!-- 檢視解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!-- 將jsp頁面放置在web-info中可以保護這些頁面不被瀏覽器直接訪問 -->
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp"></property>
</bean>
- 將jsp頁面放置在web-info中可以保護這些頁面不被瀏覽器直接訪問。
- 通過prefix、suffix我們在controller中的跳轉地址就可以簡化了,比如說原來的“/WEB-INF/pages/login.jsp”就可以簡化為“/login”。
2、context:component-scan
<!-- 掃描web包,應用Spring的註解 @Controller -->
<!-- 具體的包可以使spring在載入時不掃描沒有必要的包 -->
<context:component-scan base-package="com.honzh.spring.controller" />
<!-- 掃描業務層service實現類 -->
<context:component-scan base-package="com.**.service" />
通過context:component-scan,spring就會掃描base-package下面帶有Spring註解的類(@Controller、@Service),這樣一來,當你url進行請求的時候,就會找到對應的controller控制器,在controller需要的時候,也會找到對應的service。
當然了,base-package的配置方式就有兩種,一種是全路徑,一種是帶*的省略路徑,不過一定要具體到對應的包下面,否則spring會掃描不必要的包路徑以及類。
3、mvc:annotation-driven
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 這裡使用string to date可以將dao在jsp到controller轉換的時候直接將string格式的日期轉換為date型別 -->
<bean class="com.honzh.common.plugin.StringToDateConverter" />
</list>
</property>
</bean>
轉換器converter是可以將一種型別轉換為另外一種型別的,例如上述配置中string到date型別的轉換,StringToDateConverter 類如下,其轉換的日期格式為”yyyy-MM-dd”,如果頁面上輸入的日期格式不是”yyyy-MM-dd”,那麼尤其是在form表單提交到model時,就會丟擲錯誤。另外,一般model的bean中對於日期類,其型別為Date,而前端jsp傳入的型別為string,有了該converter,就可以輕鬆將string轉換為bean了,就不需要特殊的處理了。
package com.honzh.common.plugin;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class StringToDateConverter implements Converter<String,Date>{
public Date convert(String source) {
DateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = dateTimeFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
4、mvc:resources和mvc:default-servlet-handler
還記得我在介紹web.xml時說過“/”的靜態資源問題了嗎?那麼當url-pattern中配置為“/”,預設的DispatcherServlet會處理所有的請求,包含靜態資源,而事實顯然不需要這樣。
webContent的目錄如上圖所示,對於assets和css資料夾,顯然我們不希望servlet再進行攔截,否則,這些資源將無法呈現,那麼如何解決這個問題呢?
<mvc:resources location="/assets/" mapping="/assets/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/components/" mapping="/components/**"/>
<!-- 以上和下面這句話等效 -->
<!-- <mvc:default-servlet-handler/> -->
以上兩種方案供解決,二者選其一。至於更細節的內容,王二我能力有限,就略過了。
5、multipartResolver
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8">
<property name="maxUploadSize" value="1024000000"></property>
</bean>
這顯然是控制檔案上傳的,我這裡先不做詳細的介紹,稍候我會用一整篇的文章來進行說明。
有關SpringMVC的三大XML(web.xml、application-context.xml、context-dispatcher.xml)暫時就先介紹到這裡,後續遇到新的問題,會重新把問題新增到系列文章中,為後來者鋪路,感覺很欣慰啊。
相關文章
感謝您閱讀【沉默王二的部落格】,如果王二的部落格給您帶來一絲幫助或感動,我(也就是王二)將不甚榮幸。
如果您碰巧喜歡,可以留言或者私信我,這將是我鼓搗更多優秀文章的最強動力。