我是靠谱客的博主 忧心菠萝,最近开发中收集的这篇文章主要介绍servlet配置相关:HTTP状态 500 - 内部服务器错误问题第一步第二步,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在今天尝试配置第一个servlet时出现了500
类com.yqc.comtroller.OneServlet不是Servlet

异常报告

消息 

==类com.yqc.comtroller.OneServlet不是Servlet==

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

jakarta.servlet.ServletException: 类com.yqc.comtroller.OneServlet不是Servlet
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
	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:374)
	org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1696)
	org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.base/java.lang.Thread.run(Thread.java:830)
根本原因。

java.lang.ClassCastException: class com.yqc.comtroller.OneServlet cannot be cast to class jakarta.servlet.Servlet (com.yqc.comtroller.OneServlet is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @3db9d95b; jakarta.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @50d0686)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
	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:374)
	org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1696)
	org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.base/java.lang.Thread.run(Thread.java:830)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看

发现
类com.yqc.comtroller.OneServlet不是Servlet

解决途径

  • 第一步
  • 第二步
    • 方法一
    • 方法二

第一步

检查tomcat有关的jar包是否完整(如:下图)以及存放路径是否为webWEB-INFlib
相关jar包

第二步

如果确认第一步没有问题
请查看tomcat版本
最新的是tomcat10,
而tomcat10有个最大的变动就是Tomcat 10 m1将JavaEE也换成了Jakarta® EE
Jakarta® EE较以前的JavaEE有一个非常非常重要的更新:包名不再是"javax.servlet.“而是改成了"jakarta.servlet.”

方法一

将所有的javax.servlet替换成jakarta.servlet.这是我的代码

package com.yqc.comtroller;

import java.io.IOException;

public class OneServlet extends jakarta.servlet.http.HttpServlet {
    protected void doPost(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException {

    }

    protected void doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException {
        System.out.println("fsdjfsd");
    }
}

方法二

将tomcat10卸载改为tomcat9 就可以了
参考文章一
参考文章二

最后

以上就是忧心菠萝为你收集整理的servlet配置相关:HTTP状态 500 - 内部服务器错误问题第一步第二步的全部内容,希望文章能够帮你解决servlet配置相关:HTTP状态 500 - 内部服务器错误问题第一步第二步所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部