servlet 中getLastModified()

 

在http協議中,瀏覽器對訪問過的頁面緩存後,它將會在以後訪問該頁面時,將會根據LastModified頭字段指定的時間值生成If-Modified-Since頭字段,作爲緩存頁面的最新更新時間。如果網頁的最後修改時間比If-Modified-Since頭字段指定的時間早的話,web服務器就會請求的頁面,如果自If-modified-Since指定的時間以來,網頁內容沒有被修改的話,服務器就會返回一個304響應頭,一次告訴瀏覽器繼續使用已緩存的頁面。

由於在動態網頁程序中,網頁內容隨時在變化,因此我們要保證在每次的訪問請求中都要返回最新的內容。例如一個網上商店賣某種產品,賣出一件,返回給數據的網頁當中顯示產品的數量就要少一件,這時我們就需要返回最新的網頁內容。注意:HttpServlet類中的getLastModified方法的返回值是一個負數。

繼承HttpServlet的servlet程序在接收到客戶端的GET請求後,HttpServlet的重載service方法會先調用getLastModified方法,根據這個方法的返回值來決定是否要調用doGet方法和生成Last-Modified頭字段。主要有以下三種決定方式:

1.如果getLastModified方法的返回值是一個負數的話,不管客戶端的請求信息如何,service方法都會調用doGet方法生成響應信息返回給客戶端。

2.如果getLastModified方法的返回值是一個正數,並且客戶端的請求消息中沒有包含If-Modified-Since頭字段的(這種情況是第一次訪問該頁面時)或者是請求消息中包含If-Modified-Since頭字段,但是返回值比If-Modified-Since頭字段指定的時間新的話,則service方法調用doGet方法生成響應信息和Last-Modified消息頭返回給客戶端。

3.如果getLastModified方法的返回值是一個正數,並且返回值比客戶端發出的請求消息中If-Modified-Since頭字段指定的時間值舊的話,那麼service方法將不會調用doGet方法和生成Last-Modified頭字段,而是返回一個304狀態給客戶端,表示讓客戶端繼續使用以前緩存的頁面。

服務器響應返回304說明僅當文檔再製定的日期之後發生改變時,才希望讀取該文檔304(SC_NOT_MODIFIED)表示緩存的版本是最新的的核程序應該使用她,

否則返回所請求的文檔,並設置正常(200)狀態代碼.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章