我有一个运行嵌入式jetty服务器的项目。 另外,我在项目的依赖项中有angularjs-1.2.12.jar。
如何配置jetty,以公开META-INF /资源中的文件。 我试着做以下事情:
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
resource_handler.setBaseResource(Resource.newClassPathResource("/"));
Server server = new Server(8080);
server.setHandler(resource_handler);
但是只暴露来自目标/类的文件。
谢谢。
UPD:已解决
ResourceHandler resource_handler = new ResourceHandler() {
@Override
public Resource getResource(String path)
throws MalformedURLException {
Resource resource = Resource.newClassPathResource(path);
if (resource == null || !resource.exists()) {
resource = Resource.newClassPathResource("META-INF/resources" + path);
}
return resource;
}
};
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{"index.html"});
resource_handler.setResourceBase("/");
server.setHandler(resource_handler);
答案 0 :(得分:0)
我知道这是一个老问题,但我遇到了同样的问题,经过全面审视,你的解决方案是最好的。但正如James Ward在评论中指出的那样,它会带来安全问题。这是我的解决方案,建立在你的基础之上:
public class MyResourceHandler extends ResourceHandler {
@Override
public Resource getResource(String path) {
Resource resource = Resource.newClassPathResource("META-INF/resources" + path);
if(resource == null) resource = super.getResource(path);
return resource;
}
}
正如here指出的那样,ResourceHandler
有点过时了。实际上,我通过扩展DefaultServlet
来实现此解决方案。