servlet緩存
『壹』 servlet怎麼控制頁面緩存
Html頁面中的HTTP頭信息中有著控制頁面緩存的設置,包括瀏覽器端,中間緩存伺服器端,web伺服器端;
本文討論頭信息中帶緩存控制信息的HTML頁面(JSP/Servlet生成好出來的也是HTML頁面)在中間緩存伺服器中的緩存情況。
HTTP協議中關於緩存的信息頭關鍵字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。
HTTP1.0中通過Pragma 控制頁面緩存,可以設置:Pragma或no-cache。網上有非常多的文章說明如何控制不讓瀏覽器或中間緩存伺服器緩存頁面,通常設置的值為no- cache,不過這個值不這么保險,通常還加上Expires置為0來達到目的。但是如我們刻意需要瀏覽器或緩存伺服器緩存住我們的頁面這個值則要設置為 Pragma。
HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個常用的參數:
no-cache,瀏覽器和緩存伺服器都不應該緩存頁面信息;
public,瀏覽器和緩存伺服器都可以緩存頁面信息;
no-store,請求和響應的信息都不應該被存儲在對方的磁碟系統中;
must-revalidate,對於客戶機的每次請求,代理伺服器必須想伺服器驗證緩存是否過時;
max-age=xxx,s-max-age=xxx,替代Expires,表示應該在xxx秒後認為頁面過時,後者指示代理伺服器中緩存(通常稱為共享緩存)的頁面過期時間。(不過我試了好多次,這個選項一直沒法實現,希望有人能補充!)
通常我們不需要緩存頁面時設置該值為"no-cache,no-store,must-revalidate"(分三行代碼設置);需要緩存頁面信息時則設置該值為"public,max-age,s-max-age"。
Last-Modified只頁面的最後生成時間,GMT格式;
Expires過時期限值,GMT格式,指瀏覽器或緩存伺服器在該時間點後必須從真正的伺服器中獲取新的頁面信息;
上面兩個值在JSP中設置值為字元型的GMT格式,無法生效,設置long類型才生效;
最後來看一下JSP或Servlet中如何設置緩存控制信息的代碼:
java代碼
//本頁面允許在瀏覽器端或緩存伺服器中緩存,時限為10秒。
java.util.Date date = new java.util.Date();
response.setDateHeader("Last-Modified",date.getTime());
response.setDateHeader("Expires",date.getTime()+10000);
response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "Pragma");
Java代碼
//不允許瀏覽器端或緩存伺服器緩存當前頁面信息。
response.setHeader( "Pragma", "no-cache" );
response.setDateHeader("Expires", 0);
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.addHeader( "Cache-Control", "must-revalidate" );
如果HTML頁面信息中包括了Expires頭信息,則其相關的緩存機制不再處理該頁面,而是安裝頁面的緩存控制要求來處理。所以做了上述工作後,Squid無需做任何配置上的修改(指Squid的refresh_pattern指令不處理這些頁面 )。
『貳』 java 怎麼把數據存到內存中
這里你採納與否沒關系,給你說說編程與內存的關系。
你定義的任何變數,常量,類,方法等等,其實都在內存中,沒有所謂的把數據存內存中,這概念,你可以想一下電腦重啟或關機後,內存中的所有數據,都會丟失,除非你保存到磁碟中去。
在內存中的數據有兩塊,第一、緩沖,一般寫數據到磁碟的時候開辟出來的內存空間;第二、緩存,一般是從磁碟讀數據到內存中開辟出來的內存空間。會這么使用,原因很簡單,磁碟讀寫數據速度與內存不一致(磁碟的存取效率遠遠小於內存的存取效率),為了提高數據的存取效率,才會這么乾的。
一般而言,java中的所謂數據,大部分都是類,從自動引用計數的概念來分析,你想把對象長久的放在內存中,不會被垃圾回收機制釋放,注意制葯有一個對象在使用/引用你的數據,這條數據就會存在內存中。所以,想servlet中的全局配置參數,隨時可以取到還是唯一一份,你可以參考一下。
另外內存使用分堆與棧,堆在面向對象編程中存儲對象的,棧是方法或函數執行的時候臨時開辟的存儲空間,方法或函數執行完畢就會釋放。
希望我的回復能幫助到你,採納與否沒關系。有更好的答案,我就隱藏我的回復。