PHP editor Zimo will answer your question on how to fix "java.lang.NoSuchMethodException: Servlets.MyServlet.
I have a form in a jsp page and I'm trying to connect to the servlet myservlet. I'm using tomcat 10.x. I keep getting the following error:
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
I know it didn't find the servlet(?) at the given location, but I'm not sure how to fix that. Any help would be greatly appreciated.
This is my file:
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>
I tried removing '@webservlet("/myservlet")' from myservlet.java and manually adding servlet and servlet mapping to web.xml like this:
<!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>
However, this still results in a 500 error.
Expose the servlet's constructor so that tomcat can run it.
public MyServlet() { super(); }
The above is the detailed content of How to fix java.lang.NoSuchMethodException: Servlets.MyServlet.