啟動tomcat時報錯:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:A child container failed during start


可以存在的原因:

(一)可能原因是在web.xml中配置<servlet-mapping>時,servlet-mapping的屬性配置錯誤(紅色出為配置錯誤):

 <servlet-mapping>
      <servlet-name>coreServlet</servlet-name>
      <url-pattern>/CoreServlet</url-pattern>
  </servlet-mapping>

 

正確配置為:

 <servlet-mapping>
      <servlet-name>coreServlet</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>

其中<url-pattern>xxx</url-pattern>可以為你想要的路徑,但是一定要配置正確。

ps: 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>/kata/*.jsp</url-pattern>

  <url-pattern>/*.jsp</url-pattern>

  <url-pattern>he*.jsp</url-pattern>

  另外注意:<url-pattern>/aa/*/bb</url-pattern>
  這個是精確匹配,url必須是 /aa/*/bb,這里的*不是通配的含義

 

(二)可能由於web.xml的驗證中

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

版本和約束跟tomcat對應的servlet api的版本不匹配。

 

解決辦法:

項目-->properties-->project facets:

選擇對應的Dynamic web module的版本。

修改時如果出現Cannot change version of project facet Dynamic Web Module to xx。xx為要修改成為的版本,如:3.0。

解決辦法:

找到工作空間中的項目,打開項目找到.settings文件夾打開,編輯兩個文件:

1.org.eclipse.jdt.core.prefs.prefs文件中的:

eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.8

將1.8修改成對應的jdk版本

 

2.org.eclipse.wst.common.project.facet.core.xml文件中:

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="Apache Tomcat v8.5"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/>
<installed facet="jst.web" version="3.0"/>
</faceted-project>

將這個<installed facet="java" version="1.8"/>改成對應的java版本號,<installed facet="jst.web" version="3.1"/>改成對應的Dynamic Web module的版本號。

然后再打開project facet 查看是否修改。


免責聲明!

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



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