本文参考:http://aumy2008.blogbus.com/logs/27584194.html
一、概述
缓
存的思想可以应用在软件分层的各个层面。它是一种内部机制,对外界而言,是不可感知的。
数据库本身有缓存,持久层
也可以缓存。(比如:
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", 0);
(二)、客户端方法:
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
分享到:
相关推荐
这种方式可以减轻服务器负担,但如果用户频繁清除浏览器缓存,可能会影响缓存效果。 - **JCS (Java Caching System)**:是一种服务端缓存解决方案,将数据存储在服务器的内存或硬盘中,用户可以直接从服务器获取...
总结来说,通过结合J2EE、Maven和Gulp,我们可以创建一个高效的开发流程,其中Maven负责管理依赖和打包,Gulp则处理前端构建任务,包括自动刷新浏览器缓存,从而提高开发效率和用户体验。理解并熟练掌握这些工具的...
1. **浏览器缓存(Web前端优化)** - **减少HTTP请求**:通过合并CSS和JavaScript文件,减少HTTP请求次数,从而加快页面加载速度。 - **减少DNS查找**:DNS查找会消耗时间,通过预加载DNS或使用CDN(内容分发网络...
在本教程中,我们将深入探讨AJAX中的GET和POST提交方式,并解决它们在处理中文乱码和缓存问题时可能出现的挑战。 首先,让我们了解GET和POST的基本概念: 1. GET提交:GET是HTTP协议中最常见的请求方法,它将参数...
在J2EE工程实现中,确保系统的安全至关重要。本文主要探讨了几个关键的安全问题以及相应的解决对策,包括Session的安全管理、客户端缓存的安全设计,以及涉及到的相关技术如EJB、JAAS、JSP、JDBC等。 首先,Session...
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个重要的企业级应用开发平台,它由Oracle公司(原Sun Microsystems)推出,主要用于构建分布式、多层的企业级应用程序。这个压缩包文件“《J2EE案例...
【标题】"j2ee个人博客系统"是一个基于Java企业级平台(J2EE)开发的个人博客项目,旨在提供一个展示个人思想、分享技术经验的在线平台。这个项目是作者初次尝试使用SSH(Struts2 + Spring + Hibernate)框架进行...
在本案例中,我们讨论的是一个基于J2EE技术实现的博客系统,它具备数据库支持,能够存储和管理用户的文章、评论以及其他相关信息。 1. **J2EE架构** J2EE架构包括了多个层次,如客户端层、Web层、业务逻辑层(EJB...
在本项目中,Struts作为MVC(模型-视图-控制器)架构的实现工具,起到了关键的作用。 首先,我们来了解一下Struts框架。Struts是Apache软件基金会的一个开源项目,它提供了一种结构化的、可扩展的方式来组织Java ...
3. **HTTP缓存控制**:"有关客户端浏览器缓存的Http头介绍"解释了HTTP头部如Cache-Control, Expires, ETag等在控制浏览器缓存中的作用,这对于优化Web应用的响应速度和减少网络带宽消耗至关重要。 4. **Tomcat连接...
在这个"j2ee文件上传下载局域网网站"项目中,开发者利用J2EE的技术栈创建了一个简易但实用的局域网内部文件传输平台。 1. **文件上传功能**:在J2EE环境中,文件上传通常涉及到Servlet和Java.IO流的使用。Servlet是...
- **事务管理**:在处理数据库操作时,确保事务的正确性和一致性,防止数据异常。 **J2EE框架结构** J2EE框架主要由以下几个层次构成: 1. **表示层(Presentation Tier)**:由JSP、JSF(JavaServer Faces)等...
在这个项目中,客户端可能是一个Web浏览器,应用服务器处理业务逻辑并调用数据库,而MySQL则作为数据存储层。 2. **Servlet和JSP**:Servlet是Java编写的服务器端程序,负责处理HTTP请求并生成响应。JSP则是一种...
例如,在压缩包内的文件"A051]使用DWR开发AJAX+For+J2EE.wrf"可能是一个演示或者教程,详细介绍了如何使用DWR框架在J2EE环境中构建AJAX应用。这个文件可能涵盖从安装DWR,配置web.xml,编写可远程调用的Java类,到在...
在本J2EE课程设计中,我们关注的主题是“资源下载”。这个项目旨在让学生们实践J2EE平台上的Web应用程序开发,特别是在文件下载服务方面的应用。J2EE(Java 2 Platform, Enterprise Edition)是一个标准的Java平台,...
在这个电子商务网站中,客户端可能是网页浏览器,Web层处理HTTP请求,业务逻辑层负责处理业务规则,而数据访问层则与数据库交互。 2. **Servlet与JSP**:作为Java Web开发的基础,Servlet用于接收和响应HTTP请求,...
在处理大量数据时,合理的分页机制对于提升用户体验至关重要。Pager-taglib 是一种专门用于分页处理的标签库,它可以自动完成分页逻辑,大大简化了开发者的编码工作。 - **特点**: - 支持多种分页算法,可以根据...