1.概述

IE缓存虽然能提高已储存网站的访问速度,但是过度的IE缓存会影响浏览器的响应速度。同时还可能为网站的运行带来一些不必要的麻烦。例如:可能会因为浏览器缓存的应用,而导致Web服务器不能准确的计算一个页面或广告已被阅览的次数;在论坛或者网上商城系统中由于浏览器缓存的使用,导致更新的图片信息不能得到及时的显示;还有由于浏览器缓存的使用,而使网页设计者不能立即查看到网页更新后的效果。

所以在开发网站的过程中,最好是在程序中禁止浏览器缓存页面,从而避免上述问题的出现,也省去了手动清空浏览器缓存的麻烦。

本实例中应用过滤器在网站的运行过程中禁止浏览器缓存页面。当运行本实例时,注册明日购物网的用户,注册成功后。选择IE浏览器,单击鼠标右键选择“属性”命令,弹出Internet属性对话框,选择常规选项卡,在Internet临时文件中单击“设置”按钮,在弹出的设置对话框中单击“查看文件”按钮,将看到浏览器缓存中存储的文件,而此时该文件夹下没有任何文件。

2.技术要点

浏览器缓存(Browser Caching)是为了加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。

本实例主要应用过滤器可以重新设置请求报头信息的特点,在过滤器中设置HTML中meta标签的http-equiv属性,实现禁止浏览器缓存的功能。

meta是HTML语言head区的一个辅助性标签。meta标签有两个属性:http-equiv属性和name属性。

(1)name属性

用于描述网页,与之对应的属性值为content。content中的内容主要是用于搜索引擎机器人查找信息和分类信息。语法如下:

<meta name="参数" content="具体的参数值"> 

name属性的参数如表1所示。

表1 name属性的参数说明

参数

说明

举例

keywords

描述网页的关键字

<meta name ="keywords" content="明日科技,明日软件,明日图书">

description

描述网站的主要内容

<meta name="description" content="软件开发,图书编著">

robots

告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。content的参数有all,none,index,noindex,follow,nofollow。默认是all

<meta name="robots" content="none">

author

标注网页的作者

<meta name="author" content="吉林省明日软件公司科技有限公司">

(2)http-equiv属性

http-equiv相当于http的文件头作用,可以向浏览器传回一些有用信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content。content中的内容是各个参数的变量值。语法如下:

<meta http-equiv="参数" content="参数变量值">

<meta http-equiv="参数" content="参数变量值">

表2 http-equiv属性的参数说明

参数

说明

举例

expires

设定网页的到期时间,一旦网页过期,必须到服务器上重新传输

<meta http-equiv="expires" content="Fri, 10 Jan 2009 09:09:09 GMT">

注意:必须使用GMT的时间格式

Pragma

禁止浏览器从本地计算机的缓存中访问页面内容

<meta http-equiv="Pragma" content="no-cache">

Refresh

自动刷新并指向新页面

<meta http-equiv="Refresh" content="5;URL=http://www.mingribook.com">

Set-Cookie

如果网页过期,那么存储的cookie将被删除

<meta http-equiv="Set-Cookie" content="cookievalue=xxx;expires= Fri, 10 Jan 2009 09:09:09 GMT;path=/">

Window-target

强制页面在当前窗口以独立页面显示

<meta http-equiv="Window-target" content="_top">

用来防止在框架里调用自己的页面。

content-Type

设定页面使用的字符集。

<meta http-equiv="content-Type" content="text/html; charset=UTF-8">

上述是对meta标签的详细讲解,在本实例中主要应用的是http-equiv属性中的expires和Pragma参数,控制网页的过期时间和禁止浏览器从本地计算机的缓存中访问页面内容。

而真正控制网页缓存的是HTTP消息头中的Cache-control。其常见值有private、no-cache、max-age和must-revalidate等,默认值为private。

Cache-control的作用根据浏览方法的不同可以分为以下几种情况。

(1)以打开新窗口的方式进行浏览

