<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 閱讀(21586) 評論(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值無效。
      回復  更多評論    
    主站蜘蛛池模板: 国产成人亚洲影院在线观看| 免费H网站在线观看的| 曰皮全部过程视频免费国产30分钟| 亚洲大尺度无码专区尤物| 久久不见久久见免费影院www日本| 免费a级毛片18以上观看精品| 亚洲AV无码一区二区大桥未久| 免费看国产精品3a黄的视频| 一本色道久久综合亚洲精品蜜桃冫 | 亚洲美女大bbbbbbbbb| 91精品免费不卡在线观看| 亚洲电影在线播放| 永久免费的网站在线观看| 亚洲欧美乱色情图片| 又爽又高潮的BB视频免费看| 色吊丝免费观看网站| 亚洲免费人成在线视频观看| 久久免费精品一区二区| 亚洲欧洲中文日产| 永久免费毛片在线播放| 特黄aa级毛片免费视频播放| 国产亚洲日韩在线三区| 91精品免费观看| 日韩精品亚洲专区在线影视| 亚洲精品无码专区2| 久久久久久久岛国免费播放| 中文字幕 亚洲 有码 在线| 免费观看大片毛片| 久久国产精品免费| 亚洲成人午夜电影| 国产一级高清视频免费看| 9i9精品国产免费久久| 亚洲福利秒拍一区二区| 国产一区视频在线免费观看 | 18禁成年无码免费网站无遮挡| 国产精品亚洲天堂| 午夜亚洲AV日韩AV无码大全| 国产精品美女午夜爽爽爽免费| 一级毛片免费播放男男| 亚洲午夜一区二区电影院| 亚洲国产精品成人一区|