2012-08-29 38 views
0

我有一個jsp文件pageshow.jsp和參數ID,緩存JSP

有什麼辦法來緩存基於URL參數

請求頁面在服務器端的JSP文件pageshow.jsp?ID = 100從緩存從服務器獲取
建立請求頁面pageshow.jsp的呢?ID = 200緩存從服務器獲取建設,而不是

以上兩個頁面應該有不同的緩存中的內容,因爲它們的參數是不同

這可避免在服務器端的重建JSP文件,也降低了服務器負載

+2

只有在第一次訪問它們時,JPS纔會構建到Java類中。你想通過「緩存」實現什麼?如果頁面創建非常昂貴,那麼你可以檢查是否可以緩存例如數據庫操作需要。 –

+0

+1 @f_puras。 JSP被編譯一次。您可能可以預編譯JSP。 – ch4nd4n

+0

@f_puras我也想要緩存JSTL/scriptlet結果。例如。在頁面中我顯示產品ID: - <%= request.getparamter%>,在這種情況下,我想通過這部分代碼緩存生成的輸出 – Satheesh

回答

2

我想看看使用類似於AlexR提出的CachingHttpFilter,但看看使用HTTP頭來控制緩存而不是將數據存儲在roll-your-own-content-cache中。

This article很好地解釋瞭如何在後續時間請求URL時比較If-Modified-Since HTTP標頭。然後由您的過濾器發回HTTP 304響應。

日期的比較:

客戶要求服務器指定頁:如果客戶具有 已經讀出的頁,它發送一個請求(到服務器)包含 最後修改日期它的緩存頁面(例如「If-Modified-Since: 21/07/2002 13:47:24 GMT」);還有頭部If-Unmodified-Since;

服務器比較此日期由客戶端請求的頁面的最後 修改日期給出:

如果服務器上的網頁有相同的日期,則服務器通知 客戶端,它可以使用版本的頁面(「HTTP/1.1 304 Not Modified」)。客戶端和服務器之間的交換在那裏停止 ;

如果服務器上的網頁是新的,則服務器通知變化的客戶 (「上次修改:21/06/2012下午8時45分37秒GMT」),併發出 此頁到客戶端。瀏覽器存儲 頁面上次更改的日期。

你也想看看ETag HTTP Header

不幸的是,緩存聽起來很簡單,但通常很難得到正確的結果。調整數據庫查詢通常是改善應用程序性能的最佳選擇。

2

您可以創建CachingHttpFilter映射到僅此JSP頁面並執行以下操作:

  • 檢查是否緩存內容存在
  • 如果只存在返回它
  • 如果不存在調用chain.doFilter(request, response);將轉到請求的JSP。但是傳遞了特殊的響應(響應包裝器),它存儲了JSP返回的所有字節並緩存它們。