| // |
| // ======================================================================== |
| // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.jsp; |
| |
| import static org.junit.Assert.*; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.net.URL; |
| import java.net.URLClassLoader; |
| |
| import javax.servlet.ServletException; |
| import javax.servlet.http.HttpServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.jsp.JspFactory; |
| |
| import org.eclipse.jetty.servlet.ServletHolder; |
| import org.eclipse.jetty.servlet.ServletTester; |
| import org.eclipse.jetty.toolchain.test.MavenTestingUtils; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.apache.jasper.runtime.JspFactoryImpl; |
| import org.apache.tomcat.InstanceManager; |
| import org.apache.tomcat.SimpleInstanceManager; |
| import org.eclipse.jetty.servlet.ServletContextHandler; |
| |
| public class TestJettyJspServlet |
| { |
| File _dir; |
| ServletTester _tester; |
| |
| public static class DfltServlet extends HttpServlet |
| { |
| |
| public DfltServlet() |
| { |
| super(); |
| } |
| |
| /** |
| * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) |
| */ |
| @Override |
| protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException |
| { |
| resp.setContentType("html/text"); |
| resp.getOutputStream().println("This.Is.The.Default."); |
| } |
| |
| } |
| |
| @Before |
| public void setUp () throws Exception |
| { |
| JspFactory.setDefaultFactory(new JspFactoryImpl()); |
| _dir = MavenTestingUtils.getTestResourceDir("base"); |
| _tester = new ServletTester("/context"); |
| _tester.getContext().setClassLoader(new URLClassLoader(new URL[0], Thread.currentThread().getContextClassLoader())); |
| ServletHolder jspHolder = _tester.getContext().addServlet(JettyJspServlet.class, "/*"); |
| jspHolder.setInitParameter("scratchdir", MavenTestingUtils.getTargetTestingDir().getAbsolutePath()); |
| _tester.getContext().setResourceBase(_dir.getAbsolutePath()); |
| _tester.getContext().setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager()); |
| ServletHolder dfltHolder = new ServletHolder(); |
| dfltHolder.setName("default"); |
| dfltHolder.setHeldClass( DfltServlet.class); |
| _tester.getContext().addServlet(dfltHolder, "/"); |
| |
| _tester.start(); |
| } |
| |
| @After |
| public void tearDown() throws Exception |
| { |
| if (_tester != null) |
| _tester.stop(); |
| } |
| |
| @Test |
| public void testWithJsp() throws Exception |
| { |
| //test that an ordinary jsp is served by jsp servlet |
| String request = "" + |
| "GET /context/foo.jsp HTTP/1.1\r\n" + |
| "Host: localhost\r\n" + |
| "Connection: close\r\n" + |
| "\r\n"; |
| String response = _tester.getResponses(request); |
| assertTrue(!response.contains("This.Is.The.Default.")); |
| } |
| |
| |
| @Test |
| public void testWithDirectory() throws Exception |
| { |
| //test that a dir is served by the default servlet |
| String request = "" + |
| "GET /context/dir HTTP/1.1\r\n" + |
| "Host: localhost\r\n" + |
| "Connection: close\r\n" + |
| "\r\n"; |
| String response = _tester.getResponses(request); |
| assertTrue(response.contains("This.Is.The.Default.")); |
| } |
| |
| } |