關於使用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(忘記是什么時候加進去的了).

所以會報錯. 刪除后就解決了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM