这2天改页面的BUG的时候遇到个很郁闷的问题,每次修改过JSP都不去重新Load,后来经人提醒是时间戳的问题,每次保存修改的JSP的时候都要把系统时间改成2008年,weblogic才能重新编译。删除application,重新explod也不行。
上网查了下资料,才发现weblogic重新编译的条件。
JSP容器通过实现StaleChecker接口调用_staticIsStale()方法。该实现接收一个带有清单1中所示参数的回调(isResourceStale())。有了这些参数,该实现可以仅接收所有必需的信息,以推断给定资源是否过期。当资源(参数1)/foo.jsp的时间戳(参数2)比存储在已编译类文件中的时间戳还要新(参数更大)时,或者当发行版本不同时,JSP容器认为JSP.class文件“过期”。
清单1. staticIsStale()方法
publicstaticboolean_staticIsStale(weblogic.servlet.jsp.StaleChecker sci)
{
if(sci.isResourceStale("/foo.jsp",1089594167518L,"8.1.2.0",
"America/Los_Angeles"))
returntrue;
returnfalse;
}
因为JSP页面的时间戳保存在类文件内部,并且是在编译时计算的,所以修改类文件的时间戳不会对过期检查过程产生影响。
第4个参数,也就是时区,只在以存档格式(.war)进行部署时使用。
WebLogic发行版本随每个服务包改变,因此需要为每个服务包重新编译所有JSP。提出这个要求是为了确保JSP类可以利用较新服务包或发行版本中的所有编译器缺陷修复或所有JSP运行时更改。
所以之前的问题可能是老的class文件的时间戳是2008年,只要找到编译后的class文件删除,应该就可以重新编译了。项目中JSP class的目录是:
C:\bea\user_projects\domains\mydomain\myserver\.wlnotdelete\extract\myserver_appliesEAR_applies\jsp_servlet。
关于时间戳的详细介绍参考:
http://dev2dev.bea.com.cn/techdoc/2005041305.html
posted on 2007-11-03 19:46 licwei 阅读(919) 评论(0) 编辑 收藏 所属分类: Technology