欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于使用maven + Tomcat7-maven-plugin管理并运行web项目抛出cannot be cast to javax.servlet.Servlet的问题和解决

程序员文章站 2022-03-14 16:05:26
最近看到一个javaweb的教程 http://www.in28minutes.com/first-java-web-application-with-jsp-and-servlets-in-25-steps 里面使用maven管理项目的打包和发布,遂也想使用maven搭建并管理一下项目 被一个问题 ......

最近看到一个javaweb的教程  

里面使用maven管理项目的打包和发布,遂也想使用maven搭建并管理一下项目

被一个问题卡了很久。这个问题,也算以前自己埋的坑,现在总结一下:

首先, 这个问题是由jar重复引入引起的所以报

一个最简单的web项目结构   参考这个搭建

  配置maven等环境 

具体的项目

 

 

 

 

在运行 maven build (goals为 clean install tomcat7:run )的时候也都成功:

关于使用maven + Tomcat7-maven-plugin管理并运行web项目抛出cannot be cast to javax.servlet.Servlet的问题和解决

 

但访问发布地址的时候失败

关于使用maven + Tomcat7-maven-plugin管理并运行web项目抛出cannot be cast to javax.servlet.Servlet的问题和解决
严重: Allocate exception for servlet servletTest.LoginServlet
java.lang.ClassCastException: servletTest.LoginServlet cannot be cast to javax.servlet.Servlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
异常信息

 

查了一下, 大部分都是因为servlet-api的作用于设置的不对。但是我的不是

pom.xml的依赖和插件配置:

关于使用maven + Tomcat7-maven-plugin管理并运行web项目抛出cannot be cast to javax.servlet.Servlet的问题和解决
 1 <dependencies>
 2         <dependency>
 3             <groupId>javax</groupId>
 4             <artifactId>javaee-web-api</artifactId>
 5             <version>6.0</version>
 6             <scope>provided</scope>
 7         </dependency>
 8     </dependencies>
 9     
10     <build>
11         <pluginManagement>
12             <plugins>
13                 <plugin>
14                     <groupId>org.apache.maven.plugins</groupId>
15                     <artifactId>maven-compiler-plugin</artifactId>
16                     <version>3.2</version>
17                     <configuration>
18                         <verbose>true</verbose>
19                         <source>1.7</source>
20                         <target>1.7</target>
21                         <showWarnings>true</showWarnings>
22                     </configuration>
23                 </plugin>
24                 <plugin>
25                     <groupId>org.apache.tomcat.maven</groupId>
26                     <artifactId>tomcat7-maven-plugin</artifactId>
27                     <version>2.2</version>
28                     <configuration>
29                         <uriEncoding>UTF-8</uriEncoding>
30                         <url>http://127.0.0.1:8080/manager/text</url>
31                         <path>/</path>
32                         <server>tomcat7</server>
33                         <contextReloadable>true</contextReloadable>
34                     </configuration>
35                 </plugin>
36             </plugins>
37         </pluginManagement>
38         <finalName>servletTest</finalName>
39     </build>
pom.xml

 

 

可以看到

javaee-web-api 中作用域有配置 provided, 并且我检查了打包后的文件,里面确实没有将这个jar包打包进去

 

ps:我不用插件自带的tomcat而启用本地的tomcat,然后使用插件部署(tomcat7:deploy), 就可以解决不知道为什么这两个jar包不冲突(有大神可以解答一下吗)

 

最后看到了这个, 然后解决了

原因就是, 我的环境变量中配置的JRE也有servlet-api.jar(忘记是什么时候加进去的了).

所以会报错. 删除后就解决了

关于使用maven + Tomcat7-maven-plugin管理并运行web项目抛出cannot be cast to javax.servlet.Servlet的问题和解决