源码如下:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=gb2312"%><%!
private int count; // 计数
private final long MODIFIED_TIME = System.currentTimeMillis() / 1000 * 1000; protected long getLastModified(HttpServletRequest request) {
return MODIFIED_TIME;
}
%><%
response.setHeader("Cache-Control","public"); //这里已经给出命令要求开启缓存
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'TestCache.jsp' starting page</title>
<meta http-equiv="pragma" content="public"> //这里已经给出命令要求开启缓存
<meta http-equiv="cache-control" content="public"> //这里已经给出命令要求开启缓存
</head>
<body>
This is my JSP page. <p>
count= <%=(++count) %> // 这个值每次都增大1,应该是说明没有缓存吧
<br>
</body>
</html>怎么这个JSP页面无法缓存啊,每次刷新 count的值都增大1,说明是没有被缓存吧 我觉得应该是会被缓存的啊,请问各位这到底是甚么原因啊???
private int count; // 计数
private final long MODIFIED_TIME = System.currentTimeMillis() / 1000 * 1000; protected long getLastModified(HttpServletRequest request) {
return MODIFIED_TIME;
}
%><%
response.setHeader("Cache-Control","public"); //这里已经给出命令要求开启缓存
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'TestCache.jsp' starting page</title>
<meta http-equiv="pragma" content="public"> //这里已经给出命令要求开启缓存
<meta http-equiv="cache-control" content="public"> //这里已经给出命令要求开启缓存
</head>
<body>
This is my JSP page. <p>
count= <%=(++count) %> // 这个值每次都增大1,应该是说明没有缓存吧
<br>
</body>
</html>怎么这个JSP页面无法缓存啊,每次刷新 count的值都增大1,说明是没有被缓存吧 我觉得应该是会被缓存的啊,请问各位这到底是甚么原因啊???
解决方案 »
- 急求一个jsp+数据库的动态生成树例子
- 这段代码是不是恶意代码?
- com.fatcat.webchart在那儿下这个包??请教!
- jsp标签问题
- sql语句分页问题(access数据库)如何写?
- ireport 使用问题 param传入java对象
- 不显示删除回复显示所有回复显示星级回复显示得分回复 dwr返回数据格式是数组形式的如[[],[]],怎么样能返回json格式的啊
- 将数据写入Blob的问题
- 寻求一个登陆页面(login.jsp)有数据库的,!100分求!
- SSH的网络教学平台遇到了数据不能在jsp显示的问题 行数是对的,但行里面没有数据
- 怎样把IE中的表格用针式打印机打出来???
- 弹出窗口到底是如何定义的?为什么……
??????这个难道不是缓存吗?在tomcat容器中,一个JSP文件只对应一个类对象,你设置的是全局,当然是每次都加1,这个本来就是缓存,不知道你说的缓存是什么意思。
2.服务端响应客户端请求并将一个Last-Modified报头伴随正文发送给了客户端
3.过了一段时间后,客户端又向这个页面发出了请求并伴随了一个If-Modified-Since报头
4.服务器收到了客户端的请求,并将请求中的If-Modified-Since报头所指明时间(time1)和这个页面在服务器上被改动的时间(time2)相对比
5.若time1在time2之后,服务器应该不会发送这个页面的正文,而是只发送一个状态码为304的报头来告诉客户端这个页面应该从客户端缓存提取出来我想证实的就是以上这个过程,但既然客户端每次请求后,count的值都增加了1,那就是说明每次服务器都是发送了正文体来响应客户端的请求的啊,如果是从客户端的Cache中提取这个页面来显示,那count的值不变才对啊,我就是这里搞不明白了......如果我有甚么地方理解或表示错了,欢迎大家指正希望大家有知道的帮帮忙,解答一下这个问题,谢了
response.setHeader("Cache-Control", "Private");
response.addDateHeader("Expires", System.currentTimeMillis() + 3600000);但是这个仅仅告诉浏览器,尽量用缓存的内容,而不要每次都连接服务器。但是浏览器端是服务器无法控制的,在IE中,只要按F5刷新,IE不管有无缓存都会请求服务器如果确实需要一个用户在一段时间仅投票一次,考虑Session,或者让用户登录,可以保证每个用户仅投票一次
当页面中包含有服务器端指令的时候,不管html是否打开缓存,数据都会被重新加载
而楼主所指的缓存,实际上是浏览器对一些静态的东西的缓存
像图片、javascript文件、css文件
楼主的指令,意思就是告诉浏览器在指定的时间内,从高速缓存中读取图片等信息来填充当前页面、而不是从服务器重新下载
而要缓存动态的脚本,估计实现可能性很小
因为到目前为止,jsp还没有在api级实现缓存功能(在asp.net中已经实现,被称为页输出缓存)
检查的方法可以用firefox测试,在firefox的页面属性中可以看到页面文件的来源是磁盘缓存
还有一个方法
在本地测试,先完全载入页面,假设页面中有一个相对路径为 image/pic.gif的图片
重命名这个图片文件,或修改这个图片
刷新页面,发现图片还是原来的没有变化,说明图片被缓存了其实,只要你不在html页面中加入禁止缓存页面的指令,IE或其它浏览器都默认的会将一些文件缓存在本地磁盘中