Spring4.x官方參考文件中文版——第21章 Web MVC框架(16)
21.5.2 串聯多個ViewResolver
Spring支援多個檢視解析器。因此,你能夠串聯多個解析器,也可以在特定情況下覆寫特定的檢視。你可以通過在你的應用中的context中新增多個解析器來把這些檢視解析器串聯起來。此外,如果有必要的話,還可以設定order屬性來指定執行順序。請記住,order屬性值越高,這個檢視解析器執行的越晚。
在下面的例子中,這個解析器鏈包含了2個解析器:一個InternalResourceViewResolver,被自動置於這個解析器鏈的最後;還有一個XmlViewResolver,用來指定Excel檢視,因為Excel檢視是不被InternalResourceViewRersolver支援的:
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean id="excelViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"> <property name="order" value="1"/> <property name="location" value="/WEB-INF/views.xml"/> </bean> <!—這部分在views.xml中 --> <beans> <bean name="report" class="org.springframework.example.ReportExcelView"/> </beans>
如果有一個特定的檢視解析器沒有生成檢視,Spring將會在context中檢查其他的檢視解析器:如果有額外的檢視解析器存在,Spring會繼續檢測,直到檢視被解析了為止。如果還是沒有檢視解析器能返回檢視,Spring會丟擲ServletException異常。
檢視無法被找到時返回null是檢視解析器的預設守則。但並不是所有檢視解析器都這樣做,因為,在一些情況下,解析器並不能判定檢視到底存在與否。比如,InternalResourceViewResolver在內部使用RequestDispatcher,dispatching(分派行為)是唯一一個能夠知曉JSP是否存在的行為,但是這個行為只能執行一次,同樣地,VelocityViewResolver和其他一些檢視解析器也是如此。關於不同檢視解析器的詳細情況請檢視javadoc文件,來檢視其是否能夠在檢視不存在時進行反饋。因此,把InternalResourceViewResolver不放在最後一個位置時,不能保證檢視處理器完全正確地解析檢視,因為InternalResourceViewResolver總是會返回檢視(包括空檢視)。
21.5.3 檢視的Redirect(重定向)
就如上面的章節所述,controller一般返回一個邏輯檢視名,這個檢視名能被檢視解析器解析到特定的檢視技術上。對於像JSP這樣,通過Servlet或JSP引擎來處理檢視的檢視技術來說,一般使用InternalResourceViewResolver和InternalResourceView來解析。這代表著內部的forward和include行為將通過ServletAPI的RequestDispatcher.forward(..)方法和RequestDispatcher.include()方法來完成。對於其他的檢視技術,類似Velocity, XSLT等等來說,檢視自己會把內容直接寫到響應流中。
有些時候,我們會希望在檢視被渲染完之前把HTTP的redirect(重定向)先發送給客戶端。比如:當一個controller被一個包含POST資料的請求呼叫時,響應實際上是被委派到了另一個controller(比如:表單上傳成功這種情況)。在這種情況下,普通的內部forward(轉發)意味著其他的controller也能夠看到相同的POST資料,如果這些資料與其他資料混在一起的話就會造成潛在的問題。對於需要在檢視渲染前redirect(重定向)的另一個原因是,避免同一使用者多次提交重複的表單。在這種情況下,瀏覽器會發送一個初始化的POST;之後會收到一個響應,來重定向到不同的URL;最後,瀏覽器會在redirect的響應中,為這個URL名後面展示一個GET。這樣的話,從瀏覽器的角度來說,這個頁面就不會展示POST的結果,而是一個GET。這樣做的結果就是,使用者不會通過重新整理頁面來重複POST相同的資料。重新整理會在那個結果頁面強制GET,而不是重新發送初始化的POST資料。
RedirectView
有一種在controller的響應中強制把redirect作為返回結果的方法,這種方法是: 建立Spring的RedirectView例項,並將其返回。在這種情況下DsipatcherServlet不會使用普通的檢視解析機制。因為這個例項已經給出了(redirect重定向)檢視了,DispatchetServlet只是簡單的告訴目標檢視去做他該做的。RedirectView會呼叫HttpServletResponse.sendRedirect()來發送一個HTTP direct(重定向),到客戶端的瀏覽器。
如果你使用RedirectView,並且檢視是通過controller自己來建立的,推薦在配置檔案中配置一下,來把這個重定向的URL注入到controller裡,這樣的話,就不會與這個controller耦合太大,而只是在context的配置檔案中配置了這個檢視名。詳見”重定向: 字首”這一章節瞭解如何促進解耦。
相關推薦
Spring4.x官方參考文件中文版——第21章 Web MVC框架(16)
21.5.2 串聯多個ViewResolver Spring支援多個檢視解析器。因此,你能夠串聯多個解析器,也可以在特定情況下覆寫特定的檢視。你可以通過在你的應用中的context中新增多個解析器來把這些檢視解析器串聯起來。此外,如果有必要的話,還可以設定order屬性來指
Spring4.x官方參考文件中文版——第21章 Web MVC框架(32)
21.16.2 對提供的配置進行定製為了在Java中定製預設的配置,你只需實現WebMvcConfigurer介面,或者繼承WebMvcConfigurerAdapter並覆寫你需要的方法:@Configuration @EnableWebMvc public class W
Spring4.x官方參考文件中文版——第21章 Web MVC框架(20)
21.7 URI的組建 Spring MVC提供了一種機制,可以使用UriComponentsBuilder和UriComponents來組建並編碼URI。 如下例所示,你能擴充套件並編碼一個URI模板的字串: UriComponents uriCompone
Spring4.x官方參考文件中文版——第21章 Web MVC框架(22)
21.9 主題(theme)的使用 21.9.1 主題概況 你能夠使用Spring Web MVC框架在你的應用中設定全域性生效的主題,從而提升使用者的體驗。主題是那些影響著應用裡視覺樣式的靜態資源(一般是表的樣式和影象)的集合。 21.9.2 主題的定義 為了在你的web
Spring4.x官方參考文件中文版——第21章 Web MVC框架(19)
21.6 使用flash attribute(flash屬性) Flash屬性為一個請求提供了儲存屬性的方式,這些儲存的請求可以在另一個請求中使用。當重定向時,比如在Post/Redirect/Get模式下的時候,這種需求是很普遍的。flash屬性會在重定向之前暫存(一般是
Spring 4.x官方參考文件中文版——第21章 Web MVC框架(11)
自定義WebDataBinder的初始化 為了在Spring的WebDataBinder裡,使用PropertyEditors來自定義請求引數的繫結,你能在你的controller中,使用@InitBinder方法,或在@ControllerAdvice註解了的類中使用@I
Spring 4.x官方參考文件中文版——第21章 Web MVC框架(10)
使用@SessionAttributes來儲存請求中HTTP session的model attribute(模型屬性) 類級別的@SessionAttributes聲明瞭session attributes會被特定的handler處理器所使用。它會把儲存
Spring 4.x官方參考文件中文版——第21章 Web MVC框架(8)
支援的方法返回引數型別 以下是支援的方法返回引數型別:ModelAndView : 這個物件由包括了指令物件的model模型,和帶@ModelAttribute註解的資料訪問方法的返回結果組成。Model : 模型物件,由通過RequestToViewName
Spring 4.x官方參考文件中文版——第21章 Web MVC框架(15)
21.5 檢視的解析 所有web應用的MVC框架都提供了指定檢視地址的方法。Spring提供了檢視解析器,這可以讓你在瀏覽器裡渲染model(模型),而不必與其他檢視技術繫結。不止如此,Spring還允許你使用如:JSP,Velocity模板和XSLT檢視等技術,需要了解更
Spring 4.x官方參考文件中文版——第21章 Web MVC框架(4)
21.3實現Controller控制器 Controller控制器可以為你在一個服務介面中定義好的應用行為提供訪問權。controller控制器可以理解使用者的輸入行為,並且把其轉化為一個可以通過檢視呈現給使用者的model模型。Spring是以一種十分抽象的方式來實現的c
《Python3.6官方文件》– 第12章 虛擬環境和包
原文連結 譯者:Carvendy 12. 虛擬環境和包 12.1 介紹 Python應用程式總會使用一些包和模組,它們離不開標準庫。應用程式需要指定標準庫的版本,因為應用程式可能需要避免一個已經修復的bug,或者是應用程式重寫了具體版本標準庫的介面的實現。 這意味著也許不可能需要給
《Python3.6官方文件》– 第十章
作業系統介面 os 模組提供一系列與作業系統進行互動的函式。 import os os.getcwd() # 返回當前工作目錄 os.chdir('/server/accesslogs') # 修改當前工作目錄 os.system('mkdir today') # 在
《Python3.6官方文件》– 第13章 接下來
原文連線 13 章 接下來 讀到個別的指南,也許你已經迫不及待想使用python了——你渴望使用Python來解決現實發生的問題。你應該從何學習得更多呢? 指南是Python文件的一部分。其他的文件如下: 你應該瀏覽本手冊,裡面提供完整的(雖然簡潔)關於標準庫的型別,函式,和
《KAFKA官方文件》第三章:快速入門
快速入門 本教程假設讀者完全從零開始,電腦上沒有已經存在的Kafka和Zookeeper環境。以下內容需要注意的是:因為在類Unix平臺和Windows平臺上的Kafka控制指令碼不同,在Windows平臺上,需要使用路徑\bin\windows代替/bin,指令碼副檔名改為.bat。 第
《HttpClient官方文件》第六章 HTTP 快取
原文連結 譯者[xuheyang] 第六章. HTTP快取 6.1. 通用概念 HttpClient Cache 提供了用HttpClient(等效瀏覽器快取的Java實現)來相容HTTP / 1.1的快取層。實現遵循責任鏈模式,HttpClient快取的實現類可以替代預設無快取的HttpClient;完全
《HttpClient 官方文件》第五章 Fluent API
原文連結 譯者[white] 第五章:流式 API 5.1 易用 API 介面 4.2版本的 HttpClient 帶來了一組非常容易使用的流式 API(Fluent API) 介面。暴露的流式API(Fluent API) 介面中僅僅是 HttpClient 最基本的一些功能,這些介面是在
《HttpClient 官方文件》第三章 HTTP 狀態管理
原文連結 譯者[陳志軍] 通常 HTTP 被設計為無狀態,面向請求/響應的協議,對於有一些邏輯相關的請求/響應交換的有狀態會話沒有特別的規定。正當 HTTP 協議越來越流行和被認可,越來越多之前沒有打算使用它的系統,現在也開始為了應用程式而使用它。例如電子商務應用的內容傳輸。因此,支援 HTT
Spring Boot 官方參考文件
Appendix A. Common application propertiesVarious properties can be specified inside your application.properties/application.yml file or as command line swi
《精通Spring4.x企業應用開發實戰》第三章
這一章節主要介紹SpringBoot的使用,也是學習的重點內容,之後就打算用SpringBoot來寫後臺,所以提前看一下還是很有必要的。 3.SpringBoot概況 3.1.1SpringBoot發展背景 Spring Boot的出現。Spring Boot可讓開發人員不再需要編寫複雜的XML配