java 编译jsp_JSP的重新编译

这2天改页面的BUG的时候遇到个很郁闷的问题,每次修改过JSP都不去重新Load,后来经人提醒是时间戳的问题,每次保存修改的JSP的时候都要把系统时间改成2008年,weblogic才能重新编译。删除application,重新explod也不行。

上网查了下资料,才发现weblogic重新编译的条件。

JSP容器通过实现StaleChecker接口调用_staticIsStale()方法。该实现接收一个带有清单1中所示参数的回调(isResourceStale())。有了这些参数,该实现可以仅接收所有必需的信息,以推断给定资源是否过期。当资源(参数1)/foo.jsp的时间戳(参数2)比存储在已编译类文件中的时间戳还要新(参数更大)时,或者当发行版本不同时,JSP容器认为JSP.class文件“过期”。

清单1. staticIsStale()方法

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicstaticboolean_staticIsStale(weblogic.servlet.jsp.StaleChecker sci)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngif(sci.isResourceStale("/foo.jsp",1089594167518L,"8.1.2.0", 

d18c02628675d0a2c816449d98bda930.png"America/Los_Angeles")) 

d18c02628675d0a2c816449d98bda930.pngreturntrue;

d18c02628675d0a2c816449d98bda930.pngreturnfalse;

8f1ba5b45633e9678d1db480c16cae3f.png}

因为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


版权声明:本文为weixin_33603405原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。