gpt4 book ai didi

rewrite - 嵌入式Jetty重写无法正常工作

转载 作者:行者123 更新时间:2023-12-04 03:16:13 27 4
gpt4 key购买 nike

我正在按照Jetty文档示例在嵌入式Jetty服务器中实现一个简单的重写规则。

我想将对/admin/的请求重写为/admin.html。
目前,如果我请求/admin/,则会收到404错误,找不到/admin.html
但是,如果我直接请求/admin.html,它将起作用!

在stackoverflow上还有2个其他类似的帖子,但没有答案的答案!

这是代码:

WebAppContext _ctx = new WebAppContext();
_ctx.setContextPath("/");
_ctx.setDefaultsDescriptor(JETTY_DEFAULTS_DESCRIPTOR);
_ctx.setParentLoaderPriority(true);
_ctx.setWar(getShadedWarUrl());
_ctx.setResourceBase(getShadedWarUrl());

RewriteHandler rewriter = new RewriteHandler();
rewriter.setRewritePathInfo(true);
rewriter.setRewriteRequestURI(true);
rewriter.setOriginalPathAttribute("requestedPath");

RewritePatternRule admin = new RewritePatternRule();
admin.setPattern("/admin/");
admin.setReplacement("/admin.html");
admin.setTerminating(true); // this will stop Jetty from chaining the rewrites
rewriter.addRule(admin);

_ctx.setHandler(rewriter);

HandlerCollection _handlerCollection = new HandlerCollection();
_handlerCollection.setHandlers(new Handler[] {_ctx});
server.setHandlers(_result);

最佳答案

更换2条线...

_ctx.setHandler(rewriter);
_handlerCollection.setHandlers(new Handler[] {_ctx});



rewriter.setHandler(_ctx);
_handlerCollection.setHandlers(new Handler[] {rewriter});

这将使重写器规则在正常的上下文处理之前生效。

将上下文处理视为一棵树。在您的示例代码中,您有...。
server
+-- HandlerCollection
[0]-- WebAppContext
+-- Your servlets and filters in web.xml
+-- DefaultServlet
+-- RewriteHandler

这意味着,如果 WebAppContext无法处理请求,则执行 RewriteHandler以查看其是否可以处理请求。这将永远不会发生,因为如果没有其他匹配项,则 WebAppContext设置为使用 DefaultServlet

简单的更改建议将树更改为如下所示...
server
+-- HandlerCollection
[0]-- RewriteHandler
+-- WebAppContext
+-- Your servlets and filters in web.xml
+-- DefaultServlet

这将允许 RewriteHandler在甚至要求 WebAppContext之前执行其操作。

注意:在这种情况下,您也可以让代码更正确地利用 HandlerCollection

// _ctx.setHandler(rewriter);
// rewriter.setHandler(_ctx);
_handlerCollection.setHandlers(new Handler[] { rewriter, _ctx });

这将导致以下树
server
+-- HandlerCollection
[0]-- RewriteHandler
[1]-- WebAppContext
+-- Your servlets and filters in web.xml
+-- DefaultServlet

关于rewrite - 嵌入式Jetty重写无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com