我在嵌入式模式下使用Jetty-9,只需要一个web应用程序.因此,我希望根URL转到应用程序的主页,例如
http://localhost:4444/应该在servlet中结束。我首先要说的是:
ServletContextHandler scContext =
new ServletContextHandler(ServletContextHandler.SESSIONS);
scContext.setContextPath("/");下列任何一项都没有用,也没有用。
scContext.addServlet(ListsServlet.class, "/");nor
scContext.setWelcomeFiles(new String[]{"/lists})其中/lists映射到ListsServlet servlet。我只得到了一把403 (禁止的)。
我不使用DefaultServlet,它似乎处理欢迎文件。但是由于ServletContextHandler有setWelcomeFiles,所以我希望它包含使用它们的逻辑。
有什么想法吗?
发布于 2014-10-06 12:27:10
对于403 Forbidden错误,您有一些不允许访问处理程序/servlet的安全设置。
消除该安全性(目前而言),验证其余的安全是否有效,然后在稍后添加安全性以锁定细节。
如果您想在工作中看到下面的一些建议,请考虑查看来自另一个堆栈溢出: sources with jetty的答案中的代码示例。
如果在传入请求路径中没有任何内容,欢迎文件将被追加到该请求路径。例如,请求一个目录,然后将'index.html‘的欢迎文件追加到请求路径。
虽然这会奏效..。
scContext.setWelcomeFiles(new String[]{"lists"})
// Add Default Servlet (must be named "default")
ServletHolder holderDefault = new ServletHolder("default",DefaultServlet.class);
holderDefault.setInitParameter("resourceBase",baseDir.getAbsolutePath());
holderDefault.setInitParameter("dirAllowed","true");
holderDefault.setInitParameter("welcomeServlets","true");
holderDefault.setInitParameter("redirectWelcome","true");
scContext.addServlet(holderDefault,"/");这很可能不是你想要的,就像你说的,只有根路径。上面的内容还会对像/foo/到/foo/lists这样的请求进行更改。
相反,使用重写规则+处理程序代替迎宾文件方法可能更有意义。
RewriteHandler rewrite = new RewriteHandler();
rewrite.setHandler(scContext);
RewritePatternRule rootRule = new RewritePatternRule();
rootRule.setPattern("/");
rootRule.setReplacement("/list");
rootRule.setTerminating(true);
rewrite.addRule(rootRule);
server.setHandler(rewrite);此RewritePatternRule只需将任何请求路径/更改为/list,然后将该请求转发给包装好的ssContext (如果希望在浏览器上看到/list,则改为RedirectPatternRule。
https://stackoverflow.com/questions/26204288
复制相似问题