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;
          }



           

        1. 因為JSP頁面的時間戳保存在類文件內部,并且是在編譯時計算的,所以修改類文件的時間戳不會對過期檢查過程產生影響。
        2. 第4個參數,也就是時區,只在以存檔格式(.war)進行部署時使用。
        3. WebLogic發行版本隨每個服務包改變,因此需要為每個服務包重新編譯所有JSP。提出這個要求是為了確保JSP類可以利用較新服務包或發行版本中的所有編譯器缺陷修復或所有JSP運行時更改。

        4. 所以之前的問題可能是老的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 閱讀(1124) 評論(0)  編輯  收藏 所屬分類: Technology

          主站蜘蛛池模板: 博湖县| 集贤县| 黄浦区| 巴彦县| 马公市| 饶河县| 莱阳市| 泸水县| 司法| 横峰县| 临夏市| 昂仁县| 甘谷县| 迁西县| 辽阳县| 逊克县| 哈尔滨市| 定南县| 乌拉特后旗| 锡林郭勒盟| 伊吾县| 秭归县| 晋州市| 遂平县| 唐海县| 莱西市| 白沙| 莎车县| 盱眙县| 斗六市| 江西省| 湟源县| 常熟市| 深水埗区| 英吉沙县| 融水| 佳木斯市| 安丘市| 讷河市| 北票市| 乃东县|