我希望从嵌入式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);
但我得到了404访问http://localhost:9000/clientaccesspolicy.xml
如何在Jetty中以编程方式将类路径资源公开给给定的URL?
谢谢,Andy
实际上,您可以将类路径注册为类路径资源(令人惊讶)。
ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("/"));
server.setHandler(resHandler);
然后,您可以访问类路径中的任何文件。因此,如果您有一个file.xml,它将从localhost:9000/file.xml提供。
您的代码不起作用,因为ContextHandler
实际上并没有为内容提供服务器。一个小的调整将使其类似,但要做你真正想要的事情,你需要编写自己的处理程序。
"类工作"版本:
ContextHandler capHandler = new ContextHandler();
capHandler.setContextPath("/clientaccesspolicy.xml");
ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml"));
capHandler.setHandler(resHandler);
但是,该版本将/clientaccesspolicy.xml
视为一个目录,因此它重定向到/clientaccesspolicy.xml/
,然后显示XML文件的内容。
您想要的是ResourceHandler
的一个版本,该版本具有url=>资源的查找。Jetty没有提供这样的处理程序,但您应该能够创建ResourceHandler
的子类,然后覆盖getResource
。在这种情况下,您不需要或不想要ContextHandler,只需检查对"/clientaccesspolicy.xml"的调用,并将其映射到正确的ClassPath Resource即可。