我有一個jsp文件pageshow.jsp和參數ID,緩存JSP
有什麼辦法來緩存基於URL參數
請求頁面在服務器端的JSP文件pageshow.jsp?ID = 100從緩存從服務器獲取
建立請求頁面pageshow.jsp的呢?ID = 200緩存從服務器獲取建設,而不是
以上兩個頁面應該有不同的緩存中的內容,因爲它們的參數是不同
這可避免在服務器端的重建JSP文件,也降低了服務器負載
我有一個jsp文件pageshow.jsp和參數ID,緩存JSP
有什麼辦法來緩存基於URL參數
請求頁面在服務器端的JSP文件pageshow.jsp?ID = 100從緩存從服務器獲取
建立請求頁面pageshow.jsp的呢?ID = 200緩存從服務器獲取建設,而不是
以上兩個頁面應該有不同的緩存中的內容,因爲它們的參數是不同
這可避免在服務器端的重建JSP文件,也降低了服務器負載
我想看看使用類似於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。
不幸的是,緩存聽起來很簡單,但通常很難得到正確的結果。調整數據庫查詢通常是改善應用程序性能的最佳選擇。
您可以創建CachingHttpFilter
映射到僅此JSP頁面並執行以下操作:
chain.doFilter(request, response);
將轉到請求的JSP。但是傳遞了特殊的響應(響應包裝器),它存儲了JSP返回的所有字節並緩存它們。
只有在第一次訪問它們時,JPS纔會構建到Java類中。你想通過「緩存」實現什麼?如果頁面創建非常昂貴,那麼你可以檢查是否可以緩存例如數據庫操作需要。 –
+1 @f_puras。 JSP被編譯一次。您可能可以預編譯JSP。 – ch4nd4n
@f_puras我也想要緩存JSTL/scriptlet結果。例如。在頁面中我顯示產品ID: - <%= request.getparamter%>,在這種情況下,我想通過這部分代碼緩存生成的輸出 – Satheesh