如果指定cache-control的值为private、no-cache或者must-revalidate,那么打开新窗口访问时都会重新访问服务器;如果指定的值为max-age,那么在此值规定的时间里就不会重新访问服务器,例如:Cache-control: max-age=10。表示当访问此网页后的10秒内再次访问不会去服务器。

(2)在地址栏中单击回车进行浏览

如果值为private或must-revalidate,则只有第一次访问时会访问服务器,以后就不再访问;如果值为no-cache,那么每次都会访问;如果值为max-age,则在过期之前不会重复访问。

(3)按后退按扭进行浏览

如果值为private、must-revalidate、max-age,则不会重复访问;如果值为no-cache,则每次都重复访问。

(4)按刷新按扭

无论为何值,都会重复访问。如果指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文件夹中留下页面备份。

3.具体实现

(1)首先创建index.jsp文件,生成明日购物网的用户注册页面。Form表单中的元素如表3所示。

表3 form表单中使用的元素

类型

名称

属性设置

说明

 

form_reg

method="post" action="index_ok.jsp" onSubmit="return chkreginfo(form_reg,'all')

表单名称

 
 

recuser

type="text" size="20" class="inputcss" onBlur="chkreginfo(form_reg,0)"

用户名

 

address

type="text" size="60" class="inputcss" onBlur="chkreginfo(form_reg,1)"

联系地址

 

postalcode

type="text" size="20" class="inputcss" onBlur="chkreginfo(form_reg,2)"

邮政编码

 

qq

type="text" size="20" class="inputcss" onBlur="chkreginfo(form_reg,3)"

QQ号码

 

email

type="text" size="20" class="inputcss" onBlur="chkreginfo(form_reg,4)"

邮箱地址

 

mtel

type="text" size="20" class="inputcss" onBlur="chkreginfo(form_reg,5)"

手机号码

 

gtel

type="text" size="20" class="inputcss" onBlur="chkreginfo(form_reg,6)"

座机号码

 
 

imageField

type="image" src="data:images/sy_15.jpg"

提交按钮

 

ImageField2

onClick="form_reg.reset()"style="cursor:hand"

取消按钮

 
           

(2)创建index_ok.jsp文件,输出从Request对象中获取的提交数据。

(3)创建BrowserNoCacheFilter类,通过过滤器禁止浏览器缓存页面。在doFilter()方法中为meta标签的http-equiv属性设置三个参数:Cache-Control、Pragma和Expires,禁止浏览器缓存页面。其关键代码如下:

public class BrowserNoCacheFilter implements Filter {
public void init(FilterConfig filterconfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterchain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache"); //HTTP消息头,控制网页的缓存
((HttpServletResponse) response).setHeader("Pragma", "no-cache"); //禁止浏览器从缓存中调阅页面内容
((HttpServletResponse) response).setHeader("Expires", "-1"); //指定网页在缓存中的过期时间
filterchain.doFilter(request, response);
}
public void destroy() {
}
}

(4)最后在web.xml文件中配置BrowserNoCacheFilter类,为过滤器创建初始值。首先通过<filter></filter>标签配置Servlet过滤器的名称和所在包的类名,然后通过<init-param></ init-param>标签设置过滤器的初始值,最后通过<filter-mapping></filter-mapping>标签配置Servlet过滤器的映射路径。其关键代码如下:

<filter>
<!—servlet过滤器的名称 -->
<filter-name>BrowserNoCacheFilter</filter-name>
<!—servlet过滤器的包所在类名称-->
<filter-class>com.pkh.BrowserNoCacheFilter</filter-class>
<init-param>
<param-name>Cache-control</param-name>
<param-value>no-cache</param-value>
</init-param>
<init-param>
<param-name>Pragma</param-name>
<param-value>no-cache</param-value>
</init-param>
<init-param>
<param-name>Expires</param-name>
<param-value>-1</param-value>
</init-param>
</filter>
<filter-mapping>
<!--要映射的servlet过滤器名称-->
<filter-name>BrowserNoCacheFilter </filter-name>
<!--要映射的servlet过滤器映射的范围-->
<url-pattern>/ *</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

