java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component...


  今天開發犯了一個特lowB的錯,記錄下來,引以為戒!

嚴重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/UpLoadExcel]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1122)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/UpLoadExcel]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more

  問題描述:啟動tomcat就報這個錯(一個子容器在啟動時失敗。)

  問題解決:從頭到尾檢查了一通tomcat和servlet的配置,最后發現竟是web.xml中servlet的映射路徑配置錯誤導致的

  <servlet>
      <servlet-name>excelUploader</servlet-name>
      <servlet-class>com.trs.webframework.controler.servlet.ExcelUploader</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>excelUploader</servlet-name>
      <url-pattern>excelUploader.do</url-pattern>  //錯誤配置,前面需加個“/”
  </servlet-mapping>

  總結:url-pattern規則:有精確匹配,最長路徑匹配,擴展匹配,如果前三條規則都沒有匹配到,則會交給第四種叫default servlet處理。
以”/’開頭和以”/*”結尾的是用來做路徑映射的; “/” 是用來定義default servlet映射的。  以前綴”*.”開頭的是用來做擴展映射的。剩下的都是用來定義詳細映射的;比如: /aa/bb/cc.action。
    <url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>的區別:
    <url-pattern>/</url-pattern> 會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的后綴型url
    <url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等)

       注意:路徑和擴展名匹配無法同時設置,因為這種匹配即屬於路徑映射,也屬於擴展映射,導致容器無法判斷。比如下面的三個<url-pattern>都是非法的,如果設置,啟動tomcat服務器會報錯。
    <url-pattern>/aa/*.jsp</url-pattern>
    <url-pattern>/*.jsp</url-pattern>
    <url-pattern>bb*.jsp</url-pattern>
      另外注意:<url-pattern>/aa/*/bb</url-pattern>
      這個是精確匹配,url必須是 /aa/*/bb,這里的*不是通配的含義

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM