今天使用Maven创建了一个简单的javaweb程序,遇到了很多奇葩问题,比如:一直提示类不能强制转为servlet,等等。脑瓜子嗡嗡的!!!不过好在不负有心人,在不懈的努力下一个一个的解决了。
1、Class xxx is not a Servlet
使用的是tomcat-maven插件的话,可以试着去双击run-war,将项目打包为war包后运行。
2、在设置servlet路径时没有@WebServlet()注解
将servlet的版本提高到3.0以上,因为在3以后版本才有@WebServlet注解。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
3、jstl依赖引入问题
jstl依赖引入1.2版本即可,不要有多余的相关依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
在运行tomcat时,控制台包会提示如下:其实不影响程序正常运行
如果看着不爽,就把jstl依赖改为下面这样:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
4、有的新版本IDEA生成maven-webapp骨架时,index.jsp没有文件头信息,在运行时导致页面中文乱码
在文件头加上这句
<%@ page contentType="text/html;charset=utf-8"%>
5、有的新版本IDEA生成maven-webapp骨架时,web.xml的文件头不正确,导致无法解析JSTL标签
将自动生成的文件头替换为下面这个
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
6、在双击run-war执行时发现,控制台输出了一大堆,发现是将测试代码全执行了个遍
在pom.xml中加入这个插件即可
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
想一劳永逸(永久修改web.xml):
参考【技术】解决Maven创建web工程web.xml版本过低的问题,妈妈再也不用的担心我的学习了_Riu_Peter的博客-优快云博客