博客 / 詳情

返回

java: HTTP Status 500 - Class.xxx.xxx.xxx. is not a Servlet

問題背景

環境參數:

學習maven依賴範圍,跟着視頻演示沒有設置servlet-api的依賴範圍為provided時,訪問服務器報錯。

報錯信息

報錯內容: 報錯信息: HTTP Status 500 - Class.xxx.xxx.xxx. is not a Servlet [視頻演示]

報錯截圖:

image.png

問題分析

單獨添加servlet-api.jar原因:

​ 在案例中,添加了tomcat7插件plugin,提供了tomcat容器環境,tomcat中提供servlet-api.jar,但是隻有當運行tomcat時才會使用到這個servlet,所以避免在編譯階段因為沒有servlet而報錯,需要單獨提供一個servlet依賴。

設置單獨的servlet依賴的<scope>provided原因:

​ 如果不設置為provided,則運行打包階段單獨的servlet會和tomcat容器中的servlet打包在同一個文件夾中造成衝突而報錯。單獨的servlet僅希望在編譯階段中有效,而運行打包階段不需要將這個servlet打包。

問題解決

一般情況下,單獨添加的servlet-api依賴座標需要添加<scope>為provided

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

maven依賴範圍表格

依賴範圍 對編譯階段有效 對測試階段有效 對運行時有效 例子
compile Y Y Y spring-core
test Y Junit
provided Y Y servlet-api
runtime Y Y JDBC驅動
system Y Y 本地Maven參控股之外的類庫【不需要了解】

相關參考

【視頻】依賴範圍詳解: https://www.bilibili.com/vide...

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.