WebContentGenerator
用於提供如瀏覽器緩存控制、是否必須有session開啓、支持的請求方法類型(GET、POST等)等,該類主要有如下屬性:
Set<String> supportedMethods:設置支持的請求方法類型,默認支持“GET”、“POST”、“HEAD”,如果我們想支持“PUT”,則可以加入該集合“PUT”。
boolean requireSession = false:是否當前請求必須有session,如果此屬性爲true,但當前請求沒有打開session將拋出HttpSessionRequiredException異常;
boolean useExpiresHeader = true:是否使用HTTP1.0協議過期響應頭:如果true則會在響應頭添加:“Expires:”;需要配合cacheSeconds使用;
boolean useCacheControlHeader = true:是否使用HTTP1.1協議的緩存控制響應頭,如果true則會在響應頭添加;需要配合cacheSeconds使用;
boolean useCacheControlNoStore = true:是否使用HTTP 1.1協議的緩存控制響應頭,如果true則會在響應頭添加;需要配合cacheSeconds使用;
private int cacheSeconds = -1:緩存過期時間,正數表示需要緩存,負數表示不做任何事情(也就是說保留上次的緩存設置),
1、cacheSeconds =0時,則將設置如下響應頭數據:
Pragma:no-cache // HTTP 1.0的不緩存響應頭
Expires:1L // useExpiresHeader=true時,HTTP 1.0
Cache-Control :no-cache // useCacheControlHeader=true時,HTTP 1.1
Cache-Control :no-store // useCacheControlNoStore=true時,該設置是防止Firefox緩存
2、cacheSeconds>0時,則將設置如下響應頭數據:
Expires:System.currentTimeMillis() + cacheSeconds * 1000L // useExpiresHeader=true時,HTTP 1.0
Cache-Control :max-age=cacheSeconds // useCacheControlHeader=true時,HTTP 1.1
3、cacheSeconds<0時,則什麼都不設置,即保留上次的緩存設置。
此處簡單說一下以上響應頭的作用,緩存控制已超出本書內容:
HTTP1.0緩存控制響應頭
Pragma:no-cache:表示防止客戶端緩存,需要強制從服務器獲取最新的數據;
Expires:HTTP1.0響應頭,本地副本緩存過期時間,如果客戶端發現緩存文件沒有過期則不發送請求,HTTP的日期時間必須是格林威治時間(GMT),如“Expires:Wed, 14 Mar 2012 09:38:32 GMT”;
HTTP1.1緩存控制響應頭
Cache-Control :no-cache 強制客戶端每次請求獲取服務器的最新版本,不經過本地緩存的副本驗證;
Cache-Control :no-store 強制客戶端不保存請求的副本,該設置是防止Firefox緩存
Cache-Control:max-age=[秒] 客戶端副本緩存的最長時間,類似於HTTP1.0的Expires,只是此處是基於請求的相對時間間隔來計算,而非絕對時間。
還有相關緩存控制機制如Last-Modified(最後修改時間驗證,客戶端的上一次請求時間 在 服務器的最後修改時間 之後,說明服務器數據沒有發生變化 返回304狀態碼)、ETag(沒有變化時不重新下載數據,返回304)。
該抽象類默認被AbstractController和WebContentInterceptor繼承。