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

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

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

    天空是藍(lán)色的

    做好軟件為中國(guó) #gcc -c helloworld.c -o helloworld.o //編譯目標(biāo)文件 #gcc helloworld.o -o helloworld //編譯成可執(zhí)行exe #helloworld //運(yùn)行exe
    數(shù)據(jù)加載中……
    [轉(zhuǎn)貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問(wèn)題

    詳解 Tomcat: The value for the useBean class attribute is invalid 問(wèn)題

    使用Tomcat 常見(jiàn) "The value for the useBean class attribute is invalid" 錯(cuò)誤。該錯(cuò)誤是指 JSP 中給定的 useBean 標(biāo)簽的 class 屬性的值無(wú)效(不是 Bean 的屬性值)。

    在說(shuō)明這個(gè)問(wèn)題前,先看看有關(guān)的 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);
              }

          }

      }


    可見(jiàn)錯(cuò)誤可能的原因包括:

    1. 在編譯 JSP 時(shí)(不是運(yùn)行時(shí)),指定的 Bean 類(lèi)沒(méi)找到
    2. Bean 雖然找到了,但是它不是 public 的,或者找到的 class 文件是 interface 或抽象類(lèi)
    3. Bean 類(lèi)中沒(méi)有 public 的默認(rèn)構(gòu)建函數(shù)

    第二點(diǎn)很明顯,不用多解釋?zhuān)罱?jīng)常發(fā)生的情況是 Bean 類(lèi)忘了聲明為 public 。

    第三點(diǎn)中需要注意的是,如果你的 Bean 類(lèi)沒(méi)有提供任何構(gòu)造函數(shù),將自動(dòng)生成一個(gè)默認(rèn)構(gòu)建函數(shù),這沒(méi)有問(wèn)題。但是,如果你有構(gòu)造函數(shù),則不會(huì)自動(dòng)生成該默認(rèn)構(gòu)造函數(shù)。經(jīng)常被忽略的問(wèn)題是寫(xiě)了默認(rèn)構(gòu)造函數(shù)卻不是 public 的。

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

     
    還有一個(gè)更為特殊的例子。如果 Web 應(yīng)用在啟動(dòng)時(shí), WEB-INF/classes 目錄不存在,則在啟動(dòng)應(yīng)用后,新建 classes 目錄,動(dòng)態(tài)添加新的類(lèi)進(jìn)去是沒(méi)有用的,會(huì)報(bào)告同樣的錯(cuò)誤。原因是此時(shí)的 Tomcat 不會(huì)去檢查該目錄,也就不會(huì)找到你需要的類(lèi)。對(duì) WEB-INF/lib 目錄也是同樣。這一點(diǎn)可以參考下面的源代碼(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 
    + "/" ); 

      }


    盡管這個(gè)問(wèn)題的復(fù)雜場(chǎng)景可能不一而足,不過(guò)解決它的辦法卻很簡(jiǎn)單:停止服務(wù)器,確認(rèn)你的 JSP 和 Bean 正確部署,清理掉 TOMCAT_HOME/work 中的內(nèi)容,重起服務(wù)器。 此外,配置動(dòng)態(tài)類(lèi)加載對(duì)開(kāi)發(fā)而言是個(gè)不錯(cuò)的選擇。
     
    本文基于 Tomcat 5.5.9 版本。

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

    posted on 2005-12-05 16:01 bluesky 閱讀(21598) 評(píng)論(10)  編輯  收藏 所屬分類(lèi): 工作總結(jié)

    評(píng)論

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

    呵呵 不錯(cuò)

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

    我遇到一個(gè)情況就是,在我的虛擬目錄中(相對(duì)于虛擬根目錄),也就是說(shuō):如果我的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頁(yè)面無(wú)法訪問(wèn)在StoreWeb中的類(lèi)文件。我把jSP頁(yè)面放在StoreWeb中一切正常。請(qǐng)問(wèn)這是什么原因?
    謝謝

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

    Tomcat的版本為:6.0
    謝謝?。。?
    ^_^

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

    肯定的啊,score只是web應(yīng)用的 context 真實(shí)目錄還是StoreWeb啊

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

    謝謝!
    ^_^

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

    我現(xiàn)在上傳自己的網(wǎng)站就出現(xiàn)了這樣的問(wèn)題。也不知道怎么才好。在我本機(jī)上是可以進(jìn)行的,可是傳上遠(yuǎn)程服務(wù)器后,就出現(xiàn)了以上的問(wèn)題。說(shuō)JavaBean值無(wú)效。

    # re: [轉(zhuǎn)貼]詳解 Tomcat: The value for the useBean class attribute is invalid 問(wèn)題 [未登錄](méi) 2009-12-15 13:24 小吳

    強(qiáng)

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

    我只是愛(ài)你的網(wǎng)站,它充滿了新鮮和相關(guān)的文章,有一個(gè)非常漂亮的眼睛吸引人的設(shè)計(jì)!有些職位,真正幫助我在我的工作,所以表示感謝!

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

    偉大的東西,從你的人。伊夫讀你的東西,和“你太真棒。我愛(ài)什么youve來(lái)到這里,愛(ài)什么你說(shuō)你說(shuō)的方式。你讓娛樂(lè)和你們?nèi)栽O(shè)法保持它的智能。我不能等待讀取。這的確是一個(gè)偉大的博客

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

    我現(xiàn)在上傳自己的網(wǎng)站就出現(xiàn)了這樣的問(wèn)題。也不知道怎么才好。在我本機(jī)上是可以進(jìn)行的,可是傳上遠(yuǎn)程服務(wù)器后,就出現(xiàn)了以上的問(wèn)題。說(shuō)JavaBean值無(wú)效。
    主站蜘蛛池模板: 亚洲国产精品综合久久网络| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 中文字幕在线亚洲精品| 亚洲精品国产专区91在线| 亚洲电影中文字幕| 亚洲国产熟亚洲女视频| 亚洲天堂免费在线视频| 久久国产精品免费一区二区三区| 精品国产sm捆绑最大网免费站| 2015日韩永久免费视频播放| 国产在线不卡免费播放| 亚洲成亚洲乱码一二三四区软件| 亚洲中文无码永久免费| 亚洲AⅤ男人的天堂在线观看| 日本亚洲高清乱码中文在线观看| 久久久精品午夜免费不卡| 无码av免费网站| 亚洲成A人片在线观看中文| 亚洲成a人片在线观看中文!!!| 男男gvh肉在线观看免费| 99re在线这里只有精品免费| www.亚洲一区| 久久久亚洲精品蜜桃臀 | 亚洲区小说区图片区| 亚洲日韩中文字幕在线播放| 亚洲精品线在线观看| 污网站免费在线观看| 麻豆一区二区免费播放网站| 亚洲精品无码久久久久| 亚洲视频在线观看地址| 亚洲熟妇久久精品| 久久久久国产免费| 亚洲无码日韩精品第一页| 亚洲中文字幕无码中文字| 四虎国产成人永久精品免费 | 久久久久亚洲AV无码永不| 亚洲av无码专区在线| 国内成人精品亚洲日本语音| 最近2019年免费中文字幕高清| 久久青青草原亚洲av无码| 国产亚洲精品AAAA片APP|