最近看到一个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(忘记是什么时候加进去的了).
所以会报错. 删除后就解决了