解决浏览器缓存问题

1,引题

   什么是缓存,就不用解释了, 大家在更新CSDN博客时经常遇到的问题,很头疼. 如何解决浏览器的缓存问题,看例子.

2,例子

一个访问页面计数器的小例子(效果:每点击一次按钮,访问次数+1).不多做解释,直接运行,看运行效果.

(1)代码

AJAXNew.html中:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2.     <head>  
  3.         <title></title>  
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5.         <script type="text/javascript">  
  6.            var cachexmlhttp;     
  7.            function cache(){  
  8.                //创建XMLHttpRequest对象  
  9.                if(window.XMLHttpRequest){  
  10.                    //IE7、IE8、FireFox、Mozilla、Safari、Opera  
  11.                    cachexmlhttpnew XMLHttpRequest();  
  12.                    if(cachexmlhttp.overrideMimeType){  
  13.                        cachexmlhttp.overrideMimeType("text/xml");  
  14.                    }  
  15.                }else if(window.ActiveXObject){  
  16.                    //IE6,IE5.5,IE5  
  17.                    var activexName=["MSXML2.XMLHTTP.60","MSXML2.XMLHTTP.5.0",  
  18.                        "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP",  
  19.                         "Miscrosoft.XMLHTTP"];  
  20.                     for(var i=0;i<activexName.length;i++){  
  21.                         try{  
  22.                             cachexmlhttp=new ActiveXObject(activexName[i]);  
  23.                             break;  
  24.                         }catch(e){  
  25.                               
  26.                         }                      
  27.                     }                  
  28.                }   
  29.                if(cachexmlhttp===undefined || cachexmlhttp===null){  
  30.                    alert("当前浏览器不支持创建XMLHttpRequest对象,请更换浏览器");  
  31.                    return;  
  32.                }  
  33.                //2,注册回调方法  
  34.                cachexmlhttp.onreadystatechange=function(){  
  35.                    if(cachexmlhttp.readyState===4){  
  36.                        if(cachexmlhttp.status===200){  
  37.                            var message=cachexmlhttp.responseText;  
  38.                            var div=document.getElementById("cachemessage");  
  39.                            div.innerHTML=message;  
  40.                        }  
  41.                    }  
  42.                };  
  43.                 
  44.                //3,设置和服务器端交互的相应参数——Get方式  
  45.                cachexmlhttp.open("GET","Cache",true);  
  46.                  
  47.                //4,设置向服务器端发送的数据,启动和服务器端的交互  
  48.                cachexmlhttp.send(null);  
  49.            }  
  50.              
  51.         </script>       
  52.     </head>  
  53.     <body>  
  54.         <div id="message"></div>  
  55.         <br/>  
  56.       <input type="button" onclick="cache();" value="测试缓存问题"/>  
  57.         
  58.       <div id="cachemessage"></div>  
  59.     </body>  
  60. </html>  

Cache.java(一个Servlet)中:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.annotation.WebServlet;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. /** 
  10.  * 
  11.  * @author xuemin 
  12.  */  
  13. @WebServlet(urlPatterns = {"/Cache"})  
  14. public class Cache extends HttpServlet {  
  15.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
  16.             throws ServletException, IOException {  
  17.         response.setContentType("text/html;charset=UTF-8");  
  18.         PrintWriter out = response.getWriter();  
  19.         try {  
  20.            Integer counter = (Integer)request.getSession().getAttribute("Counter");  
  21.              if(counter ==null){  
  22.                  counter = 0;  
  23.              }else{  
  24.                 counter++;  
  25.              }  
  26.              request.getSession().setAttribute("Counter",counter);  
  27.              out.println("当前计数器的值为:"+counter);  
  28.         } finally {              
  29.             out.close();  
  30.         }  
  31.     }  

(2)运行(IE中)

IE中运行后,打开HttpWatch  Basic(前提是安装了HttpWatch Basic);

观察第一次点击“测试缓存问题”按钮和第二次点击的 ResultURL有什么不同?


 

点击第一次:


 

点击第二次:


(而,按我们代码所期望,第二次点击后的运行结果应该是:当前计数器的值为1为什么仍未0?)

 

3,分析问题

HttpWatch Basic中观察:


——很明显第二次访问的是缓存,因为两次访问的URl一样,第二次访问时,缓存中存在,所以不会创建新的请求,而直接从缓存中读取,所以就有了缓存问题。

 

4,解决问题

如何解决?

——增加时间戳。

关键代码:

if(url.indexOf("?")>=0){

      url=url+"&t="+(newDate()).valueOf();

 }else{

         url=url+"?t"+(newDate()).valueOf();

 }

修改function cache()中的代码:


IE中运行,查看运行结果:

 

点击第一次:


 

点击第二次:


 

HttpWatch Basic中观察:


——两次请求均创建,两次请求URL不同;缓存问题解决。

 

5,总结:

(1) 解决浏览器缓存问题:

——增加时间戳。

关键代码:

if(url.indexOf("?")>=0){

      url=url+"&t="+(newDate()).valueOf();

 }else{

         url=url+"?t"+(newDate()).valueOf();

 }

(2)学会使用HttpWatch Basic

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值