乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JR 精品文章 - web開發(fā)中的緩存問題的研究(三)

       Long_way 2007-08-24
      web開發(fā)中的緩存問題的研究(三)
      wty_703 轉(zhuǎn)貼   更新:2007-08-09 08:02:49  版本: 1.0   

      (5)回到瀏覽器窗口中,簡(jiǎn)要記住一下瀏覽器窗口和Tomcat的命令行窗口中顯示出的時(shí)間值,然后反復(fù)單擊瀏覽器工具欄中的“后退”和“前進(jìn)”按鈕,可以看到每次顯示出的CacheServlet頁面內(nèi)容都沒有變化,Tomcat的命令行窗口中也沒有打印出新的信息。直接在瀏覽器地址欄中輸入CacheServlet的訪問地址,結(jié)果也是如此。這說明用瀏覽器的“后退”或“前進(jìn)”方式訪問已緩存的頁面時(shí),或者直接在瀏覽器地址欄中訪問已緩存的頁面時(shí),瀏覽器將直接調(diào)用緩存的內(nèi)容,而不向服務(wù)器發(fā)出新的訪問請(qǐng)求。
          在圖4.18所示的Windows資源管理器窗口中刪除CacheServlet頁面的緩存文件,再次使用“后退”和“前進(jìn)”按鈕訪問CacheServlet,或者直接在瀏覽器地址欄中輸入CacheServlet的訪問地址,這時(shí)候?yàn)g覽器窗口和Tomcat的命令行窗口中都將顯示出新的時(shí)間值。這說明,在緩存文件不再存在的情況下,使用“后退”和“前進(jìn)”按鈕訪問CacheServlet時(shí),或者直接在瀏覽器地址欄中輸入CacheServlet的訪問地址,瀏覽器將向服務(wù)器發(fā)出新的訪問請(qǐng)求。
          通過瀏覽器工具欄中的“后退”或“前進(jìn)”按鈕回到CacheTest.html頁面,然后單擊其中的超鏈接來訪問CacheServlet,這時(shí)可以看到瀏覽器窗口和Tomcat的命令行窗口中顯示出了新的時(shí)間值。重復(fù)這個(gè)過程,可以看到CacheServlet頁面每次都能顯示出新的時(shí)間值,這說明通過其他網(wǎng)頁文檔中的超鏈接來調(diào)用CacheServlet時(shí),瀏覽器將向服務(wù)器發(fā)出新的訪問請(qǐng)求,而不是調(diào)用已緩存的內(nèi)容。
          (6)修改CacheServlet.java源文件,取消對(duì)getLastModified方法的注釋,重新編譯CacheServlet.java源文件,等待Tomcat重新裝載CacheServlet后,在瀏覽器窗口中刷新對(duì)CacheServlet的訪問。打開Internet臨時(shí)文件夾(如果該文件夾原來已經(jīng)打開,則按F5鍵刷新一下),選中其中的CacheServlet緩存文件,從Windows資源管理器窗口中顯示出的摘要信息中可以看到,這次的CacheServlet緩存文件中有了一個(gè)上次修改時(shí)間的記錄信息,如圖4.20所示。


      圖4.20

      (7)重復(fù)第(4)步的操作,這時(shí)候的telnet窗口中顯示出的結(jié)果如圖4.21所示。


      圖4.21

          從圖4.21中可以看到,CacheServlet這次返回的響應(yīng)消息中多了一個(gè)Last-Modified頭字段,這正是圖4.20中顯示的CacheServlet緩存文件有了一個(gè)上次修改時(shí)間的記錄信息的原因。
          (8)回到瀏覽器窗口中,簡(jiǎn)要記住一下瀏覽器窗口和Tomcat的命令行窗口中顯示出的時(shí)間值,然后反復(fù)單擊瀏覽器工具欄中的“后退”和“前進(jìn)”按鈕,可以看到每次顯示出的CacheServlet頁面內(nèi)容都沒有變化,Tomcat的命令行窗口中也沒有打印出新的信息。直接在瀏覽器地址欄中輸入CacheServlet的訪問地址,結(jié)果也是如此。這種情況與在步驟(5)中看到的實(shí)驗(yàn)效果完全一樣。
          通過瀏覽器工具欄中的“后退”或“前進(jìn)”按鈕回到CacheTest.html頁面,單擊其中的超鏈接來訪問CacheServlet,這時(shí)看到瀏覽器窗口和Tomcat的命令行窗口中顯示出的內(nèi)容仍然沒有變化,多次重復(fù)這個(gè)過程,看到的結(jié)果還是沒有變化。這種情況與步驟(5)中的看到的實(shí)驗(yàn)效果截然不同,通過兩者的實(shí)驗(yàn)效果的對(duì)比,我們可以得出如下結(jié)論:

      如果某個(gè)頁面的響應(yīng)消息中包含有Last-Modified頭字段,當(dāng)通過其他網(wǎng)頁文檔中的超鏈接來調(diào)用這個(gè)頁面時(shí),瀏覽器只在每次啟動(dòng)后的第一次訪問這個(gè)頁面時(shí)才向服務(wù)器發(fā)出訪問請(qǐng)求,對(duì)于在這次啟動(dòng)運(yùn)行期間對(duì)該頁面的后續(xù)訪問,瀏覽器將不再向服務(wù)器發(fā)出訪問請(qǐng)求,而是直接調(diào)用緩存的內(nèi)容。在訪問一個(gè)普通的HTML文件時(shí),Tomcat的缺省Servlet都會(huì)產(chǎn)生一個(gè)Last-Modified頭字段來說明這個(gè)HTML文件的最新修改時(shí)間,因此,在瀏覽器的一次啟動(dòng)運(yùn)行期間,它只在對(duì)某個(gè)HTML文件進(jìn)行第一次訪問時(shí)才向服務(wù)器發(fā)出真正的訪問請(qǐng)求。對(duì)HTML文件的頁面來說,它的內(nèi)容正好在某個(gè)瀏覽器的某次運(yùn)行期間的對(duì)該頁面的第一次和后續(xù)訪問之間發(fā)生改變的概率很小,并且即使發(fā)生這種情況,也不會(huì)出現(xiàn)什么大的問題,所以,Tomcat的缺省Servlet的這種處理方式完全是合理的和應(yīng)該的。 
      如果某個(gè)頁面的響應(yīng)消息中沒有包含Last-Modified頭字段,當(dāng)通過其他網(wǎng)頁文檔中的超鏈接來調(diào)用這個(gè)頁面時(shí),瀏覽器在整個(gè)啟動(dòng)運(yùn)行期間對(duì)該頁面的每次訪問,都將向服務(wù)器發(fā)出訪問請(qǐng)求,而不會(huì)調(diào)用已緩存的內(nèi)容。因此,只要?jiǎng)討B(tài)網(wǎng)頁程序中沒有產(chǎn)生Last-Modified頭字段,就不用擔(dān)心通過超鏈接再次訪問該動(dòng)態(tài)網(wǎng)頁程序時(shí)會(huì)出現(xiàn)瀏覽器不向服務(wù)器發(fā)生訪問請(qǐng)求的問題。
          在瀏覽器窗口中刷新對(duì)CacheServlet的訪問,刷新的作用就是讓瀏覽器務(wù)必向服務(wù)器發(fā)出訪問請(qǐng)求,這時(shí)候?yàn)g覽器窗口中顯示出了新的內(nèi)容。查看啟動(dòng)Tomcat的命令行窗口,可以看到其中打印出類似如下的兩行新信息:
              getLastModified:1147408274473
              doGet:1147408274473
          這說明CacheServlet調(diào)用了getLastModified方法后,接著又調(diào)用了doGet方法。因?yàn)間etLastModified方法返回的是當(dāng)前時(shí)間,它肯定比瀏覽器發(fā)出的請(qǐng)求消息中的If-Modified-Since請(qǐng)求頭字段指定的時(shí)間值(即getLastModified方法上次被調(diào)用時(shí)返回的“當(dāng)前時(shí)間”)要新,所以,CacheServlet調(diào)用完getLastModified方法后,接著又調(diào)用了doGet方法,于是在瀏覽器中就看到了新的內(nèi)容。
          (9)修改CacheServlet.java源文件,讓getLastModified方法中的最后那條return語句返回一個(gè)固定的時(shí)間值,如下所示:
               protected long getLastModified(HttpServletRequest req)
                       {
                        long now = System.currentTimeMillis();
                        System.out.println("getLastModified:" + now);
                        return /*now*/1234;
                       }
          重新編譯CacheServlet.java源文件,等待Tomcat重新裝載CacheServlet后,新啟動(dòng)一個(gè)瀏覽器程序訪問CacheTest.html頁面,然后單擊CacheTest.html頁面中的“緩存測(cè)試”超鏈接訪問CacheServlet,這時(shí)顯示出來的CacheServlet頁面的內(nèi)容還是在步驟(8)中的最后看到的內(nèi)容,沒有發(fā)生改變!查看啟動(dòng)Tomcat的命令行窗口,可以看到其中僅打印出了一行類似如下的新信息:
              getLastModified:1147414361586
          這個(gè)現(xiàn)象說明,瀏覽器剛才確實(shí)向服務(wù)器發(fā)出了訪問請(qǐng)求。由于瀏覽器發(fā)出的請(qǐng)求消息中帶有一個(gè)If-Modified-Since請(qǐng)求頭字段,其設(shè)置值為上次的Last-Modified頭字段指定的時(shí)間,而CacheServlet中的getLastModified方法這次返回的時(shí)間值比Last-Modified頭字段指定的時(shí)間值更舊(在一般情況下應(yīng)該是相等,這里為了簡(jiǎn)化程序的編寫,僅僅是返回1234這個(gè)比較陳舊的時(shí)間值,但不影響實(shí)驗(yàn)效果),所以,CacheServlet沒有調(diào)用doGet方法(Tomcat的命令行窗口中沒有打印出doGet方法被調(diào)用的提示信息),而是向?yàn)g覽器返回一個(gè)304(Not Modified)狀態(tài)碼來表示瀏覽器緩存的版本是最新的,從而導(dǎo)致瀏覽器仍舊顯示出了上次緩存的內(nèi)容。
          在瀏覽器窗口中刷新對(duì)CacheServlet的訪問,這時(shí)瀏覽器中顯示的內(nèi)容依然如故,查看啟動(dòng)Tomcat的命令行窗口,可以看到其中又只是打印出了一行g(shù)etLastModified方法被調(diào)用的提示信息??梢姡绻麨g覽器緩存的某個(gè)頁面的響應(yīng)消息中包含有Last-Modified頭字段,當(dāng)瀏覽器再次向服務(wù)器發(fā)出針對(duì)該頁面的訪問請(qǐng)求時(shí),只要處理這個(gè)頁面的Servlet程序的getLastModified方法返回的時(shí)間值比上次的Last-Modified頭字段的時(shí)間值舊或者與之相同時(shí),服務(wù)器就不會(huì)返回新的內(nèi)容。
          (10)重復(fù)第(7)步的telnet訪問操作,等待服務(wù)器返回響應(yīng)結(jié)果后,接著輸入如下內(nèi)容:
               GET /it315/servlet/CacheServlet HTTP/1.1<回車>
               Host:<空格><回車>
               If-Modified-Since:<空格>Thu, 01 Jan 1970 00:00:01 GMT
               <回車>
          其中的If-Modified-Since頭字段中的值是從剛才返回的Last-Modified頭字段中進(jìn)行復(fù)制得到的,這時(shí)候可以看到服務(wù)器只返回了一個(gè)304(Not Modified)狀態(tài)碼,而沒有返回任何實(shí)體內(nèi)容。接著輸入如下內(nèi)容:
               GET /it315/servlet/CacheServlet HTTP/1.1<回車>
               Host:<空格><回車>
               If-Modified-Since:<空格>Thu, 01 Jan 1970 00:00:00 GMT
               <回車>
          注意,其中的If-Modified-Since頭字段中的值比上一次的值小了1秒,這時(shí)候可以看到服務(wù)器返回了200狀態(tài)碼和新的實(shí)體內(nèi)容,如圖4.22所示。


      圖4.22

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多