Index: devtests/web/servlet-4.0/mappingDiscovery/WebTest.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/WebTest.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/WebTest.java (working copy) @@ -0,0 +1,157 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +import java.io.*; +import java.net.*; + +import com.sun.ejte.ccl.reporter.*; +import org.glassfish.grizzly.test.http2.*; + +/* + * Unit test for deny-uncovered-http-methods. + */ +public class WebTest { + + private static final String TEST_NAME = "servlet-4.0-mapping-discovery"; + + private static SimpleReporterAdapter stat + = new SimpleReporterAdapter("appserv-tests"); + + private String host; + private int port; + private String contextRoot; + private String appName; + private String serverLog; + + public WebTest(String[] args) { + host = args[0]; + port = Integer.parseInt(args[1]); + contextRoot = args[2]; + appName = args[3]; + serverLog = args[4]; + + } + + public static void main(String[] args) { + + stat.addDescription("Unit test for mapping discovery"); + WebTest webTest = new WebTest(args); + + try { + boolean contextRootMatch = webTest.run("GET", 200, false, "/", ".*ServletC.MappingImpl\\{matchValue=.*pattern=/.*servletName=,.*mappingMatch=CONTEXT_ROOT\\}.*FORWARD_MAPPING: null.*INCLUDE_MAPPING: null.*ASYNC_MAPPING: null.*"); + boolean defaultMatch = webTest.run("GET", 200, false, "//foo", ".*ServletC.MappingImpl\\{matchValue=foo.*pattern=/,.*servletName=ServletC.*mappingMatch=DEFAULT\\}.*FORWARD_MAPPING: null.*INCLUDE_MAPPING: null.*ASYNC_MAPPING: null.*"); + boolean exactMatch = webTest.run("GET", 200, false, "/ServletC", ".*ServletC.MappingImpl\\{matchValue=ServletC.*pattern=/ServletC.*servletName=ServletC.*mappingMatch=EXACT\\}.*FORWARD_MAPPING: null.*INCLUDE_MAPPING: null.*ASYNC_MAPPING: null.*"); + boolean extensionMatch = webTest.run("GET", 200, false, "/foo.Issue73", ".*ServletC.MappingImpl\\{matchValue=foo.*pattern=\\*\\.Issue73.*servletName=ServletC.*mappingMatch=EXTENSION\\}.*FORWARD_MAPPING: null.*INCLUDE_MAPPING: null.*ASYNC_MAPPING: null.*"); + boolean pathMatch = webTest.run("GET", 200, false, "/path/foo", ".*ServletC.MappingImpl\\{matchValue=foo.*pattern=/path/\\*.*servletName=ServletC.*mappingMatch=PATH\\}.*FORWARD_MAPPING: null.*INCLUDE_MAPPING: null.*ASYNC_MAPPING: null.*"); + + stat.addStatus(TEST_NAME + "-simple", ((contextRootMatch && + defaultMatch && + exactMatch && + extensionMatch && + pathMatch)? stat.PASS : stat.FAIL)); + + boolean asyncMatch = webTest.run("GET", 200, false, "/AAsyncDispatchToC", ".*ServletC.MappingImpl\\{matchValue=ServletC.*pattern=/ServletC.*servletName=,.*mappingMatch=EXACT\\}.*FORWARD_MAPPING: null.*INCLUDE_MAPPING: null.*ASYNC_MAPPING:.*MappingImpl\\{matchValue=AAsyncDispatchToC.*pattern=/AAsyncDispatchToC.*servletName=AAsyncDispatchToC.*mappingMatch=EXACT}.*"); + + stat.addStatus(TEST_NAME + "-async", + asyncMatch ? stat.PASS : stat.FAIL); + + boolean forwardMatch1 = webTest.run("GET", 200, false, "/AForwardToB", ".*ServletC.MappingImpl\\{matchValue=ServletC,.*pattern=/ServletC,.*servletName=,.*mappingMatch=EXACT\\}.*FORWARD_MAPPING:.MappingImpl\\{matchValue=AForwardToB,.pattern=/AForwardToB,.servletName=AForwardToB,.mappingMatch=EXACT\\}.*INCLUDE_MAPPING:.null.*ASYNC_MAPPING:.null.*"); + boolean forwardMatch2 = webTest.run("GET", 200, false, "/BForwardToC", ".*ServletC.MappingImpl\\{matchValue=ServletC,.*pattern=/ServletC,.*servletName=,.*mappingMatch=EXACT\\}.*FORWARD_MAPPING:.MappingImpl\\{matchValue=BForwardToC,.pattern=/BForwardToC,.servletName=BForwardToC,.mappingMatch=EXACT\\}.*INCLUDE_MAPPING:.null.*ASYNC_MAPPING:.null.*"); + + stat.addStatus(TEST_NAME + "-forward", ((forwardMatch1 && + forwardMatch2)? stat.PASS : stat.FAIL)); + + boolean includeMatch1 = webTest.run("GET", 200, false, "/AIncludesB", ".*AIncludesB.MappingImpl\\{matchValue=AIncludesB,.pattern=/AIncludesB,.servletName=AIncludesB,.mappingMatch=EXACT\\}.*FORWARD_MAPPING:.null.*INCLUDE_MAPPING:.null.*In.BIncludesC.MappingImpl\\{matchValue=AIncludesB,.pattern=/AIncludesB,.servletName=AIncludesB,.mappingMatch=EXACT\\}.*FORWARD_MAPPING:.null.*INCLUDE_MAPPING:.MappingImpl\\{matchValue=BIncludesC,.pattern=/BIncludesC,.servletName=,.mappingMatch=EXACT\\}.*In.ServletC.MappingImpl\\{matchValue=AIncludesB,.pattern=/AIncludesB,.servletName=AIncludesB,.mappingMatch=EXACT\\}.*FORWARD_MAPPING:.null.*INCLUDE_MAPPING:.MappingImpl\\{matchValue=ServletC,.pattern=/ServletC,.servletName=,.mappingMatch=EXACT\\}.*ASYNC_MAPPING:.null.*"); + boolean includeMatch2 = webTest.run("GET", 200, false, "/BIncludesC", ".*In.BIncludesC.MappingImpl\\{matchValue=BIncludesC,.pattern=/BIncludesC,.servletName=BIncludesC,.mappingMatch=EXACT\\}.*.FORWARD_MAPPING:.null.*.INCLUDE_MAPPING:.null.*In.ServletC.MappingImpl\\{matchValue=BIncludesC,.pattern=/BIncludesC,.servletName=BIncludesC,.mappingMatch=EXACT\\}.*.FORWARD_MAPPING:.null.*.INCLUDE_MAPPING:.MappingImpl\\{matchValue=ServletC,.pattern=/ServletC,.servletName=,.mappingMatch=EXACT\\}.*.ASYNC_MAPPING:.null.*"); + stat.addStatus(TEST_NAME + "-include", ((includeMatch1 && + includeMatch2)? stat.PASS : stat.FAIL)); + + boolean boundsMatch1 = webTest.run("GET", 200, false, "/a/foo", ".*"); + boolean boundsMatch2 = webTest.run("GET", 200, false, "/f", ".*"); + stat.addStatus(TEST_NAME + "-bounds", ((boundsMatch1 && boundsMatch2)? stat.PASS : stat.FAIL)); + + } catch( Exception ex) { + ex.printStackTrace(); + stat.addStatus(TEST_NAME, stat.FAIL); + } + + stat.printSummary(); + } + + private boolean run(String method, + int status, boolean checkOKStatusOnly, String path, String matchRegex) throws Exception { + System.out.println("host: " + host + " port: " + port + " path: " + path); + try (HttpClient httpClient = HttpClient.builder(). + host(host).port(port).build()) { + httpClient.request().path(path).method(method).build().send(); + HttpResponse httpResponse = httpClient.getHttpResponse(); + + int code = httpResponse.getStatus(); + boolean ok = (code == status); + if (checkOKStatusOnly) { + return ok; + } + BufferedReader bis = null; + String line = null; + + try { + bis = new BufferedReader(new StringReader(httpResponse.getBody())); + line = bis.readLine(); + System.out.println(line); + ok = line.matches(matchRegex); + System.out.println("matches: " + ok); + } catch( Exception ex){ + ex.printStackTrace(); + throw new Exception("Test UNPREDICTED-FAILURE"); + } finally { + try { + if (bis != null) { + bis.close(); + } + } catch(IOException ioe) { + // ignore + } + } + + return ok; + } + } + +} Index: devtests/web/servlet-4.0/mappingDiscovery/build.properties =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/build.properties (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/build.properties (working copy) @@ -0,0 +1,6 @@ + + + + + + Index: devtests/web/servlet-4.0/mappingDiscovery/build.xml =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/build.xml (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/build.xml (working copy) @@ -0,0 +1,123 @@ + + + + + + +]> + + + + &commonSetup; + &commonBuild; + &testproperties; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: devtests/web/servlet-4.0/mappingDiscovery/descriptor/glassfish-web.xml =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/descriptor/glassfish-web.xml (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/descriptor/glassfish-web.xml (working copy) @@ -0,0 +1,47 @@ + + + + + + / + Index: devtests/web/servlet-4.0/mappingDiscovery/descriptor/web.xml =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/descriptor/web.xml (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/descriptor/web.xml (working copy) @@ -0,0 +1,114 @@ + + + + + + + + + AForwardToB + AForwardToB + + + BForwardToC + BForwardToC + + + AForwardToB + /AForwardToB + + + BForwardToC + /BForwardToC + + + + + + AIncludesB + AIncludesB + + + BIncludesC + BIncludesC + + + AIncludesB + /AIncludesB + + + BIncludesC + /BIncludesC + + + + + AAsyncDispatchToC + AAsyncDispatchToC + true + + + AAsyncDispatchToC + /AAsyncDispatchToC + + + + + + + ServletC + ServletC + + + ServletC + /ServletC + "" + *.Issue73 + /path/* + / + /ab/* + /a/* + //* + + + Index: devtests/web/servlet-4.0/mappingDiscovery/servlet/AAsyncDispatchToC.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/servlet/AAsyncDispatchToC.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/servlet/AAsyncDispatchToC.java (working copy) @@ -0,0 +1,125 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import java.io.IOException; +import javax.servlet.AsyncContext; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.ServletMapping; + +public class AAsyncDispatchToC extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + AsyncContext asyncContext = request.startAsync(); + + request.getServletContext().log(this.getClass().getSimpleName() + " getServletMapping: " + + request.getServletMapping()); + ServletMapping forwardMapping = (ServletMapping) request.getAttribute(RequestDispatcher.FORWARD_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " FORWARD_MAPPING attribute: " + + forwardMapping); + ServletMapping includeMapping = (ServletMapping) request.getAttribute(RequestDispatcher.INCLUDE_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " INCLUDE_MAPPING attribute: " + + includeMapping); + ServletMapping asyncMapping = (ServletMapping) request.getAttribute(AsyncContext.ASYNC_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " ASYNC_MAPPING attribute: " + + asyncMapping); + asyncContext.dispatch("/ServletC"); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} Index: devtests/web/servlet-4.0/mappingDiscovery/servlet/AForwardToB.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/servlet/AForwardToB.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/servlet/AForwardToB.java (working copy) @@ -0,0 +1,125 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.AsyncContext; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.ServletMapping; + +public class AForwardToB extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + request.getServletContext().log(this.getClass().getSimpleName() + " getServletMapping: " + + request.getServletMapping()); + ServletMapping forwardMapping = (ServletMapping) request.getAttribute(RequestDispatcher.FORWARD_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " FORWARD_MAPPING attribute: " + + forwardMapping); + ServletMapping includeMapping = (ServletMapping) request.getAttribute(RequestDispatcher.INCLUDE_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " INCLUDE_MAPPING attribute: " + + includeMapping); + ServletMapping asyncMapping = (ServletMapping) request.getAttribute(AsyncContext.ASYNC_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " ASYNC_MAPPING attribute: " + + asyncMapping); + RequestDispatcher rd = request.getRequestDispatcher("/BForwardToC"); + rd.forward(request, response); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} Index: devtests/web/servlet-4.0/mappingDiscovery/servlet/AIncludesB.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/servlet/AIncludesB.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/servlet/AIncludesB.java (working copy) @@ -0,0 +1,141 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.ServletMapping; + + +public class AIncludesB extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + try { + /* TODO output your page here. You may use following sample code. */ + out.print(""); + out.print(""); + out.print(""); + out.print("Servlet AIncludesB"); + out.print(""); + out.print(""); + out.print("

Servlet AIncludesB at " + request.getContextPath() + "

"); + request.getServletContext().log(this.getClass().getSimpleName() + " getServletMapping: " + + request.getServletMapping()); + ServletMapping forwardMapping = (ServletMapping) request.getAttribute(RequestDispatcher.FORWARD_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " FORWARD_MAPPING attribute: " + + forwardMapping); + ServletMapping includeMapping = (ServletMapping) request.getAttribute(RequestDispatcher.INCLUDE_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " INCLUDE_MAPPING attribute: " + + includeMapping); + out.print("

In " + this.getClass().getSimpleName() + " " + request.getServletMapping() + "

"); + out.print("

FORWARD_MAPPING: " + forwardMapping + "

"); + out.print("

INCLUDE_MAPPING: " + includeMapping + "

"); + out.print("
"); + RequestDispatcher rd = request.getRequestDispatcher("/BIncludesC"); + rd.include(request, response); + out.print(""); + out.print(""); + } finally { + out.close(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} Index: devtests/web/servlet-4.0/mappingDiscovery/servlet/BForwardToC.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/servlet/BForwardToC.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/servlet/BForwardToC.java (working copy) @@ -0,0 +1,124 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.AsyncContext; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.ServletMapping; + +public class BForwardToC extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + request.getServletContext().log(this.getClass().getSimpleName() + " " + + request.getServletMapping()); + ServletMapping forwardMapping = (ServletMapping) request.getAttribute(RequestDispatcher.FORWARD_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " FORWARD_MAPPING attribute: " + + forwardMapping); + ServletMapping includeMapping = (ServletMapping) request.getAttribute(RequestDispatcher.INCLUDE_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " INCLUDE_MAPPING attribute: " + + includeMapping); + ServletMapping asyncMapping = (ServletMapping) request.getAttribute(AsyncContext.ASYNC_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " ASYNC_MAPPING attribute: " + + asyncMapping); + RequestDispatcher rd = request.getRequestDispatcher("/ServletC"); + rd.forward(request, response); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} Index: devtests/web/servlet-4.0/mappingDiscovery/servlet/BIncludesC.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/servlet/BIncludesC.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/servlet/BIncludesC.java (working copy) @@ -0,0 +1,132 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.ServletMapping; + + +public class BIncludesC extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + try { + /* TODO output your page here. You may use following sample code. */ + request.getServletContext().log(this.getClass().getSimpleName() + " " + + request.getServletMapping()); + ServletMapping forwardMapping = (ServletMapping) request.getAttribute(RequestDispatcher.FORWARD_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " FORWARD_MAPPING attribute: " + + forwardMapping); + ServletMapping includeMapping = (ServletMapping) request.getAttribute(RequestDispatcher.INCLUDE_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " INCLUDE_MAPPING attribute: " + + includeMapping); + out.print("

In " + this.getClass().getSimpleName() + " " + request.getServletMapping() + "

"); + out.print("

FORWARD_MAPPING: " + forwardMapping + "

"); + out.print("

INCLUDE_MAPPING: " + includeMapping + "

"); + out.print("
"); + RequestDispatcher rd = request.getRequestDispatcher("/ServletC"); + rd.include(request, response); + } finally { + out.close(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} Index: devtests/web/servlet-4.0/mappingDiscovery/servlet/ServletC.java =================================================================== --- devtests/web/servlet-4.0/mappingDiscovery/servlet/ServletC.java (nonexistent) +++ devtests/web/servlet-4.0/mappingDiscovery/servlet/ServletC.java (working copy) @@ -0,0 +1,134 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.AsyncContext; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.ServletMapping; + +public class ServletC extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + try { + /* TODO output your page here. You may use following sample code. */ + request.getServletContext().log(this.getClass().getSimpleName() + " " + + request.getServletMapping()); + ServletMapping forwardMapping = (ServletMapping) request.getAttribute(RequestDispatcher.FORWARD_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " FORWARD_MAPPING attribute: " + + forwardMapping); + ServletMapping includeMapping = (ServletMapping) request.getAttribute(RequestDispatcher.INCLUDE_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " INCLUDE_MAPPING attribute: " + + includeMapping); + ServletMapping asyncMapping = (ServletMapping) request.getAttribute(AsyncContext.ASYNC_MAPPING); + request.getServletContext().log(this.getClass().getSimpleName() + " ASYNC_MAPPING attribute: " + + asyncMapping); + out.print("

In " + this.getClass().getSimpleName() + " " + request.getServletMapping() + "

"); + out.print("

FORWARD_MAPPING: " + forwardMapping + "

"); + out.print("

INCLUDE_MAPPING: " + includeMapping + "

"); + out.print("

ASYNC_MAPPING: " + asyncMapping + "

"); + out.print("
"); + } finally { + out.close(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +}