1. 程式人生 > >Spring 4.x官方參考文件中文版——第21章 Web MVC框架(10)

Spring 4.x官方參考文件中文版——第21章 Web MVC框架(10)

使用@SessionAttributes來儲存請求中HTTP session的model attribute(模型屬性)

        類級別的@SessionAttributes聲明瞭session attributes會被特定的handler處理器所使用。它會把儲存在session中,或者conversational storage(會話儲存)中的model attribute(模型屬性)的名稱或型別列出來,在隨後的request請求中作為表格式的bean來為其服務。

下面的程式碼片段展示了這個註解的使用,定義了這個模型屬性的名稱:


處理帶有”application/x-www-form-urlencoded”的資料

        上面的章節介紹了使用@ModelAttribute來支援從瀏覽器客戶端中提交表單的請求。這個註解同樣也支援來自非瀏覽器客戶端的請求。這兩種情況間,當請求是HTTP PUT的時候會有些不同,瀏覽器能通過HTTP GET或HTTP POST來提交表單資料,非瀏覽器的客戶端也能通過HTTP PUT來提交表單。這代表著這個Servlet應用要求ServletRequest.getParameter*()這個系列的各種方法只支援通過HTTP POST訪問表單位元組,不支援HTTP PUT。

       為了支援HTTP PUT和PATCH請求,spring-web模組提供了HttpPutFormContentFilter過濾器,它能在web.xml中進行配置:


       上圖中所示的過濾器能過濾內容型別是”application/x-www-form-urlencoded”的HTTP PUT 和 PATCH請求,讀取請求主體中的表單資料,然後封裝好ServletRequest,以便使ServletRequest.getParameter*()系列的方法能夠奏效。

小提示:

         當HttpPutFormContentFilter在處理請求的主體時,不能配置那些依賴了application/x-www-form-urlencoded轉換器的PUT和PATCH 的URL。包括@RequestBody, MultiValueMap<String, String> 和 HttpEntity<MultiValueMap<String, String>>。

使用@CookieValue對映cookie值

@CookieValue允許HTTP cookie和方法引數繫結到一起。讓我們看看下面的cookie,這個cookie接收自一個http請求。


       下面的程式碼演示了怎樣獲取這個cookie裡的JSESSIONID值:


       若目標方法引數的型別不是String時,型別轉換器將自動啟用。詳見”方法引數和型別轉換”這一章節。

       這個註解支援在Servlet和Portlet環境下,註解過的處理器方法中使用。

使用@RequestHeader對映請求報頭屬性

       @RequestHeader註解能夠使方法引數與請求報頭繫結。

下面是一個請求報頭的示例:


       下面的程式碼示例展示了怎麼樣獲取Accept-Encoding和Keep-Alive報頭的值:


       若目標方法引數的型別不是String時,型別轉換器將自動啟用。詳見”方法引數和型別轉換”這一章節。

       當@RequestHeader註解在一個Map<String, String>或MultiValueMap<String,String>,或HttpHeader入參上使用,這個map將被所有報頭值填充。

小提示:

         型別轉換器內建支援把逗號分隔的字串轉換成字串陣列或集合,或者其他型別轉換器已知的型別。例如:一個方法引數裡被標註了@RequestHeader(“Accept”),可能是String型別,也可能是String[] 或者List<String>。

這個註解支援在Servlet和Portlet環境下,註解過的處理器方法中使用。

方法引數與型別轉換

在請求中,基於字串的值包括有:請求引數,路徑變數,請求報頭和cookie值,這些值可能需要被轉換型別,這個型別是它們所要繫結的方法引數的引數型別或欄位(比如:使用@ModelAttribute引數來把一個欄位與請求引數繫結)。如果目標型別不是String,Spring會自動的轉換成合適的型別,包括所有基本型別,如:int, long, Data等等。你也能夠通過使用WebDataBinder(詳見”自定義WebDataBinder初始化”),或者使用FormattingConversionService註冊Formatter來自定義轉換過程(詳見”8.6 Spring欄位格式化”)。

相關推薦

Spring 4.x官方參考中文版——21 Web MVC框架(10)

使用@SessionAttributes來儲存請求中HTTP session的model attribute(模型屬性)         類級別的@SessionAttributes聲明瞭session attributes會被特定的handler處理器所使用。它會把儲存

Spring 4.x官方參考中文版——21 Web MVC框架(11)

自定義WebDataBinder的初始化 為了在Spring的WebDataBinder裡,使用PropertyEditors來自定義請求引數的繫結,你能在你的controller中,使用@InitBinder方法,或在@ControllerAdvice註解了的類中使用@I

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

Spring4.x官方參考中文版——21 Web MVC框架(32)

21.16.2 對提供的配置進行定製為了在Java中定製預設的配置,你只需實現WebMvcConfigurer介面,或者繼承WebMvcConfigurerAdapter並覆寫你需要的方法:@Configuration @EnableWebMvc public class W

Spring4.x官方參考中文版——21 Web MVC框架(16)

21.5.2 串聯多個ViewResolver Spring支援多個檢視解析器。因此,你能夠串聯多個解析器,也可以在特定情況下覆寫特定的檢視。你可以通過在你的應用中的context中新增多個解析器來把這些檢視解析器串聯起來。此外,如果有必要的話,還可以設定order屬性來指

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 Boot 官方參考

Appendix A. Common application propertiesVarious properties can be specified inside your application.properties/application.yml file or as command line swi

《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 Framework 4.x 參考 (一)Spring 入門

第一部分 Spring 框架概覽 Spring框架是您建立企業級應用的輕量級解決方案與具有潛力的一站式商店。不過,Spring是模組化的,允許你只使用需要的部分,而不必帶上其他部分。你可以使用IoC容器,頂層用任意web框架,你也可以只使用Hibernate整