tomcat啟動異常:子容器啟動失敗(a child container failed during start)
在學習過程中,出現這個問題,上網查了一下,總結以下幾種解決方案,并找出自己的問題。
1、沒有清理之前maven項目的歷史。
解決方法:執行clean命令,然后重新啟動項目。
操作:添加maven helper插件后,右鍵→run maven→clean
ps:關于maven項目歷史是啥我不太了解。
2、pom.xml文件中servlet-api依賴導入問題。
解決方法:在依賴中添加<scope>標簽,內容為provided。
示例:<scope>provided</scope>
3、web.xml中servlet與servlet-mapping的配置錯誤。
這個錯誤在用xml配置Servlet時可能出現,而Servlet從3.0版本以后支持@WebServlet注解配置url,所以這個問題不常見了。
解決方法:檢查web.xml文件中配置,或者刪掉這部分內容,改用@WebServlet注解配置。
一個配置正確的樣例如下:
注意url-pattern內容的斜杠
或改為注解配置:
@WebServlet("/demo13")
4、url-pattern格式錯誤。
url-pattern配置簡略知識點總結:
(1)一個Servlet(實為繼承Servlet的類)可以配置多個url-pattern。
@WebServlet(urlPattern={"/ex01","/ex02"})
(2)urlPattern有四種配置規則。
精準匹配:@WebServlet("/demo/ex01")
目錄匹配:@WebServlet("/demo/*")
擴展名匹配:@WebServlet("*•do")
任意匹配:@WebServlet("/*")或@WebServlet("/")
除了擴展名匹配,其他匹配方式都需要有斜杠("/"),但最前面的斜杠容易被忽略。
5、自己的問題
了解以上各種問題之后,我檢查了自己的代碼,最終發現自己犯的錯誤有兩個。
(1)忘記了添斜杠
在做urlPattern配置練習時,多個路徑配置中,忽略了第二個的斜杠。有點尷尬,哈哈…
(2)路徑名重復
在添加完斜杠后,運行tomcat還是出錯了,我檢查了又檢查,最后終于發現一個可能的問題,經過實驗之后確定了自己的猜測。
相信細心的伙伴已經發現,明明是Demo07,但路徑卻是/demo01與/demo02。
我當時為了省事隨便取了兩個名字,而這兩個路徑名在之前學習的案例就已經使用了,所以啟動時報錯了。
經過改動,tomcat啟動終于正常。
6、一點補充
寫這篇文章時,為了拍第三個問題的示例圖遇到的情況,如果某個Servlet已經用了web.xml配置urlPattern,就不可以再用注解配置了,一定要把web.xml中的相關內容刪干凈才可以。
到此這篇關于tomcat啟動異常:子容器啟動失敗(a child container failed during start)的文章就介紹到這了,更多相關tomcat異常子容器啟動失敗內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!