SpringMVC國際化
目標: SpringMvc視圖解析 SpringMvc本地化 SpringMvc靜態資源處理
前言
當我們對SpringMVC控制的資源發起請求時,這些請求都會被SpringMVC的DispatcherServlet處理,接着Spring會分析看哪一個HandlerMapping定義的所有請求映射中存在對該請求的最合理的映射。然後通過該HandlerMapping取得其對應的Handler,接着再通過相應的HandlerAdapter處理該Handler。HandlerAdapter在對Handler進行處理之後會返回一個ModelAndView對象。在獲得了ModelAndView對象之後,Spring就需要把該View渲染給用戶,即返回給瀏覽器。在這個渲染的過程中,發揮作用的就是ViewResolver和View。當Handler返回的ModelAndView中不包含真正的視圖,只返回一個邏輯視圖名稱的時候,ViewResolver就會把該邏輯視圖名稱解析爲真正的視圖View對象。View是真正進行視圖渲染,把結果返回給瀏覽器的。
1. Spring MVC如何解析視圖
【視圖解析 就是加前綴、後綴】
a) 請求處理方法返回值類型
b) 不論控制器返回一個String,ModelAndView,View都會轉換爲ModelAndView對象,由視圖解析器解析視圖,然後,進行頁面的跳轉。
c)
d) <!-- 視圖解析配置 -->
e) <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
f) <property name="prefix" value="/"></property>
g) <property name="suffix" value=".jsp"></property>
h) </bean>
2. 國際化(本地化)
一般情況下,Web應用根據客戶端瀏覽器的設置判斷客戶端的本地化類型,用戶可以通過IE菜單:工具→Internet選項...→語言...在打開的“語言首選項”對話框中選擇本地化類型。
瀏覽器中設置的本地化類型會包含在HTML請求報文頭中發送給Web服務器,確切地說是通過報文頭的Accept-Language參數將“語言首選項”對話框中選擇的語言發送到服務器,成爲服務器判別客戶端本地化類型的依據。
2.1 本地化:Spring MVC的本地化解析器
— AcceptHeaderLocaleResolver:根據HTTP報文頭的Accept-Language參數確定本地化類型,如果沒有顯式定義本地化解析器,Spring MVC默認採用AcceptHeader- LocaleResolver。
— CookieLocaleResolver:根據指定Cookie值確定本地化類型。
— SessionLocaleResolver:根據Session中特定的屬性值確定本地化類型。
— LocaleChangeInterceptor:從請求參數中獲取本次請求對應的本地化類型。
2.2 LocaleChangeInterceptor:通過URL參數指定
很多國際型的網站都允許通過一個請求參數控制網站的本地化,如www.xxx.com? locale=zh_CN返回對應中國大陸的本地化網頁,而www.xxx.com?locale=en返回本地化爲英語的網頁。這樣,網站使用者可以通過URL的控制返回不同本地化的頁面,非常靈活。
自己玩:
<!-- 注意一定使用messageSource作爲bean的名稱 首字母小寫 -->
<!-- 國際化配置 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="/cn/et/springmvc/lesson04/resource/my"></property>
</bean>
<!-- 自定義驗證器 手工注入國際化 -->
<bean id="localValidatorFactoryBean" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"></property>
</bean>
3. 靜態資源處理
Spring MVC 3.0提供的最強大的功能之一!!!
1. 靜態資源處理方式 2.靜態資源映射
3.1 靜態資源處理:使REST風格的URL成爲實現
優雅REST風格的資源URL不希望帶.html或.do等後綴,
以下是幾個優雅的URL。
— /blog/tom:用戶tom的blog資源。
— /forum/java:java論壇板塊資源。
— /order/4321:訂單號爲4321的訂單資源。
3.2 靜態資源處理:原理
3.3 靜態資源處理:如何配置?
第一步:web.xml讓所有請求都由Spring MVC處理
物理靜態資源路徑 映射 邏輯資源路徑
3.4 應用:文本框label字段國際化 如國際QQ等。