<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    天空是藍色的

    做好軟件為中國 #gcc -c helloworld.c -o helloworld.o //編譯目標文件 #gcc helloworld.o -o helloworld //編譯成可執行exe #helloworld //運行exe
    數據加載中……
    [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題

    詳解 Tomcat: The value for the useBean class attribute is invalid 問題

    使用Tomcat 常見 "The value for the useBean class attribute is invalid" 錯誤。該錯誤是指 JSP 中給定的 useBean 標簽的 class 屬性的值無效(不是 Bean 的屬性值)。

    在說明這個問題前,先看看有關的 Tomcat 源代碼(org.apache.jasper.compiler.Generator):

      if (beanName == null{
          
    try {
              Class bean 
    = ctxt.getClassLoader().loadClass(klass);
              
    int modifiers = bean.getModifiers();
              
    if (!Modifier.isPublic(modifiers) ||
                   Modifier.isInterface(modifiers) 
    ||
                  Modifier.isAbstract (modifiers)) 
    {
                  
    throw new Exception("Invalid bean class modifier");
              }

              
    // Check that there is a 0 arg constructor 
              bean.getConstructor(new Class[] {});
              generateNew 
    = true
          }
     catch (Exception e) {
              
    // Cannot instantiate the specified class
              if (ctxt.getOptions().getErrorOnUseBeanInvalidClassAttribute()) 
                  err.jspError(n, 
    "jsp.error.invalid.bean ", klass);
              }

          }

      }


    可見錯誤可能的原因包括:

    1. 在編譯 JSP 時(不是運行時),指定的 Bean 類沒找到
    2. Bean 雖然找到了,但是它不是 public 的,或者找到的 class 文件是 interface 或抽象類
    3. Bean 類中沒有 public 的默認構建函數

    第二點很明顯,不用多解釋,最經常發生的情況是 Bean 類忘了聲明為 public 。

    第三點中需要注意的是,如果你的 Bean 類沒有提供任何構造函數,將自動生成一個默認構建函數,這沒有問題。但是,如果你有構造函數,則不會自動生成該默認構造函數。經常被忽略的問題是寫了默認構造函數卻不是 public 的。

    第一點看起來簡單,不過卻最令人頭痛,尤其是在開發環境里。這里需要注意的是,"在編譯 JSP 時",意味著引用 Bean 的 JSP 是新的,或者剛剛更新過,或者 TOMCAT_HOME/work 中的編譯結果被清除了。此時,Tomcat 將自動(重新)編譯該 JSP,此時如果發現 Bean 沒找到,就會報這個錯。情況因為 JSP 或者 Bean 類正在開發而變得復雜,一一列舉所有情況沒有意義,這里我舉一些典型例子,借此應該可以舉一反三:
     
    如果 JSP 編譯結果存在,且 JSP 沒有更新,Tomcat 不會重新編譯 JSP,同時默認情況也不會自動重新加載更新過的 Bean 類(參考 http://jakarta.apache.org/tomcat/tomcat-5.5-doc/config/context.html 中的 reloadable)。所以,你會發現此時即使刪除了 Bean 類都沒有問題,當然,更新 Bean 類也不會有什么用。如果在 JSP 編譯產生之后,我們重起了服務器,由于 JSP 文件編譯的結果存在,所以,可以仍然訪問 JSP 頁面,而不必重新編譯。可是如果訪問前,刪掉了 Bean 類,就會報過 ClassNotFoundException 而不是上述錯誤。關鍵在于 JSP 是否經過編譯,沒有編譯則沒有找到類報告題目中的編譯錯誤 ,編譯過則是 ClassNotFoundException 運行時實例化錯誤。

     
    還有一個更為特殊的例子。如果 Web 應用在啟動時, WEB-INF/classes 目錄不存在,則在啟動應用后,新建 classes 目錄,動態添加新的類進去是沒有用的,會報告同樣的錯誤。原因是此時的 Tomcat 不會去檢查該目錄,也就不會找到你需要的類。對 WEB-INF/lib 目錄也是同樣。這一點可以參考下面的源代碼(org.apache.catalina.loader.WebappLoader):

      // Setting up the class repository (/WEB-INF/classes), if it exists

      String classesPath 
    = "/WEB-INF/classes";
      DirContext classes 
    = null;

      
    try {
          Object object 
    = resources.lookup(classesPath);
          
    if (object instanceof DirContext) {
              classes 
    = (DirContext) object;
          }

      }
     catch(NamingException e) 
          
    // Silent catch: it's valid that no /WEB-INF/classes collection
          
    // exists
      }


      
    if (classes != null{

          File classRepository 
    = null;

          String absoluteClassesPath 
    =
              servletContext.getRealPath(classesPath);

          
    if (absoluteClassesPath != null{

              classRepository 
    = new File(absoluteClassesPath);

          }
     else {

              classRepository 
    = new File(workDir, classesPath);
              classRepository.mkdirs();
              copyDir(classes, classRepository);

          }


          
    if(log.isDebugEnabled())
              log.debug(sm.getString(
    "webappLoader.classDeploy", classesPath,
                           classRepository.getAbsolutePath())); 


          
    // Adding the repository to the class loader
          classLoader.addRepository(classesPath + "/", classRepository);
          loaderRepositories.add(classesPath 
    + "/" ); 

      }


    盡管這個問題的復雜場景可能不一而足,不過解決它的辦法卻很簡單:停止服務器,確認你的 JSP 和 Bean 正確部署,清理掉 TOMCAT_HOME/work 中的內容,重起服務器。 此外,配置動態類加載對開發而言是個不錯的選擇。
     
    本文基于 Tomcat 5.5.9 版本。

    作者blog:http://spaces.msn.com/members/thomaszhou/

    posted on 2005-12-05 16:01 bluesky 閱讀(21583) 評論(10)  編輯  收藏 所屬分類: 工作總結

    評論

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2006-12-01 11:21 利劍

    呵呵 不錯
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2007-11-17 16:48 Mr Ma

    我遇到一個情況就是,在我的虛擬目錄中(相對于虛擬根目錄),也就是說:如果我的Host為:
    <Host name="128.128.19.49" appBase="D:/StoreWeb"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">

    <Context path="" docBase="D:/StoreWeb" debug="0" reloadable="true"/>
    <Context path="/score/" docBase="D:/StoreWeb" debug="0" reloadable="true"/>

    </Host>但是在score中的jsp頁面無法訪問在StoreWeb中的類文件。我把jSP頁面放在StoreWeb中一切正常。請問這是什么原因?
    謝謝
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2007-11-17 16:49 Mr Ma

    Tomcat的版本為:6.0
    謝謝!!!
    ^_^
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2007-11-18 19:57 bluesky

    肯定的啊,score只是web應用的 context 真實目錄還是StoreWeb啊
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2007-11-23 20:35 Mr Ma

    謝謝!
    ^_^
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2007-12-26 17:23 桌面

    我現在上傳自己的網站就出現了這樣的問題。也不知道怎么才好。在我本機上是可以進行的,可是傳上遠程服務器后,就出現了以上的問題。說JavaBean值無效。
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題 [未登錄] 2009-12-15 13:24 小吳

      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2012-01-14 05:32 new car finance

    我只是愛你的網站,它充滿了新鮮和相關的文章,有一個非常漂亮的眼睛吸引人的設計!有些職位,真正幫助我在我的工作,所以表示感謝!
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2012-01-14 05:33 new ford

    偉大的東西,從你的人。伊夫讀你的東西,和“你太真棒。我愛什么youve來到這里,愛什么你說你說的方式。你讓娛樂和你們仍設法保持它的智能。我不能等待讀取。這的確是一個偉大的博客
      回復  更多評論    

    # re: [轉貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問題  2012-04-03 04:42 payday loans

    我現在上傳自己的網站就出現了這樣的問題。也不知道怎么才好。在我本機上是可以進行的,可是傳上遠程服務器后,就出現了以上的問題。說JavaBean值無效。
      回復  更多評論    
    主站蜘蛛池模板: 国产午夜成人免费看片无遮挡| 永久亚洲成a人片777777| AAA日本高清在线播放免费观看| 亚洲一区二区三区高清不卡 | 亚洲伊人久久大香线蕉啊| 亚洲成AV人网址| 成人免费在线视频| 亚洲毛片免费视频| a级片免费观看视频| 成人一级免费视频| 黄色毛片免费网站| mm1313亚洲国产精品无码试看| 亚洲视频小说图片| 亚洲AV日韩AV鸥美在线观看| 国产亚洲日韩一区二区三区| 国产乱子伦片免费观看中字| 最新中文字幕免费视频| 思思re热免费精品视频66| 久久青草免费91线频观看站街| a级男女仿爱免费视频| 久久精品无码免费不卡| 免费在线观看一区| 美女被免费视频网站a| 337P日本欧洲亚洲大胆精品 | 蜜臀91精品国产免费观看| 无码专区永久免费AV网站| 亚洲免费观看在线视频| 最近中文字幕mv免费高清在线| a级精品九九九大片免费看| 波多野结衣免费一区视频| 99精品视频免费| 永久免费av无码网站yy| 很黄很污的网站免费| 日韩视频在线观看免费| 日本一卡精品视频免费| 午夜爽爽爽男女免费观看影院| 免费精品无码AV片在线观看| 一级毛片免费观看| 97在线观看永久免费视频| 在线天堂免费观看.WWW | 国产成人高清亚洲一区91|