【发布时间】:2016-06-27 12:33:58
【问题描述】:
我有一个简单的 Java servlet 项目,我正在通过 maven tomcat 插件运行。点击 url,我得到了这个错误
javax.servlet.ServletException: Class in.vshukla.MyServlet is not a Servlet
java.lang.ClassCastException: in.vshukla.MyServlet cannot be cast to javax.servlet.Servlet
servlet 类是
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MyServlet implements Servlet {
.
.
.
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
PrintWriter out = servletResponse.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Hello, world!</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
.
.
.
}
这伴随着一个简单的 web.xml 文件。
<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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>in.vshukla.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
我已经交叉检查了生成的战争文件。我将 tree 命令的输出附加到 war 文件中。
. |-- 元信息 `-- 网络信息 |-- 班级 | |-- 在 | | `--vshukla | | `-- MyServlet.class | `--弹簧 | `-- spring_config.xml |-- 库 | |-- javax.servlet-api-3.1.0.jar | `-- my-data-0.1-SNAPSHOT.jar `-- web.xml 7个目录,5个文件我正在使用 maven 构建它。 以下是 pom.xml 文件。
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>in.vshukla</groupId>
<artifactId>my</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-api</artifactId>
<packaging>war</packaging>
<properties>
<javax.version>3.1.0</javax.version>
</properties>
<dependencies>
<dependency>
<groupId>in.vshukla</groupId>
<artifactId>my-data</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.version}</version>
</dependency>
</dependencies>
</project>
即使 MyServlet 类正在实现 javax Servlet,我仍然收到此错误。
我做错了什么?
【问题讨论】:
-
能否请您粘贴导入部分?
-
如果你改为 public class MyServlet extends HttpServlet {
-
@Sarker :添加了导入部分。如果我扩展 HttpServlet,它会给出同样的错误。
-
只需按照 IanLovejoy 的回答从您的
.war文件中删除javax.servlet-api-3.1.0.jar,您的问题就会消失。