Repository: quarkusio/quarkus
Issue: Trailing slash required with Undertow + custom root path

**Describe the bug**
When using `quarkus-undertow` in combination with custom root path, a trailing slash has to be appended to the app path. This is not required when using vert.x. Additionally, Java™ Servlet Specification assumes that the slash shouldn't be required:

> A `ServletContext` is rooted at a known path within a Web server. For example, a
servlet context could be located at `http://www.mycorp.com/catalog`. All requests
that begin with the `/catalog` request path, known as the *context path*, are routed to
the Web application associated with the `ServletContext`.

**Expected behavior**
GET http://localhost:8080/foo => 200 OK (Welcome page or root resource)
GET http://localhost:8080/foo/ => 200 OK (ditto)

**Actual behavior**
GET http://localhost:8080/foo => 404 Not Found + "Resource not found" page
GET http://localhost:8080/foo/ => 200 OK

**Configuration**
```properties
quarkus.servlet.context-path = /foo
```

**Environment (please complete the following information):**
 - Quarkus version or git rev: 1.3.1.Final


Changed files:
extensions/undertow/deployment/src/main/java/io/quarkus/undertow/deployment/UndertowBuildStep.java
extensions/undertow/deployment/src/test/java/io/quarkus/undertow/test/ContextPathTestCase.java

diff --git a/extensions/undertow/deployment/src/main/java/io/quarkus/undertow/deployment/UndertowBuildStep.java b/extensions/undertow/deployment/src/main/java/io/quarkus/undertow/deployment/UndertowBuildStep.java
index 83632edb168..4f23d84e7c6 100644
--- a/extensions/undertow/deployment/src/main/java/io/quarkus/undertow/deployment/UndertowBuildStep.java
+++ b/extensions/undertow/deployment/src/main/java/io/quarkus/undertow/deployment/UndertowBuildStep.java
@@ -172,6 +172,7 @@ public ServiceStartBuildItem boot(UndertowDeploymentRecorder recorder,
             undertowProducer.accept(new DefaultRouteBuildItem(ut));
         } else {
             routeProducer.produce(new RouteBuildItem(servletContextPathBuildItem.getServletContextPath() + "/*", ut, false));
+            routeProducer.produce(new RouteBuildItem(servletContextPathBuildItem.getServletContextPath(), ut, false));
         }
         return new ServiceStartBuildItem("undertow");
     }
diff --git a/extensions/undertow/deployment/src/test/java/io/quarkus/undertow/test/ContextPathTestCase.java b/extensions/undertow/deployment/src/test/java/io/quarkus/undertow/test/ContextPathTestCase.java
index 9e39567c33a..4db6c2fb7d7 100644
--- a/extensions/undertow/deployment/src/test/java/io/quarkus/undertow/test/ContextPathTestCase.java
+++ b/extensions/undertow/deployment/src/test/java/io/quarkus/undertow/test/ContextPathTestCase.java
@@ -19,6 +19,7 @@ public class ContextPathTestCase {
     static QuarkusUnitTest runner = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addClasses(TestServlet.class, TestGreeter.class)
+                    .addAsResource(new StringAsset("index"), "META-INF/resources/index.html")
                     .addAsResource(new StringAsset("quarkus.servlet.context-path=" + CONTEXT_PATH), "application.properties"));
 
     @Test
@@ -28,4 +29,12 @@ public void testServlet() {
                 .body(is("test servlet"));
     }
 
+    @Test
+    public void testNoSlash() {
+        RestAssured.given().redirects().follow(false).when().get("/foo").then()
+                .statusCode(302);
+        RestAssured.when().get("/foo").then()
+                .statusCode(200)
+                .body(is("index"));
+    }
 }