From eeb617f4d8e6a4155ccf6d5a8e25de4e6140449b Mon Sep 17 00:00:00 2001 From: Jesse McConnell Date: Wed, 12 Oct 2011 21:00:42 -0500 Subject: [PATCH 1/3] Adding an example of a forwarding rewrite embedded server --- example-jetty-embedded/pom.xml | 10 + .../eclipse/jetty/embedded/ForwardServer.java | 221 ++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java diff --git a/example-jetty-embedded/pom.xml b/example-jetty-embedded/pom.xml index 021c678580b..93f8ad5ff4e 100644 --- a/example-jetty-embedded/pom.xml +++ b/example-jetty-embedded/pom.xml @@ -28,6 +28,11 @@ jetty-servlets ${project.version} + + org.eclipse.jetty + jetty-rewrite + ${project.version} + org.eclipse.jetty jetty-deploy @@ -42,6 +47,11 @@ org.eclipse.jetty jetty-ajp ${project.version} + + + org.eclipse.jetty.toolchain + jetty-test-helper + test org.eclipse.jetty diff --git a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java new file mode 100644 index 00000000000..c3d26046db1 --- /dev/null +++ b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java @@ -0,0 +1,221 @@ +package org.eclipse.jetty.embedded; + +//======================================================================== +//Copyright (c) 2004-2009 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. +//======================================================================== + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.GenericServlet; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jetty.rewrite.handler.RedirectPatternRule; +import org.eclipse.jetty.rewrite.handler.RewriteHandler; +import org.eclipse.jetty.rewrite.handler.RewritePatternRule; +import org.eclipse.jetty.rewrite.handler.Rule; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ContextHandler; +import org.eclipse.jetty.server.handler.ContextHandlerCollection; +import org.eclipse.jetty.server.handler.HandlerCollection; +import org.eclipse.jetty.server.handler.ResourceHandler; +import org.eclipse.jetty.server.nio.SelectChannelConnector; +import org.eclipse.jetty.servlet.FilterMapping; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.toolchain.test.MavenTestingUtils; + +public class ForwardServer +{ + + private static Server _server; + private static SelectChannelConnector _connector; + private static HandlerCollection _handlerCollection; + private static ServletContextHandler _contextHandler; + private static RewriteHandler _rewriteHandler; + + /* + * http://localhost:8080/random?echo=echoText -> echoText + * http://localhost:8080/?echo=echoText -> txeTohce + * http://localhost:8080/context?echo=echoText -> echoText + * http://localhost:8080/context -> Roger That! + * http://localhost:8080/random -> Roger That! + */ + + public static void main( String[] args ) throws Exception + { + _server = new Server(); + _server.setSendServerVersion(false); + _connector = new SelectChannelConnector(); + _connector.setPort(8080); + + + _rewriteHandler = new RewriteHandler(); + _rewriteHandler.setRewriteRequestURI(true); + _rewriteHandler.setRewritePathInfo(false); + _rewriteHandler.setOriginalPathAttribute("requestedPath"); + + RewritePatternRule rule0 = new RewritePatternRule(); + + rule0.setPattern("/sample/*"); + rule0.setReplacement("/context"); + rule0.setTerminating(true); + + RewritePatternRule rule1 = new RewritePatternRule(); + + rule1.setPattern("/goodies/*"); + rule1.setReplacement("/context"); + rule1.setTerminating(true); + + + RewritePatternRule rule2 = new RewritePatternRule(); + + rule2.setPattern("/*"); + rule2.setReplacement("/context"); + + _rewriteHandler.setRules(new Rule[]{rule0, rule1, rule2}); + + _handlerCollection = new HandlerCollection(); + + _contextHandler = new ServletContextHandler(); + + _contextHandler.setContextPath("/context"); + _handlerCollection.addHandler(_contextHandler); + + + _contextHandler.addServlet(RogerThatServlet.class, "/*"); + _contextHandler.addServlet(ReserveEchoServlet.class,"/recho/*"); + _contextHandler.addServlet(EchoServlet.class, "/echo/*"); + + _contextHandler.addFilter(ForwardFilter.class, "/*", FilterMapping.REQUEST); + + _rewriteHandler.setHandler(_handlerCollection); + + _server.setHandler(_rewriteHandler); + _server.addConnector( _connector ); + + _server.start(); + + + + } + + public static class RogerThatServlet extends GenericServlet + { + @Override + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException + { + res.getWriter().print("Roger That!"); + } + } + + public static class EchoServlet extends GenericServlet + { + @Override + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException + { + String echoText = req.getParameter("echo"); + + if ( echoText == null ) + { + throw new ServletException("echo is a required parameter"); + } + else + { + res.getWriter().print(echoText); + } + } + } + + public static class ReserveEchoServlet extends GenericServlet + { + @Override + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException + { + String echoText = req.getParameter("echo"); + + if ( echoText == null ) + { + throw new ServletException("echo is a required parameter"); + } + else + { + res.getWriter().print(new StringBuffer(echoText).reverse().toString()); + } + } + } + + + /* + * Forward filter works with roger, echo and reverse echo servlets to test various + * forwarding bits using filters. + * + * when there is an echo parameter and the path info is / it forwards to the reverse echo + * anything else in the pathInfo and it sends straight to the echo servlet...otherwise its + * all roger servlet + */ + public static class ForwardFilter implements Filter + { + ServletContext servletContext; + + public void init(FilterConfig filterConfig) throws ServletException + { + servletContext = filterConfig.getServletContext().getContext("/context"); + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException + { + + if ( servletContext == null || !(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) + { + chain.doFilter(request,response); + return; + } + + HttpServletRequest req = (HttpServletRequest)request; + HttpServletResponse resp = (HttpServletResponse)response; + + System.out.println("getPathInfo() -" + req.getPathInfo()); + System.out.println("getServletInfo() -" + req.getServletPath()); + + + if ( req.getParameter("echo") != null && "/".equals(req.getPathInfo())) + { + RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/recho"); + dispatcher.forward(request,response); + } + else if ( req.getParameter("echo") != null ) + { + RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/echo"); + dispatcher.forward(request,response); + } + else + { + chain.doFilter(request,response); + return; + } + } + + public void destroy() + { + + } + } + +} From 160385606c63bd83db4b9f5d063edbd64357a935 Mon Sep 17 00:00:00 2001 From: Jan Bartel Date: Thu, 13 Oct 2011 13:58:25 +1100 Subject: [PATCH 2/3] 358263 - JDBCSessionIdManager add setDatasource(DataSource) method --- .../jetty/server/session/JDBCSessionIdManager.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java index ad5b244d761..f9a01d68131 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java @@ -199,6 +199,16 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager } + public void setDatasource (DataSource ds) + { + _datasource = ds; + } + + public DataSource getDataSource () + { + return _datasource; + } + public String getDriverClassName() { return _driverClassName; @@ -471,6 +481,9 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager private void initializeDatabase () throws Exception { + if (_datasource != null) + return; //already set up + if (_jndiName!=null) { InitialContext ic = new InitialContext(); From 54d0944019d7f491ea0c72d82c970608a84694d3 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 13 Oct 2011 15:18:55 +1100 Subject: [PATCH 3/3] no ForwardServer --- .../eclipse/jetty/embedded/ForwardServer.java | 221 ------------------ 1 file changed, 221 deletions(-) delete mode 100644 example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java diff --git a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java deleted file mode 100644 index c3d26046db1..00000000000 --- a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ForwardServer.java +++ /dev/null @@ -1,221 +0,0 @@ -package org.eclipse.jetty.embedded; - -//======================================================================== -//Copyright (c) 2004-2009 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. -//======================================================================== - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.GenericServlet; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.eclipse.jetty.rewrite.handler.RedirectPatternRule; -import org.eclipse.jetty.rewrite.handler.RewriteHandler; -import org.eclipse.jetty.rewrite.handler.RewritePatternRule; -import org.eclipse.jetty.rewrite.handler.Rule; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.handler.ContextHandler; -import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.server.handler.HandlerCollection; -import org.eclipse.jetty.server.handler.ResourceHandler; -import org.eclipse.jetty.server.nio.SelectChannelConnector; -import org.eclipse.jetty.servlet.FilterMapping; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.toolchain.test.MavenTestingUtils; - -public class ForwardServer -{ - - private static Server _server; - private static SelectChannelConnector _connector; - private static HandlerCollection _handlerCollection; - private static ServletContextHandler _contextHandler; - private static RewriteHandler _rewriteHandler; - - /* - * http://localhost:8080/random?echo=echoText -> echoText - * http://localhost:8080/?echo=echoText -> txeTohce - * http://localhost:8080/context?echo=echoText -> echoText - * http://localhost:8080/context -> Roger That! - * http://localhost:8080/random -> Roger That! - */ - - public static void main( String[] args ) throws Exception - { - _server = new Server(); - _server.setSendServerVersion(false); - _connector = new SelectChannelConnector(); - _connector.setPort(8080); - - - _rewriteHandler = new RewriteHandler(); - _rewriteHandler.setRewriteRequestURI(true); - _rewriteHandler.setRewritePathInfo(false); - _rewriteHandler.setOriginalPathAttribute("requestedPath"); - - RewritePatternRule rule0 = new RewritePatternRule(); - - rule0.setPattern("/sample/*"); - rule0.setReplacement("/context"); - rule0.setTerminating(true); - - RewritePatternRule rule1 = new RewritePatternRule(); - - rule1.setPattern("/goodies/*"); - rule1.setReplacement("/context"); - rule1.setTerminating(true); - - - RewritePatternRule rule2 = new RewritePatternRule(); - - rule2.setPattern("/*"); - rule2.setReplacement("/context"); - - _rewriteHandler.setRules(new Rule[]{rule0, rule1, rule2}); - - _handlerCollection = new HandlerCollection(); - - _contextHandler = new ServletContextHandler(); - - _contextHandler.setContextPath("/context"); - _handlerCollection.addHandler(_contextHandler); - - - _contextHandler.addServlet(RogerThatServlet.class, "/*"); - _contextHandler.addServlet(ReserveEchoServlet.class,"/recho/*"); - _contextHandler.addServlet(EchoServlet.class, "/echo/*"); - - _contextHandler.addFilter(ForwardFilter.class, "/*", FilterMapping.REQUEST); - - _rewriteHandler.setHandler(_handlerCollection); - - _server.setHandler(_rewriteHandler); - _server.addConnector( _connector ); - - _server.start(); - - - - } - - public static class RogerThatServlet extends GenericServlet - { - @Override - public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException - { - res.getWriter().print("Roger That!"); - } - } - - public static class EchoServlet extends GenericServlet - { - @Override - public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException - { - String echoText = req.getParameter("echo"); - - if ( echoText == null ) - { - throw new ServletException("echo is a required parameter"); - } - else - { - res.getWriter().print(echoText); - } - } - } - - public static class ReserveEchoServlet extends GenericServlet - { - @Override - public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException - { - String echoText = req.getParameter("echo"); - - if ( echoText == null ) - { - throw new ServletException("echo is a required parameter"); - } - else - { - res.getWriter().print(new StringBuffer(echoText).reverse().toString()); - } - } - } - - - /* - * Forward filter works with roger, echo and reverse echo servlets to test various - * forwarding bits using filters. - * - * when there is an echo parameter and the path info is / it forwards to the reverse echo - * anything else in the pathInfo and it sends straight to the echo servlet...otherwise its - * all roger servlet - */ - public static class ForwardFilter implements Filter - { - ServletContext servletContext; - - public void init(FilterConfig filterConfig) throws ServletException - { - servletContext = filterConfig.getServletContext().getContext("/context"); - } - - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException - { - - if ( servletContext == null || !(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) - { - chain.doFilter(request,response); - return; - } - - HttpServletRequest req = (HttpServletRequest)request; - HttpServletResponse resp = (HttpServletResponse)response; - - System.out.println("getPathInfo() -" + req.getPathInfo()); - System.out.println("getServletInfo() -" + req.getServletPath()); - - - if ( req.getParameter("echo") != null && "/".equals(req.getPathInfo())) - { - RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/recho"); - dispatcher.forward(request,response); - } - else if ( req.getParameter("echo") != null ) - { - RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/echo"); - dispatcher.forward(request,response); - } - else - { - chain.doFilter(request,response); - return; - } - } - - public void destroy() - { - - } - } - -}