Servlet过滤器——使用过滤器禁止浏览器缓存页面的更多相关文章

  1. 禁止浏览器缓存- make sure web page is not cached

    如何禁止浏览器缓存,网上搜到的解决方法都测试无效. 基本上全都是 Cache-Control: no-cache Pragma: no-cache Expires: 0 Google了一下,找到了解决 ...

  2. 使用Filter防止浏览器缓存页面或请求结果

    仅仅须要两步: 1.定义一个Filter: /** * 防止浏览器缓存页面或请求结果 * @author XuJijun * */ public class NoCacheFilter impleme ...

  3. filter 过滤器 禁止浏览器缓存

    public class BrowserNoCacheFilter implements Filter { public void init(FilterConfig filterconfig) th ...

  4. 禁止浏览器缓存input值

    如果不想让浏览器缓存input的值,有2种方法: 方法一: 在不想使用缓存的input中添加 autocomplete="off"; <input type="te ...

  5. nginx 禁止浏览器缓存

    如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制. location /{ expires 1s; } 如果Get页面未做任何修改,服务器就是对客户端返回304 Not ...

  6. 谷歌浏览器(Chrome)禁止浏览器缓存 设置

    在开发项目期间用谷歌浏览器调试,他总是缓存我的css样式这个很气人啊,后经过摸索找到了方法,如下 先F12或者shift+ctrl+j 打开调试者工具,在找Network这个tab按钮,点击进入,勾选 ...

  7. 禁止浏览器缓存js

    方法:在js文件后加上数学随机数; Math.random() 比如:源代码为 <script src="./js/lib/require/require.js" data- ...

  8. ajax禁止浏览器缓存

    把cache 设置为false ,把 ifModified 设置为true //工作计划function workprogram(date_time){    $.ajax({        asyn ...

  9. 禁止火狐浏览器缓存input标签方法

    禁止火狐浏览器缓存input标签方法 问题1:在火狐浏览器里,云平台的输入框.选项框.勾选框…填写之后按F5刷新页面,之前填的东西会保留着,其它浏览器不会火狐强制刷新用Ctrl + F5 浏览器自动保 ...

随机推荐

  1. Android有效解决加载大图片时内存溢出的问题

    首先,您需要了解一下,图片占用内存的计算方法,传送门:http://blog.csdn.net/scry5566/article/details/11568751 尽量不要使用setImageBitm ...

  2. POJ 3261 Milk Patterns(后缀数组+二分答案+离散化)

    题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 分析:经典的后缀数组求解题:先二分答案,然后将后缀分成若干组.这里要判断的是有没有一个组的符合要求的后缀个数(height ...

  3. matrix(dp)

    matrix Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  4. linux定时调度器每秒运行一次

    linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...

  5. jQuery手写几个常见的滑动下拉菜单 分分秒秒学习JS

    一般的企业网站再我们再实际工作中,有些特效,用jQuery来做,显得极其简单,除非一些大的公司,需要封装自己的类. 今天,我们讲解jQuery入门知识,来写几个简单jQuery滑动下拉菜单.感受一下j ...

  6. 转:onConfigurationChanged的作用

    API原文说明:android:configChangesLists configuration changes that the activity will handle itself. When ...

  7. centos7安装codeblocks教程

    author:lidabo 装了好多次系统,每次装的时候都有要在网上各种查,太麻烦了.所以决定记录一下,以后用到的时候会方便一些.当然,本文来源于网络,取百家之长,最重要的是本人已验证过,说明对本系统 ...

  8. 幻世(OurDream)2D图形引擎使用教程9——处理操作输入(3)

    声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 现在我们该 ...

  9. No http handler was found for request type 'GET'

    asp.net 运用统计图表的时候,在本地运行,没有问题,发布到服务器上的IIS后,就报这个错误,具体错误 看图 这个图片真恶心,网上找了下,资料不多,但是还是有个能真正解决问题的, 解决方法是,在w ...

  10. string和byte[]的转换 (C#)

    原文 string和byte[]的转换 (C#) string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes  ...