2020年10月9日更新
經過本人對SSM框架理解的加深和對IDEA工具使用的熟悉,現提出一種新的解決辦法,以前的解決辦法可能存在問題
1. 問題描述:
使用IDEA作為開發工具,使用Maven作為項目管理工具,完成一個web項目后使用Tomcat作為服務器啟動項目,報錯一個或多個篩選器啟動失敗或者org.apache.catalina.core.StandardContext.startInternal 一個或多個listeners啟動失敗,更多詳細信息查看對應的容器日志文件,錯誤原因應該是一致的.
2. 根本原因:
在項目部署運行環境下,項目依賴的jar包沒有導入到項目部署的環境中,說白話就是部署環境中缺少jar包
3. 出現的可能原因:
創建Maven項目時,沒有選擇Maven提供的架構,創建的普通Maven項目,創建完成后再為項目添加web框架支持導致的,這樣創建的項目IDEA不會自動添加項目依賴的jar包到WEB-INF/lib目錄.所以創建web項目時,如果要使用Maven作為項目管理工具,盡量選擇Maven提供的項目架構即可避免
4. 解決辦法:
把缺少的jar包導入即可,WEB-INF目錄下新建lib文件夾,右鍵選擇Add copy of-->Library File,將項目所有需要的依賴添加即可.如下圖所示
具體操作(針對於IDEA開發工具)



總結:
從圖示中可以看出,如果缺少lib文件夾或者你的classes文件夾同級目錄不存在你的項目依賴的話,項目部署之后的環境中,java類是找不到依賴的jar包的.
所以就會出現以下問題
1. 如果項目配置了監聽器Listener,項目啟動會失敗,報錯org.apache.catalina.core.StandardContext.startInternal 一個或多個listeners啟動失敗,更多詳細信息查看對應的容器日志文件
2. 如果項目配置了過濾器Filter, 項目啟動會失敗,報錯一個或多個篩選器啟動失敗
3. 如果項目沒有配置以上兩種,那么在訪問需要依賴別的jar包的java程序時就會報錯ClassNotFoundException
因為Lisenter和Filter是在容器啟動的時候啟動的,就需要依賴jar包,如果找不到,容器就會啟動失敗,普通Java程序是在第一次訪問的時候才會被調用,所以會在訪問時報錯
--------------------------------以下為原文章-----------------------------------
問題描述:
做一個字符編碼過濾器.注冊xml后,Tomcat啟動web項目提示如下錯誤信息 :
org.apache.catalina.core.StandardContext.startInternal 一個或多個篩選器啟動失敗。
將web.xml 中的注冊信息注釋項目能正常運行,所以懷疑是過濾器的問題
CharacterEncodingFilter.java
package com.shme.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @Desc 字符編碼過濾器
*/
public class CharacterEncodingFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter過濾器初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//設置utf-8
request.setCharacterEncoding("utf-8");
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("CharacterEncodingFilter過濾器銷毀");
}
}
web.xml (3.1版本)
<!--字符編碼過濾器-->
<filter>
<filter-name>charset</filter-name>
<filter-class>com.shme.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charset</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
解決辦法 :
原因 :
使用Maven創建項目,IDEA部署到Tomcat服務器時,在本人的開發環境中會有幾率遇到不編譯java文件夾下的java源文件,導致tomcat在部署項目時, Filter需要優先啟動,在web.xml中尋找映射時,項目文件中Filter實現類沒有被編譯,所以才會報錯.
解決辦法 :
