Created
September 23, 2019 06:23
-
-
Save gregw/8419c2fa8b9b1f1bb24dcf54d43e78c2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ======================================================================== | |
// Copyright (c) 1995-2019 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.embedded; | |
import java.io.IOException; | |
import java.nio.file.Path; | |
import java.nio.file.Paths; | |
import java.util.EnumSet; | |
import javax.servlet.Filter; | |
import javax.servlet.FilterChain; | |
import javax.servlet.FilterConfig; | |
import javax.servlet.ServletContextEvent; | |
import javax.servlet.ServletContextListener; | |
import javax.servlet.ServletException; | |
import javax.servlet.ServletRequest; | |
import javax.servlet.ServletRequestEvent; | |
import javax.servlet.ServletRequestListener; | |
import javax.servlet.ServletResponse; | |
import javax.servlet.http.Cookie; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import org.eclipse.jetty.http.CookieCompliance; | |
import org.eclipse.jetty.server.HttpConfiguration; | |
import org.eclipse.jetty.server.Server; | |
import org.eclipse.jetty.servlet.DefaultServlet; | |
import org.eclipse.jetty.servlet.ListenerHolder; | |
import org.eclipse.jetty.servlet.ServletContextHandler; | |
import org.eclipse.jetty.servlet.ServletHolder; | |
import org.eclipse.jetty.util.resource.PathResource; | |
import org.eclipse.jetty.util.resource.Resource; | |
import static javax.servlet.DispatcherType.ASYNC; | |
import static javax.servlet.DispatcherType.REQUEST; | |
public class OneServletContext | |
{ | |
public static Server createServer(int port, Resource baseResource) | |
{ | |
Server server = new Server(port); | |
server.getContainedBeans(HttpConfiguration.class).forEach(config -> | |
{ | |
config.setRequestCookieCompliance(CookieCompliance.RFC2965); | |
config.setResponseCookieCompliance(CookieCompliance.RFC2965); | |
}); | |
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); | |
context.setContextPath("/"); | |
context.setBaseResource(baseResource); | |
server.setHandler(context); | |
// add hello servlet | |
context.addServlet(HelloServlet.class, "/hello/*"); | |
context.addServlet(TestServlet.class, "/test/*"); | |
// Add dump servlet on multiple url-patterns | |
ServletHolder debugHolder = new ServletHolder("debug", DumpServlet.class); | |
context.addServlet(debugHolder, "/dump/*"); | |
context.addServlet(debugHolder, "*.dump"); | |
// add default servlet (for error handling and static resources) | |
context.addServlet(DefaultServlet.class, "/"); | |
// sprinkle in a few filters to demonstrate behaviors | |
context.addFilter(TestFilter.class, "/test/*", EnumSet.of(REQUEST)); | |
context.addFilter(TestFilter.class, "*.test", EnumSet.of(REQUEST, ASYNC)); | |
// and a few listeners to show other ways of working with servlets | |
context.getServletHandler().addListener(new ListenerHolder(InitListener.class)); | |
context.getServletHandler().addListener(new ListenerHolder(RequestListener.class)); | |
return server; | |
} | |
public static void main(String[] args) throws Exception | |
{ | |
int port = ExampleUtil.getPort(args, "jetty.http.port", 8080); | |
Path tempDir = Paths.get(System.getProperty("java.io.tmpdir")); | |
Server server = createServer(port, new PathResource(tempDir)); | |
server.start(); | |
server.dumpStdErr(); | |
server.join(); | |
} | |
public static class TestFilter implements Filter | |
{ | |
@Override | |
public void init(FilterConfig filterConfig) | |
{ | |
} | |
@Override | |
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException | |
{ | |
if (response instanceof HttpServletResponse) | |
{ | |
HttpServletResponse httpServletResponse = (HttpServletResponse)response; | |
httpServletResponse.setHeader("X-TestFilter", "true"); | |
} | |
chain.doFilter(request, response); | |
} | |
@Override | |
public void destroy() | |
{ | |
} | |
} | |
public static class InitListener implements ServletContextListener | |
{ | |
@Override | |
public void contextInitialized(ServletContextEvent sce) | |
{ | |
sce.getServletContext().setAttribute("X-Init", "true"); | |
} | |
@Override | |
public void contextDestroyed(ServletContextEvent sce) | |
{ | |
} | |
} | |
public static class RequestListener implements ServletRequestListener | |
{ | |
@Override | |
public void requestInitialized(ServletRequestEvent sre) | |
{ | |
sre.getServletRequest().setAttribute("X-ReqListener", "true"); | |
} | |
@Override | |
public void requestDestroyed(ServletRequestEvent sre) | |
{ | |
} | |
} | |
public static class TestServlet extends HttpServlet | |
{ | |
private static final long serialVersionUID = -7475490532320808512L; | |
@Override | |
protected void doGet(HttpServletRequest request, | |
HttpServletResponse response) throws ServletException, IOException | |
{ | |
Cookie[] cookies = request.getCookies(); | |
if (cookies != null) | |
{ | |
for (Cookie cookie : cookies) | |
{ | |
System.out.printf( | |
"%s=%s; $Path=%s; $Domain=%s%n", | |
cookie.getName(), | |
cookie.getValue(), | |
cookie.getPath(), | |
cookie.getDomain()); | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment