您好,欢迎访问这里是深圳市硕远科技有限公司!
戴尔服务器价格_IBM联想配置_浪潮代理-深圳市硕远科技有限公司
联系我们
戴尔服务器价格_IBM联想配置_浪潮代理-深圳市硕远科技有限公司
邮箱:2324898850@qq.com
电话:400-080-6079
地址:深圳市龙华区河背工业区108创业园A301
当前位置:主页 > 新闻动态 > 行业新闻 >

行业新闻

HTML清除浏览器缓存
发布时间:2021-09-23 12:00浏览次数:
JSP 页面缓存技术浏览器缓存 一、概述 缓存的思想可以应用在软件分层的各个层面。 它是一种内部机制, 对外界而言, 是不可 感知的。 数据库本身有缓存,持久层也可以缓存。 (比如: hibernate ,还分 1 级和 2 级缓存) 业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存) 。 表现层 / 数据服务层(传统 web 的表现层)也可以设置缓存( jsp cache 就是这一层,实 现在 app server 上的缓存机制) 另外 Browser 也有缓存 (如 IE ) 这个大家也都知道 (实现在 web server 上的缓存机制) 。 越上层的缓存效果越好,越底层的缓存影响越深远。 二、缓存实现(浏览器缓存当前访问的 JSP 动态页面) (一) 、服务端方法: < % response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", -10); % > (二) 、客户端方法: meta 是用来在 HTML 文档中模拟 HTTP 协议的响应头报文。 meta 标签用于网页的< head > 与< /head >中, meta 标签的用处很多。 meta 的属性有两种: name 和 http-equiv 。 name 属性主要用于描述网页, 对应于 content ( 网页内容) , 以便于搜索引擎机器人查找、 分类 (目 前几乎所有的搜索引擎都使用网上机器人自动查找 meta 值来给网页分类) 。这其中最重要 的是 description (站点在搜索引擎上的描述)和 keywords (分类关键词) ,所以应该给每页 加一个 meta 值。比较常用的有以下几个: name 属性 1 、< meta name="Generator" contect="" >用以说明生成工具(如 Microsoft FrontPage 4.0 ) 等; 2 、< meta name="KEYWords" contect="" >向搜索引擎说明你的网页的关键词; 3 、< meta name="DEscription" contect="" >告诉搜索引擎你的站点的主要内容; 4 、< meta name="Author" contect=" 你的姓名 " >告诉搜索引擎你的站点的制作的作者; 5 、< meta name="Robots" contect="all|none|index|noindex|follow|nofollow" > 其中的属性说明如下: 设定为 all :文件将被检索,且页面上的链接可以被查询; 设定为 none :文件将不被检索,且页面上的链接不可以被查询; 设定为 index :文件将被检索; 设定为 follow :页面上的链接可以被查询; 设定为 noindex :文件将不被检索,但页面上的链接可以被查询; 设定为 nofollow :文件将不被检索,页面上的链接可以被查询。 http-equiv 属性 1 、< meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80" > 和 < meta http-equiv="Content-Language" contect="zh-CN" >用以说明主页制作所使用的文 字以及语言;又如英文是 ISO-8859-1 字符集,还有 BIG5 、 utf-8 、 shift-Jis 、 Euc 、 Koi8-2 等字 符集; 2 、< meta http-equiv="Refresh" contect="n;url=http://yourlink" >定时让网页在指定的时间 n 内,跳转到页面 http;//yourlink ; 3 、< meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT" >可以用于设定网 页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用 GMT 时间格 式; 4 、 < meta http-equiv="Pragma" contect="no-cache" >是用于设定禁止浏览器从本地机的缓存 中调阅页面内容,设定后一旦离开网页就无法从 Cache 中再调出; 5 、< meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT" > cookie 设定, 如果网页过期,存盘的 cookie 将被删除。需要注意的也是必须使用 GMT 时间格式; 6 、< meta http-equiv="Pics-label" contect="" >网页等级评定,在 IE 的 internet 选项中有一项 内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过 meta 属性来设置 的; 7 、< meta http-equiv="windows-Target" contect="_top" >强制页面在当前窗口中以独立页面 显示,可以防止自己的网页被别人当作一个 frame 页调用; 8 、< meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)" >和< meta http-equiv="Page-Exit" contect="revealTrans(duration=20 , transtion =6)" >设定进入和离 开页面时的特殊效果,这个功能即 FrontPage 中的“格式 / 网页过渡” ,不过所加的页面不能 够是一个 frame 页面。 三、缓存应用 (一) 、防止 JSP 页面缓存为了防止浏览器缓存当前访问的 JSP 动态页面,可以采用如下的 方式进行设置: <% // 将过期日期设置为一个过去时间 response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT"); // 设置 HTTP/1.1 no-cache 头 response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate"); // 设置 IE 扩展 HTTP/1.1 no-cache headers , 用户自己添加 response.addHeader("Cache-Control", "post-check=0, pre-check=0"); // 设置标准 HTTP/1.0 no-cache header. response.setHeader("Pragma", "no-cache"); %> 当然,每一个页面都包含这些代码会很繁琐,可以通过自定义过滤器( Filter )的方法来处 理相关的页面 二) 、 jsp,html 清除页面缓存 1. 禁止客户端缓存要在 中加入类似如下内容: 2. 在服务器的动态网页中禁止缓存,要加入类似如下脚本 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); (三)设置有限时间的缓存 int minutes = 10; Date d = new Date(); String modDate = d.toGMTString(); String expDate = null; expDate = (new Date(d.getTime() + minutes * 60000)).toGMTString(); response.setHeader("Last-Modified", modDate); response.setHeader("Expires", expDate); response.setHeader("Cache-Control", "public"); // HTTP/1.1 response.setHeader("Pragma", "Pragma"); // HTTP/1.0 补充:关于 .jsp cache 的几条建议 : 1.jsp cache 最好做在过滤器上 , 把需要缓冲的页面集中在同一个目录下 , 每次更改只须更改 web.xml 就可以完成缓冲设置 , 这样比较方便 . 2.Gzip 压缩可以将页面压缩得很小 , 平均压缩比为 1/3,jsp cache 的 HashMap 缓冲压缩后的页 面 , 肯定比没压缩前更节约内存消耗 , 并且效率更高 . 关于 Gzip 可以参考这个开源项 目 :http://sourceforge.net/projects/pjl-comp-filter 另外: : : 浏览器的后退按钮使得我们能够方便地返回以前访问过的页面, 它无疑非常有用。 但有时候 我们不得不关闭这个功能,以 防止用户打乱预定的页面访问次序。 本文介绍网络上可找到的各种禁用浏览器后退按钮方案, 分析它们各自的优缺点和适 用场合。 一、概述 曾经有许多人问起, “怎样才能‘禁用 ' 浏览器的后退按钮?” ,或者“怎样才能防止用 户点击后退按钮返回以前浏 览过的页面?”在 ASP 论坛上,这个问题也是问得最多的问题之一。遗憾的是,答案非常 简单:我们无法禁用浏览器的后退 按钮。 起先我对于居然有人想要禁用浏览器的后退按钮感到不可思议。后来,看到竟然有那 么多的人想要禁用这个后退按 钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮) 。因为在默认情况 下,用户提交表单之后可以通 过后退按钮返回表单页面 (而不是使用“编辑” 按钮! ) ,然后再次编辑并提交表单向数据库 插入新的记录。这是我们不 愿看到的。 因此我就决定要找出避免出现这种情况的方法。我访问了许多网站,参考了这些网站 所介绍的各种实现方法。如果你 经常访问 ASP 编程网站,本文所介绍的部分内容你可能已经见到过。本文的任务是把各种 可能的方法都介绍给大家,然后找 出最好的方法! 二、禁止缓存 在我找到的许多方案中,其中有一种建议禁止页面缓存。具体是使用服务器端脚本, 如下所示: <% Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-cache" %> 这种方法非常有效! 它强制浏览器重新访问服务器下载页面, 而不是从缓存读取页面。 使用这种方法时,编程者的主 要任务是创建一个会话级的变量, 通过这个变量确定用户是否仍旧可以查看那个不适合通过 后退按钮访问的页面。由于浏 览器不再缓存这个页面, 当用户点击后退按钮时浏览器将重新下载该页面, 此时程序就可以 检查那个会话变量,看看是否 应该允许用户打开这个页面。 例如,假设我们有如下表单: <% Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-cache" If Len(Session("FirstTimeToPage")) > 0 then &single; 用户已经访问过当前页面,现在是再次返回访问。 &single; 清除会话变量,将用户重定向到登录页面。 Session("FirstTimeToPage") = "" Response.Redirect "/Bar.asp" Response.End End If &single; 如果程序运行到这里,说明用户能够查看当前页面 &single; 以下开始创建表单 %>
我们借助会话变量 FirstTimeToPage 检查用户是否是第一次访问当前页面。如果不是第 一次(即 Session ("FirstTimeToPage") 包含某个值) ,那么我们就清除会话变量的值,然后把用户重新定向到一 个开始页面。这样,当表单 提交时(此时 SompePage.asp 被打开) ,我们必须赋予 FirstTimeToPage 一个值。即,在 SomePage.asp 中我们需要加上下面 的代码: Session("FirstTimeToPage") = "NO" 这样, 已经打开 SomePage.asp 的用户如果点击后退按钮, 浏览器将重新请求服务器下 载页面,服务器检查到 Session ("FirstTimeToPage") 包含了一个值,于是就清除 Session("FirstTimeToPage") ,并把用户重定向 到其他页面。当然,所有 这一切都需要用户启用了 Cookie ,否则会话变量将是无效的。 (有关该问题的更多说明,请 参见 For session variables to work, must the Web visitor have cookies enabled? ) 另外,我们也可以用客户端代码使浏览器不再缓存 Web 页面: 如果使用上面的方法强制浏览器不再缓存 Web 页面,必须注意以下几点: 只有在使用安全连接时“ Pragma: no-cache ”才防止浏览器缓存页面。对于不受安全保护的 页面, “ Pragma: no-cache ” 被视为与“ Expires: -1 ”相同,此时浏览器仍旧缓存页面,但把页面标记为立即过期。 在 IE 4 或 5 中, “ Cache-Control ” META HTTP-EQUIV 标记将被忽略,不起作用。 在实际应用中我们可以加上所有这些代码。然而,由于这种方法不能适用于所有的浏 览器,所以是不推荐使用的。但 如果是在 Intranet 环境下,管理员可以控制用户使用哪种浏览器,我想还是有人会使用这种 方法。 三、其他方法 接下来我们要讨论的方法以后退按钮本身为中心,而不是浏览器缓存。这儿有一篇文 章 Rewiring the Back Button 很 值得参考。 不过我注意到, 如果使用这种方法, 虽然用户点击一下后退按钮时他不会看到以 前输入数据的页面,但只要点 击两次就可以, 这可不是我们希望的效果, 因为很多时候, 固执的用户总是能够找到绕过预 防措施的办法。 另外一种禁用后退按钮的办法是用客户端 JavaScript 打开一个没有工具条的窗口, 这使 得用户很难返回前一页面,但 不是不可能。 一种更安全但相当恼人的方法是, 当表单提交时打开一个新的窗口, 与此同时 关闭表单所在的窗口。但我觉 得这种方法不值得认真考虑,因为我们总不能让用户每提交一个表单就打开一个新窗口。 那么, 在那个我们不想让用户返回的页面是否也可以加入 JavaScript 代码呢?在这个页 面中加入的 JavaScript 代码可 用来产生点击前进按钮的效果, 这样也就抵消了用户点击后退按钮所产生的动作。 用于实现 该功能的 JavaScript 代码如下 所示: 同样地,这种方法虽然有效,但距离“最好的方法”还差得很远。后来我又看到有人 建议用 location.replace 从一个 页面转到另一个页面。这种方法的原理是,用新页面的 URL 替换当前的历史纪录,这样浏 览历史记录中就只有一个页面,后
400-080-6079