问题背景
环境参数:
学习maven依赖范围,跟着视频演示没有设置servlet-api
的依赖范围为provided
时,访问服务器报错。
报错信息
报错内容: 报错信息: HTTP Status 500 - Class.xxx.xxx.xxx. is not a Servlet [视频演示]
报错截图:
问题分析
单独添加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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。