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 [视频演示]

报错截图:

java: HTTP Status 500 - Class.xxx.xxx.xxx. is not a Servlet_第1张图片

问题分析

单独添加servlet-api.jar原因:

​ 在案例中,添加了tomcat7插件plugin,提供了tomcat容器环境,tomcat中提供servlet-api.jar,但是只有当运行tomcat时才会使用到这个servlet,所以避免在编译阶段因为没有servlet而报错,需要单独提供一个servlet依赖。

设置单独的servlet依赖的provided原因:

​ 如果不设置为provided,则运行打包阶段单独的servlet会和tomcat容器中的servlet打包在同一个文件夹中造成冲突而报错。单独的servlet仅希望在编译阶段中有效,而运行打包阶段不需要将这个servlet打包。

问题解决

一般情况下,单独添加的servlet-api依赖坐标需要添加provided


    javax.servlet
    javax.servlet-api
    3.1.0
    provided

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...

你可能感兴趣的:(java: HTTP Status 500 - Class.xxx.xxx.xxx. is not a Servlet)