易截截图软件、单文件、免安装、纯绿色、仅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页面中关于客户端图片缓存的解决


相关文档:

JSP学习(一)

JSP基本语法
大部分JSP被一个以“<%” 开头和以“%>”结尾的的标记括在其中。在更新的JSP 1.1规范出台后,就有了与XML兼容的版本。
JSP指令和脚本元素
Directives <%@ directive %>
Declarations <%! declaration %>
Expressions <%= expression %>
Code Fragment/ ......

Resin下配置JSP虚拟主机

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

jsp九种内置对象


JSP九种内置对像,不用定义可直接使用:request,请求对象;response,响应对象;pageContext,页面上下文对象;session,会话对象;application,应用程序对象;out,输出对象;config,配置对象;page,页面对象;exception,例外对象。
......

resin服务器中通过SSI包含JSP页面

1、一、先提条件: 在web.xml中加以下语句(原因参考RESIN官方文档)    
<servlet>
         <servlet-name>SSIServlet</servlet-name>
        <servlet-class>com.caucho.servlets.ssi.SS ......

jsp中使用javabean的两点注意事项

jsp中使用javabean的两点注意事项
首先一点:javabean一定要放在命名包里,不能放在默认包里,也就是在bean文件的开头要package pname;了,如果不放在命名包里而放在了默认包里,最后将报如下这样的错误:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 18 in the ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号