title: Java+Maven+Embedded Tomcat: Project refuses to recognize web page
body: <p>I have been trying to make my Java application host a web page (an HTML page, not JSP) through <code>Apache Tomcat</code> embedded in the application. I am using <code>Maven</code> for the build system on <code>NetBeans IDE 8.0.2.</code> For some reason, <code>Tomcat</code> refuses to recognise the <code>index.html</code> page I have placed in the application despite multiple attempts and creating all sorts of folders like <code>WEB-INF</code>. But it still throws a <code>404</code> error at me.</p>
  
  <p>Here is some of the relevant code as I have set up in my project (some code has been omitted but irrelevant to the situation):</p>
  
  <p><em>1. MainApplication.java - fires up Tomcat</em></p>
  
  <pre><code>import java.util.Calendar;
  import java.util.Date;
  import java.util.Timer;
  import java.util.TimerTask;
  import java.io.*;
  import java.util.Optional;
  import org.apache.catalina.startup.Tomcat;
  
  public class MainApplication{
  
      public static final Optional&lt;String&gt; port = Optional.ofNullable(System.getenv("PORT"));
  
      public static void main(String[] args) throws Exception {
          String contextPath = "/";
          String appBase = ".";
          Tomcat tomcat = new Tomcat();
          tomcat.setPort(Integer.valueOf(port.orElse("8080")));
          tomcat.getHost().setAppBase(appBase);
          tomcat.addWebapp(contextPath, appBase);
          tomcat.start();
          tomcat.getServer().await();
      }
  }
  </code></pre>
  
  <p><em>2. ShuttleServlet.java</em></p>
  
  <pre><code>@WebServlet(
              name = "ShuttleServlet", urlPatterns = {"/shuttle"}
      )
  
  public class ShuttleServlet extends HttpServlet {
  
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          // Code to interact with application to be added later
      } 
  </code></pre>
  
  <p><em>3. Directory structure</em></p>
  
  <pre><code>- src
  |
   - main
   |
    - resources
    - webapp
    |
      * index.html
      * scripts.js
  </code></pre>
  
  <p><em>4. Maven pom.xml</em></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;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/xsd/maven-4.0.0.xsd"&gt;
      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
      &lt;groupId&gt;com.example&lt;/groupId&gt;
      &lt;artifactId&gt;TransportApp&lt;/artifactId&gt;
      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
      &lt;packaging&gt;jar&lt;/packaging&gt;
      &lt;dependencies&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat.embed&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-embed-core&lt;/artifactId&gt;
              &lt;version&gt;${tomcat.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat.embed&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-embed-logging-juli&lt;/artifactId&gt;
              &lt;version&gt;${tomcat.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat.embed&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-embed-jasper&lt;/artifactId&gt;
              &lt;version&gt;${tomcat.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-jasper&lt;/artifactId&gt;
              &lt;version&gt;${tomcat.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-jasper-el&lt;/artifactId&gt;
              &lt;version&gt;${tomcat.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-jsp-api&lt;/artifactId&gt;
              &lt;version&gt;${tomcat.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;jstl&lt;/groupId&gt;
              &lt;artifactId&gt;jstl&lt;/artifactId&gt;
              &lt;version&gt;1.2&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;mysql&lt;/groupId&gt;
              &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
              &lt;version&gt;6.0.5&lt;/version&gt;
          &lt;/dependency&gt;
      &lt;/dependencies&gt;
      &lt;properties&gt;
          &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
          &lt;maven.compiler.source&gt;1.7&lt;/maven.compiler.source&gt;
          &lt;maven.compiler.target&gt;1.7&lt;/maven.compiler.target&gt;
          &lt;tomcat.version&gt;7.0.57&lt;/tomcat.version&gt;
      &lt;/properties&gt;
      &lt;build&gt;
    &lt;finalName&gt;TransportApp&lt;/finalName&gt;
    &lt;resources&gt;
        &lt;resource&gt;
            &lt;directory&gt;src/main/webapp&lt;/directory&gt;
            &lt;targetPath&gt;META-INF/resources&lt;/targetPath&gt;
        &lt;/resource&gt;
    &lt;/resources&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
            &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
            &lt;version&gt;2.3.2&lt;/version&gt;
            &lt;inherited&gt;true&lt;/inherited&gt;
            &lt;configuration&gt;
                &lt;source&gt;1.8&lt;/source&gt;
                &lt;target&gt;1.8&lt;/target&gt;
            &lt;/configuration&gt;          
        &lt;/plugin&gt;      
        &lt;plugin&gt;
            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
            &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt;
            &lt;configuration&gt;
                &lt;descriptorRefs&gt;
                    &lt;descriptorRef&gt;jar-with-dependencies&lt;/descriptorRef&gt;
                &lt;/descriptorRefs&gt;
                &lt;finalName&gt;TransportApp-${project.version}&lt;/finalName&gt;
                &lt;archive&gt;
                    &lt;manifest&gt;
                        &lt;mainClass&gt;com.example.TransportApp.MainApplication&lt;/mainClass&gt;
                    &lt;/manifest&gt;
                &lt;/archive&gt;
            &lt;/configuration&gt;
            &lt;executions&gt;
                &lt;execution&gt;
                    &lt;phase&gt;package&lt;/phase&gt;
                    &lt;goals&gt;
                        &lt;goal&gt;single&lt;/goal&gt;
                    &lt;/goals&gt;
                &lt;/execution&gt;
            &lt;/executions&gt;
        &lt;/plugin&gt;     
    &lt;/plugins&gt;
  &lt;/build&gt;            
  &lt;/project&gt;
  </code></pre>
  
  <p><em>5. Tomcat console logs</em>   </p>
  
  <pre><code>Dec 04, 2016 3:09:24 AM org.apache.coyote.AbstractProtocol init
  INFO: Initializing ProtocolHandler ["http-bio-8080"]
  Dec 04, 2016 3:09:24 AM org.apache.catalina.core.StandardService startInternal
  INFO: Starting service Tomcat
  Dec 04, 2016 3:09:24 AM org.apache.catalina.core.StandardEngine startInternal
  INFO: Starting Servlet Engine: Apache Tomcat/7.0.57
  Dec 04, 2016 3:09:24 AM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment
  INFO: No global web.xml found
  Dec 04, 2016 3:09:25 AM org.apache.catalina.util.SessionIdGenerator createSecureRandom
  INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [170] milliseconds.
  Dec 04, 2016 3:09:25 AM org.apache.coyote.AbstractProtocol start
  INFO: Starting ProtocolHandler ["http-bio-8080"]
  </code></pre>
  
  <p>All of these result in a <code>404</code> that has been persistent despite multiple attempts and now-deleted folders. I hope all of this helps in finding the culprit.</p>