如何使用嵌入式jetty在给定地址处提供特定的类路径资源?

And*_*ndy 13 java jetty embedded-jetty

我正在寻找从嵌入式jetty服务器公开clientacesspolicy.xml文件.

我目前的尝试看起来像这样:

ContextHandler capHandler = new ContextHandler();
capHandler.setContextPath("/clientaccesspolicy.xml");
capHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml"));
HandlerList handlers = new HandlerList();
handlers.addHandler(capHandler);
...
httpServer.setHandler(handlers);
Run Code Online (Sandbox Code Playgroud)

但我得到404访问http:// localhost:9000/clientaccesspolicy.xml

如何在Jetty中以编程方式将类路径资源公开给给定的URL?

谢谢,安迪

小智 19

实际上,您可以将类路径注册为类路径资源(令人惊讶).

ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("/"));
server.setHandler(resHandler);
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问类路径中的任何文件.因此,如果您有一个file.xml,它将从localhost:9000/file.xml提供.


Tim*_*Tim 9

您的代码不起作用,因为ContextHandler实际上并没有为内容提供服务.一个小的调整将使它有点工作,但要做你真正想要的,你需要编写自己的处理程序.

" 有点作品"版本:

ContextHandler capHandler = new ContextHandler();
capHandler.setContextPath("/clientaccesspolicy.xml");
ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml"));
capHandler.setHandler(resHandler);
Run Code Online (Sandbox Code Playgroud)

但是,该版本视为/clientaccesspolicy.xml一个目录,因此它重定向到/clientaccesspolicy.xml/然后显示XML文件的内容.

它看起来像你想要的是ResourceHandler一个查找url => resource的版本.Jetty没有附带执行此操作的处理程序,但您应该能够创建一个子类,ResourceHandler然后重写getResource.在这种情况下,您将不需要[或想要] ContextHandler,只需检查对"/clientaccesspolicy.xml"的调用并将其映射到正确的ClassPath资源.