`
whoosh
  • 浏览: 234640 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

在J2EE项目中处理浏览器的缓存

阅读更多

本文参考: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  

分享到:
评论

相关推荐

    J2EE WEB缓存技术详解.doc

    这种方式可以减轻服务器负担,但如果用户频繁清除浏览器缓存,可能会影响缓存效果。 - **JCS (Java Caching System)**:是一种服务端缓存解决方案,将数据存储在服务器的内存或硬盘中,用户可以直接从服务器获取...

    j2ee maven 结合gulp构建工具构建 war 自动刷新浏览器缓存

    总结来说,通过结合J2EE、Maven和Gulp,我们可以创建一个高效的开发流程,其中Maven负责管理依赖和打包,Gulp则处理前端构建任务,包括自动刷新浏览器缓存,从而提高开发效率和用户体验。理解并熟练掌握这些工具的...

    j2EE 缓存 Web前端优化 后台 服务器优化

    1. **浏览器缓存(Web前端优化)** - **减少HTTP请求**:通过合并CSS和JavaScript文件,减少HTTP请求次数,从而加快页面加载速度。 - **减少DNS查找**:DNS查找会消耗时间,通过预加载DNS或使用CDN(内容分发网络...

    j2ee21:ajax01:get提交、post提交(完成用户名搜索),两者的区别(中文乱码问题、缓存问题)

    在本教程中,我们将深入探讨AJAX中的GET和POST提交方式,并解决它们在处理中文乱码和缓存问题时可能出现的挑战。 首先,让我们了解GET和POST的基本概念: 1. GET提交:GET是HTTP协议中最常见的请求方法,它将参数...

    J2EE工程实现中常见安全问题解决对策

    在J2EE工程实现中,确保系统的安全至关重要。本文主要探讨了几个关键的安全问题以及相应的解决对策,包括Session的安全管理、客户端缓存的安全设计,以及涉及到的相关技术如EJB、JAAS、JSP、JDBC等。 首先,Session...

    J2EE案例开发-源代码.

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个重要的企业级应用开发平台,它由Oracle公司(原Sun Microsystems)推出,主要用于构建分布式、多层的企业级应用程序。这个压缩包文件“《J2EE案例...

    j2ee个人博客系统

    【标题】"j2ee个人博客系统"是一个基于Java企业级平台(J2EE)开发的个人博客项目,旨在提供一个展示个人思想、分享技术经验的在线平台。这个项目是作者初次尝试使用SSH(Struts2 + Spring + Hibernate)框架进行...

    J2EE写的博客系统

    在本案例中,我们讨论的是一个基于J2EE技术实现的博客系统,它具备数据库支持,能够存储和管理用户的文章、评论以及其他相关信息。 1. **J2EE架构** J2EE架构包括了多个层次,如客户端层、Web层、业务逻辑层(EJB...

    J2EE案例《网络在线考试系统》

    在本项目中,Struts作为MVC(模型-视图-控制器)架构的实现工具,起到了关键的作用。 首先,我们来了解一下Struts框架。Struts是Apache软件基金会的一个开源项目,它提供了一种结构化的、可扩展的方式来组织Java ...

    J2EE实用技巧汇总

    3. **HTTP缓存控制**:"有关客户端浏览器缓存的Http头介绍"解释了HTTP头部如Cache-Control, Expires, ETag等在控制浏览器缓存中的作用,这对于优化Web应用的响应速度和减少网络带宽消耗至关重要。 4. **Tomcat连接...

    j2ee文件上传下载局域网网站

    在这个"j2ee文件上传下载局域网网站"项目中,开发者利用J2EE的技术栈创建了一个简易但实用的局域网内部文件传输平台。 1. **文件上传功能**:在J2EE环境中,文件上传通常涉及到Servlet和Java.IO流的使用。Servlet是...

    j2ee框架笔记详细介绍j2ee的框架结构

    - **事务管理**:在处理数据库操作时,确保事务的正确性和一致性,防止数据异常。 **J2EE框架结构** J2EE框架主要由以下几个层次构成: 1. **表示层(Presentation Tier)**:由JSP、JSF(JavaServer Faces)等...

    j2ee+mysql开发的电子商务购物网站产品管理

    在这个项目中,客户端可能是一个Web浏览器,应用服务器处理业务逻辑并调用数据库,而MySQL则作为数据存储层。 2. **Servlet和JSP**:Servlet是Java编写的服务器端程序,负责处理HTTP请求并生成响应。JSP则是一种...

    J2ee分布式系统框架设计

    2. **容器管理**:在J2EE中,容器(如Web容器、EJB容器)扮演着至关重要的角色,它们管理应用程序组件的生命周期,提供事务处理、安全控制、持久化和远程访问等功能,极大地简化了开发者的工作。 3. **组件模型**:...

    DWR框架DWR框架

    例如,在压缩包内的文件"A051]使用DWR开发AJAX+For+J2EE.wrf"可能是一个演示或者教程,详细介绍了如何使用DWR框架在J2EE环境中构建AJAX应用。这个文件可能涵盖从安装DWR,配置web.xml,编写可远程调用的Java类,到在...

    j2ee课程设计(题目:资源下载)

    在本J2EE课程设计中,我们关注的主题是“资源下载”。这个项目旨在让学生们实践J2EE平台上的Web应用程序开发,特别是在文件下载服务方面的应用。J2EE(Java 2 Platform, Enterprise Edition)是一个标准的Java平台,...

    java j2EE 电子商务网站设计

    在这个电子商务网站中,客户端可能是网页浏览器,Web层处理HTTP请求,业务逻辑层负责处理业务规则,而数据访问层则与数据库交互。 2. **Servlet与JSP**:作为Java Web开发的基础,Servlet用于接收和响应HTTP请求,...

    J2EE开发之常用开源项目介绍

    在处理大量数据时,合理的分页机制对于提升用户体验至关重要。Pager-taglib 是一种专门用于分页处理的标签库,它可以自动完成分页逻辑,大大简化了开发者的编码工作。 - **特点**: - 支持多种分页算法,可以根据...

Global site tag (gtag.js) - Google Analytics