Maison  >  Article  >  Comment réparer java.lang.NoSuchMethodException : Servlets.MyServlet.() sur java.base/java.lang.Class.getConstructor0

Comment réparer java.lang.NoSuchMethodException : Servlets.MyServlet.() sur java.base/java.lang.Class.getConstructor0

WBOY
WBOYavant
2024-02-09 11:33:18456parcourir

L'éditeur PHP Zimo répondra à votre question sur la façon de corriger "java.lang.NoSuchMethodException: Servlets.MyServlet.() sur java.base/java.lang.Class.getConstructor0". Cette erreur se produit généralement dans les programmes Java et signifie que le constructeur spécifié est introuvable. Pour résoudre ce problème, vous pouvez vérifier si le constructeur dans le code existe, si les paramètres sont corrects et si le chemin de classe est correctement configuré. De plus, vous pouvez également envisager de mettre à niveau la version Java ou d'utiliser d'autres constructeurs disponibles. Avec ces méthodes, vous devriez pouvoir corriger cette erreur avec succès et faire fonctionner le programme normalement.

Contenu de la question

J'ai un formulaire dans une page jsp et j'essaie de me connecter au servlet myservlet. J'utilise Tomcat 10.x. J'obtiens toujours l'erreur suivante :

http status 500 – internal server error

type exception report

message error instantiating servlet class [servlets.myservlet]

description the server encountered an unexpected condition that prevented it from fulfilling the request.

exception

jakarta.servlet.servletexception: error instantiating servlet class [servlets.myservlet]
    org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:482)
    org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:93)
    org.apache.catalina.valves.abstractaccesslogvalve.invoke(abstractaccesslogvalve.java:673)
    org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:340)
    org.apache.coyote.http11.http11processor.service(http11processor.java:391)
    org.apache.coyote.abstractprocessorlight.process(abstractprocessorlight.java:63)
    org.apache.coyote.abstractprotocol$connectionhandler.process(abstractprotocol.java:896)
    org.apache.tomcat.util.net.nioendpoint$socketprocessor.dorun(nioendpoint.java:1744)
    org.apache.tomcat.util.net.socketprocessorbase.run(socketprocessorbase.java:52)
    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:1589)
root cause

java.lang.nosuchmethodexception: servlets.myservlet.<init>()
    java.base/java.lang.class.getconstructor0(class.java:3641)
    java.base/java.lang.class.getconstructor(class.java:2324)
    org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:482)
    org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:93)
    org.apache.catalina.valves.abstractaccesslogvalve.invoke(abstractaccesslogvalve.java:673)
    org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:340)
    org.apache.coyote.http11.http11processor.service(http11processor.java:391)
    org.apache.coyote.abstractprocessorlight.process(abstractprocessorlight.java:63)
    org.apache.coyote.abstractprotocol$connectionhandler.process(abstractprotocol.java:896)
    org.apache.tomcat.util.net.nioendpoint$socketprocessor.dorun(nioendpoint.java:1744)
    org.apache.tomcat.util.net.socketprocessorbase.run(socketprocessorbase.java:52)
    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:1589)
note the full stack trace of the root cause is available in the server logs.

apache tomcat/10.1.18

Je sais qu'il ne trouve pas le servlet (?) à l'emplacement indiqué, mais je ne sais pas comment résoudre ce problème. Toute aide serait grandement appréciée.

Voici mon dossier :

index.jsp

<html>
<body>
<h2>hello world!</h2>
<form action="myservlet" method="get">
    <input type="submit" value="enter">
</form>
</body>
</html>

myservlet.java

package servlets;

import jakarta.servlet.servletexception;
import jakarta.servlet.annotation.webservlet;
import jakarta.servlet.http.httpservlet;
import jakarta.servlet.http.httpservletrequest;
import jakarta.servlet.http.httpservletresponse;

import java.io.ioexception;

@webservlet("/myservlet")
public class myservlet extends httpservlet {

    myservlet(){
        super();
    }

    @override
    protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
        super.doget(req, resp);
    }

    @override
    protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
        super.dopost(req, resp);
    }
}

pom.xml

<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 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelversion>4.0.0</modelversion>
  <groupid>org.example</groupid>
  <artifactid>baseproject</artifactid>
  <packaging>war</packaging>
  <version>1.0-snapshot</version>
  <name>baseproject maven webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupid>junit</groupid>
      <artifactid>junit</artifactid>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupid>jakarta.servlet</groupid>
      <artifactid>jakarta.servlet-api</artifactid>
      <version>6.0.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalname>baseproject</finalname>
  </build>
</project>

J'ai essayé de supprimer '@webservlet("/myservlet")' de myservlet.java et d'ajouter manuellement le servlet et le mappage de servlet à web.xml comme ceci :

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>Servlets.MyServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
  </servlet-mapping>

</web-app>

Cependant, cela entraîne toujours une erreur 500.

Solution de contournement

Exposez le constructeur du servlet afin que Tomcat puisse l'exécuter.

public MyServlet() {
    super();
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer