diff --git a/appserver/tests/appserv-tests/devtests/web/applicationDispatcher/servlet/ServletTest.java b/appserver/tests/appserv-tests/devtests/web/applicationDispatcher/servlet/ServletTest.java
new file mode 100644
index 0000000..a08b8c0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/web/applicationDispatcher/servlet/ServletTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package test;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import javax.naming.*;
+import javax.sql.*;
+import java.sql.*;
+
+public class ServletTest extends HttpServlet{
+
+    private ServletContext context;
+    private static String status = "ApplicationDispatcher::PASS";
+   
+    public void init(ServletConfig config) throws ServletException {
+        super.init(config);
+        System.out.println("[Servlet.init]");
+
+        try{
+            RequestDispatcher requestD = 
+                            getServletContext().getRequestDispatcher("/test.jsp");
+
+            if ( requestD == null){
+                status = "ApplicationDispatcher::FAIL";          
+            }
+            System.out.println("[Servlet.RequestDispatcher: " + requestD + "]");
+        } catch (Throwable t){
+                status = "ApplicationDispatcher::FAIL";          
+        }
+        System.out.println("status: " + status); 
+    }
+
+    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        System.out.println("[Servlet.doGet]");
+        doPost(request, response);
+    }
+
+    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
+        System.out.println("[Servlet.doPost]");
+
+        PrintWriter out = response.getWriter();
+        response.setContentType("text/html");
+        out.println(status);
+    }
+
+}
