I have a form in a jsp page that I'm trying to connect to a servlet, MyServlet. I am using Tomcat 10.x. I keep getting the following error:
HTTP Status 500 – Internal Server ErrorType Exception ReportMessage Error instantiating servlet class [Servlets.MyServlet]Description The server encountered an unexpected condition that prevented it from fulfilling the request.Exceptionjakarta.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 Causejava.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 understand that it is not finding the servlet in the given location(?), but I'm not sure what to do to fix the issue. Any help would be greatly appreciated.
Here are my files:
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 the servlet and servlet mapping to the web.xml as follows:
<!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 resulted in the 500 error.