纳速健身
标题:
JSP页面缓存技术--浏览器缓存
[打印本页]
作者:
awagink
时间:
2008-11-20 22:07
标题:
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.禁止客户端缓存要在<head>中加入类似如下内容:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="
Wed, 26 Feb 1997
08:21:57 GMT
">
或
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
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
from:
http://aumy2008.blogbus.com/logs/27584194.html
欢迎光临 纳速健身 (https://nasue.com/)
Powered by Discuz! X3.4