当前位置: 首页 > 知识库问答 >
问题:

jakarta.Servlet.ServletException:类[com.practice.myServlet]不是Servlet

薛征
2023-03-14

类型异常报告

消息类[com.practice.myServlet]不是Servlet

说明服务器遇到意外情况,无法完成请求。

单击此处查看项目目录

MyServlet.java

package com.practice;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
/**
 *
 * @author admin
 */
public class MyServlet extends HttpServlet {
    
    @Override
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException
    {
        PrintWriter out=response.getWriter();
        response.setContentType("test/html");
        out.print("<h1>This is get method of my servlet</h1>");
    }
}

web.xml

<?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_3_1.xsd"
     version="3.1">
    
    <servlet>
        <servlet-name>myservlet</servlet-name>
        <servlet-class>com.practice.MyServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>myservlet</servlet-name>
        <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

共有1个答案

单于承
2023-03-14

您基本上在物理上将特定于Tomcat9.x(servlet4.0)的JAR文件包含在WAR中,然后针对Tomcat9.x(servlet4.0)或更高版本编写/编译代码,然后将WAR部署到Tomcat10.x(servlet5.0)或更高版本。这根本不是正确的做法。

自Tomcat 10.x(Servlet 5.0)以来,javax.*包已被重命名为jakarta.*包。

换句话说,请确保不要在WAR中随机放置不同服务器的JAR文件,如tomcat-servlet-api-9.0.4.JAR。这只会惹来麻烦。将其完全删除并编辑servlet类的导入

import javax.servlet.*;
import javax.servlet.http.*;

import jakarta.servlet.*;
import jakarta.servlet.http.*;

同时,还请确保web.xml的根元素声明符合目标服务器的Servlet API版本,这是在Tomcat10.x的情况下,因此是Servlet 5.0(因此不是Servlet 3.1,它基本上与Tomcat8.0相匹配)。

<web-app
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    version="5.0"
>
    <!-- Config here. -->
</web-app>
  • Tomcat版本
  • Tomcat 9将servlet转换为javax.servlet.servlet而不是jakarta.servlet.http.httpServlet
 类似资料:
  • 是什么导致了这个错误? 我正在通过插件运行web应用程序

  • 我正在尝试制作一个俄罗斯方块游戏,我得到了编译器错误 当我尝试创建对象时 我对每个形状都使用内部类。这是我的部分代码 我做错了什么?

  • 需要你的帮助解决这个错误在Flutter...也如何在其他屏幕上使用这个回调的实例? 这是我的留言。json数据模型 我的消息是一个模型。飞奔 这是我的留言。飞奔 _TypeError(类型“List”不是类型“Map”的子类型

  • 我对Kotlin是新来的,这是我的问题: 我使用android studio 3.2.1 kotlin版本:1.2.71 对此有什么想法吗?

  • 我有一个JPA项目(Eclipse Link),工作正常,但我想持久化一个不是实体的类(或在相同的持久化上下文中不是实体),目前我持久化引用id,然后我执行调用以检索对象。我需要知道什么是最好的方式做到这一点…我不希望在bean中添加代码作为侦听器事件,因为我希望有一个干净的bean(构造、属性、不带注释的setter和getter), 我的想法是扩展PersistenceContext(但是,我

  • 我正在使用和。它在这里 我有一个像这样的域名。而且,似乎不推荐使用注释,所以我使用了。 类如下所示 使用该类的如下所示 但当我启动应用程序时,我得到了错误 问题出在哪里?