易截截图软件、单文件、免安装、纯绿色、仅160KB

总结:JSP页面img图片缓存问题现象表述及问题解决

JSP页面img图片缓存问题现象表述及问题解决
l  问题表述:
当对含有头像的客服人员信息进行修改(含对头像信息的修改)后,重新打开数据修改界面,发现文本内容修改成功,而头像内容仍然显示为原来的头像——数据库中的对应信息头像所在字段数据已经成功更新。
 
l  前提:
jsp页面中进行了页面缓存清除处理:
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="cache-control" content="no-cache"/>
<meta http-equiv="expires" content="0"/>
当然,下边3行代码功能与上边的3行功能相同,页面中仅写一份
<%
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);  
%>
 
l  问题情景再现:
原jsp中img src写法:
<img src="<%=path%>/servlet/customer/personPic?cspId=${cspId}"></img>
 
要修改的数据界面:
 
修改数据后,再次进入此条数据的修改界面:
发现虽然其它文本字段都进行了相应修改,但是“头像”部分并没有修改为我们指定的图片(如下图,头像仍然显示为一个“叉”的形状)
查询数据库,发现数据库中的头像对应的blob字段中的数据已经更改为指定的图片。
 
l  问题解决(共两步):
(1)修改servlet:在进行数据读取的servlet中增加图片随机数代码
       //图片随机数
       double randomNum = Math.random();
       request.setAttribute("randomNum", randomNum);
(2)更新前台数据修改jsp:图片显示img标签的src中增加“randomNum”参数
<img src="<%=path%>/servlet/customer/personPic?cspId=${cspId}&randomNum=${randomNum}"></img>
 
重新打开同一人员的数据修改界面——成功显示刚才更新过的图片!!
 
 
l   原理:
由于在img的src中增加了随机数参数,多次访问图片时,浏览器认为是访问了不同的图片路径(或者说是访问了不同的图片),浏览器会每次重新访问服务器读取图片,而不再读取缓存中的图片。
 
 
 
相关参考:
Jsp页面中关于客户端图片缓存的解决


相关文档:

数据库缓存方案(Java版的,含测试JSP)(转)

http://hi.baidu.com/shedewang/blog/item/b4a71b254e43ce35c895599b.html
说是支持1亿pv/天,也许有点夸张,但如果您能认真看完相信也不会让您失望。
如果大家真想支持我、支持中国人开源项目,请把该文贴到自己的博客中或者收藏本文,记得包含文档的下载地址!!!!!!!谢谢。
我说的系统主要是构建在hibernate之上 ......

Resin下配置JSP虚拟主机

1.添加 host 块
每一个JSP虚拟主机有它自己的 host 块。每一个至少要定义id来指定虚拟主机的名字和一个root应用程序。一个 <root-directory>通常用来为主机定一个默认的web应用程序。
配置文件片段:
<server>
<host id='gryffindor.caucho.com'>
  <root-directory>/home/www/gryf ......

jsp的pageEncoding和contentType

pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是 ......

JSP内置对象及常用方法

1.request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
序号 方 法 说 明
1 object getAttribute(String name) 返回指定属性的属性值
2 Enumeration getAttributeNames() 返回所有可用属性名的枚举
3 String getCharacterEncoding( ......

JSP九大内置对象及四个作用域

九大对象:
内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用
1-out:
javax.servlet.jsp.JspWriter类型,代表输出流的对象。作用域为page(页面执行期)
request:javax.servlet.ServletRequest的子类型,此对象封装了由WEB浏览器或其它客户端生成地HTTP
请求的细节(参数 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号