Bootstrap

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

最近看到一个javaweb的教程  http://www.in28minutes.com/first-java-web-application-with-jsp-and-servlets-in-25-steps

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

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

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

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

https://blog.csdn.net/a992036795/article/details/53063962  配置maven等环境 

https://github.com/in28minutes/JavaWebApplicationStepByStep/blob/master/Step01.md 具体的项目

 

 

 

 

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

 

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

严重: 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的依赖和插件配置:

 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包不冲突(有大神可以解答一下吗)

 

最后看到了这个https://blog.csdn.net/qq_31556881/article/details/77411258, 然后解决了

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

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

 

转载于:https://www.cnblogs.com/qqyycom/p/9203400.html

;