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. Week7(10月21日)

    Part I:提问  =========================== 1.请为下图编写视图代码,视图中表单提交后,交给当前控制器和动作处理. 2.如何实现点击列标题排序功能? 3.分页时采用了 ...

  2. Actor::updateMassFromShapes

    unity报错Actor::updateMassFromShapes: Compute mesh inertia tensor failed for one of the actor's mesh s ...

  3. phantomjs环境搭建已经运行

    1.下载phantomjs http://phantomjs.org/ 2.运行 新建phantomjs.bat,记得改目录路径 里面内容为: D:\java\phantomjs\phantomjs. ...

  4. 由于物化视图定义为on commit导致update更新基表慢的解决方案

    由于物化视图定义为on commit导致update更新基表慢的解决方案 以下是模拟和解决测试过程: (模拟update慢的过程) 1.首先基于基表创建物化视图日志: create materiali ...

  5. Sql Server 循环添加日期--(累加到一个字段中)

    SQL语句: ),) '

  6. 七、Nginx学习笔记七Nginx的Web缓存服务

    user www; worker_processes 1; error_log /usr/local/nginx/logs/error.log crit; pid /usr/local/nginx/l ...

  7. java--继承的一些笔记

    public class Person { public void display(){ System.out.println("Play Person..."); } stati ...

  8. 【转】java--final

    1.final数据 许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”.常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...

  9. Deamon Thread 讲解

    The daemon thread's life cycle is same with the life cycle of the application which starts this daem ...

  10. 第十一章 认识与学习BASH

    系统支持的shell在   /etc/shells里面 Bash Shell 的功能: 1.命令修补能力(histroy) 2.命令与档案补全功能 3.命令别名设定功能 4.工作前景背景控制 5.支持 ...