I’m trying to get a simple embedded tomcat 10.1.0-M11
example working but I keep getting localhost refused to connect
when I go to http://localhost:8080/aa
. There is no StackOverflow label yet for embedded-tomcat-10
.
Here is my code:
import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; public class App { public static void main(String[] args) throws LifecycleException { Tomcat tomcat = new Tomcat(); tomcat.setBaseDir("temp"); tomcat.setPort(8080); String contextPath = ""; String docBase = new File(".").getAbsolutePath(); Context context = tomcat.addContext(contextPath, docBase); class SampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.println("<html><title>Welcome</title><body>"); writer.println("<h1>Have a Great Day!</h1>"); writer.println("</body></html>"); } } String servletName = "SampleServlet"; String urlPattern = "/aa"; tomcat.addServlet(contextPath, servletName, new SampleServlet()); context.addServletMappingDecoded(urlPattern, servletName); tomcat.start(); tomcat.getServer().await(); } }
Dependencies
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>10.1.0-M11</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>10.1.0-M11</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>10.1.0-M11</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper-el</artifactId> <version>10.1.0-M11</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>10.1.0-M11</version> </dependency> </dependencies>
UPDATE
I have gone through every single version I found that this bug was introduced in version 9.0.0.M4
and never resolved since then. Any newer version renders this example useless.
Advertisement
Answer
As explained in this question, you need to add a Connector, which can be done like this:
... tomcat.setPort(8080); tomcat.getConnector(); ...