如何在 Jetty 中的 /* 上映射 servlet 过滤器?

Posted

技术标签:

【中文标题】如何在 Jetty 中的 /* 上映射 servlet 过滤器?【英文标题】:How to map a servlet filter on /* in Jetty? 【发布时间】:2012-01-03 09:14:23 【问题描述】:

我有一个 servlet 过滤器,我想将它映射到 Jetty 中的 http://127.0.0.1:8888/。我已经使用 url 模式 /* 放置了一个 servlet 过滤器映射。但是,不调用过滤器。我还尝试了/ 映射。它也不起作用。这是如何引起的,我该如何解决?

【问题讨论】:

是tomcat服务器吗?您可以尝试将您的应用程序捆绑为 root.war 并进行部署。 【参考方案1】:

您可以将请求从“/”重定向到“/urlToRedirect”,并通过特殊的servlet处理“/urlToRedirect”。例如:

public static void main(String[] args) throws Exception 
    Servlet frontend = new Frontend();

    Server server = new Server(8080);
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.addServlet(new ServletHolder(frontend), "/index");
    context.addServlet(new ServletHolder(frontend), "/auth");

    ResourceHandler resource_handler = new ResourceHandler();
    resource_handler.setDirectoriesListed(false);
    resource_handler.setResourceBase("static");

    RewriteHandler rewriteHandler = new RewriteHandler();
    rewriteHandler.setRewriteRequestURI(true);
    rewriteHandler.setRewritePathInfo(true);
    rewriteHandler.setOriginalPathAttribute("requestedPath");
    RedirectRegexRule rule = new RedirectRegexRule();
    rule.setRegex("/");
    rule.setReplacement("/index");
    rewriteHandler.addRule(rule);

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[]rewriteHandler, resource_handler, context);
    server.setHandler(handlers);

    server.start();
    server.join();

【讨论】:

【参考方案2】:

您可以选择在$JETTY_HOME/webapps 下创建一个名为root 的目录,并将您的网络应用内容复制到$JETTY_HOME/webapps/root

【讨论】:

【参考方案3】:

jetty 中的每个应用程序都部署到它的上下文中 - 这意味着它在斜线之后有一些部分 - 即 http://127.0.0.1:8888/context/ - 您的 servlet 映射对最后一个斜线是真实的 - 而不是上下文之前的那个

正如其他答案中提到的,您必须将应用程序部署为 root.war 来克服这个问题。

【讨论】:

【参考方案4】:

如果您将战争命名为root.war,它将被部署到根/上下文。

http://wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications

【讨论】:

两件事,首先,我使用 jetty,因为它是 eclipse 的 GWT-GAE 插件中的默认服务器,所以我不知道该怎么做。其次,我认为 GAE 不使用码头,那么我该如何为 GAE 解决这个问题。 考虑提出另一个问题,以便其他人可以帮助您处理 GWT 和 GAE 特定项目。这个问题很笼统,并且在我们所知道的情况下得到了详细回答。【参考方案5】:

Jetty web-app deployment doc 提到可以将 wep-app 打包为 root.war 以具有根上下文 /

【讨论】:

以上是关于如何在 Jetty 中的 /* 上映射 servlet 过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Jetty/Tomcat 需要用 Java 构建网页吗?

带你梳理Jetty自定义ProxyServlet实现反向代理服务

Jetty 中的 ServletHandler 和 ServletContextHandler 有啥区别?

带你梳理Jetty自定义ProxyServlet实现反向代理服务

如何修改eclipse中的jetty容器参数

如何在 JDK8 上使用 SPDY 运行 Jetty?