緩存這個技術在我們實際的開發中是非常常用的,也是非常重要的一項技術。主要用於客戶端(瀏覽器)向服務器端請求的是一些比較大的數據,並且這個數據在短時間內不會經常發生變化的情況,比如一些網站的logo圖片,它是一個網站的標志,一般不會發生變化,如果不緩存的話,而logo圖片又比較大的話,那么瀏覽器每次發送請求時,服務端都要返回logo圖片這個大數據信息,會影響到服務器的性能和效率,服務器端變慢了,也勢必會導致用戶頁面看到的數據加載變慢。如果我么對圖片進行一個合適時間內的緩存的話,這樣會大大提高服務端的效率,還能提高客戶端的用戶體驗呢!
使用response來設置緩存,主要時設置http的響應頭的expires的信息,示例代碼如下:
package com.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 設置緩存 * * @author Administrator 緩存是當瀏覽器第一次發送請求,如果服務器設置了緩存,就會將第一次請求獲得的數據緩存在瀏覽器,那么在緩存時間內,瀏覽器是不會想服務器發送請求的,直接從緩存中獲取數據 */ @WebServlet("/buff.do") public class BufferServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 這里的時間是從1970開始,所以要設置當前時間+緩存的時間,時間單位為毫秒,這里緩存的時間為1分鍾 response.setDateHeader("expires", System.currentTimeMillis() + 1000 * 60); // 用來測試在緩存時間內,瀏覽器是否還向服務端發送請求 System.out.println("enter"); // 模擬的大數據 String bigData = "this is a big data,but it is not change."; response.getWriter().print(bigData); } }
在緩存時間內無論你發送了多少次請求輸出的結果:
enter
並且從請求的響應頭
Server: Apache-Coyote/1.1
Expires: Fri, 07 Jul 2017 07:49:26 GMT
Content-Length: 40
Date: Fri, 07 Jul 2017 07:48:26 GMT
從上面的結果可以看出,當我們在服務端設置了緩存了,那么在緩存時間內,瀏覽器發送請求,取得數據時從本地緩存中獲取的。
至此,一個簡單的使用response實現緩存的小案例演示完畢,有不足的地方,希望大家多多提意見