Mel*_*ssa 10 rewrite jetty embedded-jetty
我试图在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);
Run Code Online (Sandbox Code Playgroud)
Joa*_*elt 16
更换2条线......
_ctx.setHandler(rewriter);
_handlerCollection.setHandlers(new Handler[] {_ctx});
Run Code Online (Sandbox Code Playgroud)
同
rewriter.setHandler(_ctx);
_handlerCollection.setHandlers(new Handler[] {rewriter});
Run Code Online (Sandbox Code Playgroud)
这将使重写器规则在正常的上下文处理之前启动.
将上下文处理视为树.在您的示例代码中,您有....
server
+-- HandlerCollection
[0]-- WebAppContext
+-- Your servlets and filters in web.xml
+-- DefaultServlet
+-- RewriteHandler
Run Code Online (Sandbox Code Playgroud)
这意味着如果WebAppContext无法处理请求,则RewriteHandler执行以查看它是否可以处理请求.这将永远不会发生,如果没有其他任何匹配就WebAppContext可以使用DefaultServlet.
简单的更改建议将树更改为这样......
server
+-- HandlerCollection
[0]-- RewriteHandler
+-- WebAppContext
+-- Your servlets and filters in web.xml
+-- DefaultServlet
Run Code Online (Sandbox Code Playgroud)
这将允许在甚至被问到RewriteHandler之前做它的事情WebAppContext.
注意:您也可以让您的代码HandlerCollection更适合这种情况.
// _ctx.setHandler(rewriter);
// rewriter.setHandler(_ctx);
_handlerCollection.setHandlers(new Handler[] { rewriter, _ctx });
Run Code Online (Sandbox Code Playgroud)
这将导致以下树
server
+-- HandlerCollection
[0]-- RewriteHandler
[1]-- WebAppContext
+-- Your servlets and filters in web.xml
+-- DefaultServlet
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2010 次 |
| 最近记录: |