Maison > Java > 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
Libérer: 2024-02-09 11:33:18
avant
546 Les gens l'ont consulté

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
Copier après la connexion

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>
Copier après la connexion

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);
    }
}
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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();
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal