licweiwei

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()方法

public static boolean _staticIsStale(weblogic.servlet.jsp.StaleChecker sci) {
   
if (sci.isResourceStale("/foo.jsp"1089594167518L"8.1.2.0"
                                            
"America/Los_Angeles")) 
     
return true;
   
return false;
}



 

  • 因为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 阅读(1099) 评论(0)  编辑  收藏 所属分类: Technology


    只有注册用户登录后才能发表评论。


    网站导航: