【问题标题】:Error 500 occurs when accessing the servlet class访问 servlet 类时出现错误 500
【发布时间】:2021-12-27 16:58:41
【问题描述】:

在尝试启动应用程序时,访问ControllerServlet时出现错误500(HTTP Status 500 – Internal Server Error),代码如下所示


import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;

public class ControllerServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (req.getParameter("x") == null || req.getParameter("y") == null || req.getParameter("r") == null || req.getParameter("key") == null) {
            req.getServletContext().getRequestDispatcher("/index.jsp").forward(req, resp);
        }
        else{
            getServletContext().getNamedDispatcher("AreaChecker").forward(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (req.getParameter("key").equals("update")) {
            getServletContext().getNamedDispatcher("AreaChecker").forward(req, resp);
        }
        else{
            req.getServletContext().getNamedDispatcher("Controller").forward(req, resp);
        }
    }

} 

错误文本:

键入异常报告

消息Класс [com.example.ControllerServlet] не является сервлетом

描述服务器遇到了一个意外情况,导致它无法完成请求。

例外

jakarta.servlet.ServletException: Класс [com.example.ControllerServlet] не является сервлетом org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:872) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1705) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:829) 根本原因

java.lang.ClassCastException:com.example.ControllerServlet 类无法转换为 jakarta.servlet.Servlet 类(com.example.ControllerServlet 位于加载器 org.apache.catalina.loader.ParallelWebappClassLoader @7abda5a1 的未命名模块中;jakarta .servlet.Servlet 位于加载程序 java.net.URLClassLoader @37afeb11 的未命名模块中) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:872) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1705) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:829)

Tomcat 版本:10.0.14

我的问题是:如何避免这个错误以及需要修复什么?

【问题讨论】:

    标签: java servlets get request


    【解决方案1】:

    问题就在这里:

    java.lang.ClassCastException: class com.example.ControllerServlet cannot be cast to class jakarta.servlet.Servlet
    

    这里:

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

    这里:

    Tomcat 版本:10.0.14

    您在 servlet 容器中有一个 javax servlet,该容器实现了 servlet 规范的第 5 版,该规范现在位于 jakarta 命名空间中。

    您需要从 jakarta 包而不是 javax 扩展您的 servlet。

    查看以下链接了解更多详情:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-08
      • 2019-12-07
      • 1970-01-01
      • 2017-02-03
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      相关资源
      最近更新 更多