I have set up an embedded Tomcat server program on Arch Linux on Termux using OpenJDK version 12.
However, I am unable to connect to the server using the browser. The same WAR file with a web.xml works fine on Jetty. Could you point me in the right direction? The Java class is as follows: package launch; import java.text.MessageFormat; import java.util.logging.Logger; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.WebResourceRoot; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.webresources.DirResourceSet; import org.apache.catalina.webresources.StandardRoot; @SuppressWarnings("PMD.ShortClassName") public final class Main { private static final Logger LOGGER = Logger.getLogger(Main.class.getName()); private static final String WORKING_DIR = System.getProperty("java.io.tmpdir") + "/webapps"; private Main() { throw new IllegalStateException("Private constructor"); } public static void main(String[] args) { try { Tomcat tomcat = new Tomcat(); // The port that we should run on can be set into an environment variable // Look for that variable and default to 8080 if it isn't there. String webPort = System.getenv("PORT"); if (webPort == null || webPort.isEmpty()) { webPort = "8080"; } System.out.println(webPort); tomcat.setSilent(false); tomcat.setPort(Integer.valueOf(webPort)); tomcat.setBaseDir(WORKING_DIR); tomcat.getHost().setAppBase(WORKING_DIR); tomcat.getHost().setAutoDeploy(true); tomcat.getHost().setDeployOnStartup(true); System.out.println(System.getProperty("catalina.home")); System.out.println(System.getProperty("catalina.base")); String userDir = System.getProperty("user.dir"); String webappDirLocation = userDir + "/dist/Webapps-2.0.0.war"; tomcat.getHost().getAppBaseFile().mkdir(); // Ensure that the webapps directory exists Context appContext = tomcat.addWebapp(tomcat.getHost(), "/Webapp", webappDirLocation); appContext.setParentClassLoader( Thread.currentThread().getContextClassLoader()); WebResourceRoot resources = new StandardRoot(appContext); resources.addPreResources( new DirResourceSet(resources, "/WEB-INF/classes", "", "/")); appContext.setResources(resources); tomcat.start(); LOGGER.info(() -> { return MessageFormat.format("Deployed {0} as {1}", appContext.getBaseName(), appContext.getBaseName()); }); tomcat.getServer().await(); } catch (LifecycleException lce) { System.err.println(lce); } } } The web.xml is as follows. It's probably irrelevant. <?xml version="1.0" encoding="iso-8859-1"?> <web-app xmlns=" http://java.sun.com/xml/ns/javaee " xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd " version="3.0"> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>servlets.FirstServlet</servlet-class> </servlet> <servlet> <servlet-name>DbServlet</servlet-name> <servlet-class>servlets.DbServlet</servlet-class> </servlet> <servlet> <servlet-name>GetPreferences</servlet-name> <servlet-class>servlets.GetPreferences</servlet-class> </servlet> <servlet> <servlet-name>Checkout</servlet-name> <servlet-class>servlets.Checkout</servlet-class> </servlet> <servlet> <servlet-name>AdderServlet</servlet-name> <servlet-class>servlets.AdderServlet</servlet-class> </servlet> <servlet> <servlet-name>PersonalServlet</servlet-name> <servlet-class>servlets.PersonalServlet</servlet-class> </servlet> <servlet> <servlet-name>Selection</servlet-name> <servlet-class>servlets.Selection</servlet-class> </servlet> <servlet> <servlet-name>ShowSum</servlet-name> <servlet-class>servlets.ShowSum</servlet-class> </servlet> <servlet> <servlet-name>Weight</servlet-name> <servlet-class>servlets.Weight</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/FirstServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Checkout</servlet-name> <url-pattern>/Checkout</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>DbServlet</servlet-name> <url-pattern>/DbServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PersonalServlet</servlet-name> <url-pattern>/PersonalServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AdderServlet</servlet-name> <url-pattern>/AdderServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>GetPreferences</servlet-name> <url-pattern>/GetPreferences</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Selection</servlet-name> <url-pattern>/Selection</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ShowSum</servlet-name> <url-pattern>/ShowSum</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Weight</servlet-name> <url-pattern>/Weight</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> The project is hosted at https://github.com/Fernal73/LearnJava/tree/master/Webapps Regards, Linus Fernandes.