最近看到一個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>
可以看到
javaee-web-api 中作用域有配置 provided, 並且我檢查了打包后的文件,里面確實沒有將這個jar包打包進去
ps:我不用插件自帶的tomcat而啟用本地的tomcat,然后使用插件部署(tomcat7:deploy), 就可以解決不知道為什么這兩個jar包不沖突(有大神可以解答一下嗎)
最后看到了這個https://blog.csdn.net/qq_31556881/article/details/77411258, 然后解決了
原因就是, 我的環境變量中配置的JRE也有servlet-api.jar(忘記是什么時候加進去的了).
所以會報錯. 刪除后就解決了