Directory 向jetty添加多个资源目录

Directory 向jetty添加多个资源目录,directory,jetty,embedded-jetty,Directory,Jetty,Embedded Jetty,希望在Jetty中使用多个静态目录。服务器运行时: http://localhost:8282/A http://localhost:8282/B http://localhost:8282/C A放置在X/V/A中 B放置在Q/Z/B中 C放置在P/T/C中 以下操作失败: ResourceHandler resource\u handler=new ResourceHandler(); resource_handler.setWelcomeFiles(新字符串[]{“in

希望在Jetty中使用多个静态目录。服务器运行时:

  http://localhost:8282/A
  http://localhost:8282/B 
  http://localhost:8282/C
  • A放置在X/V/A中
  • B放置在Q/Z/B中
  • C放置在P/T/C中
以下操作失败:

ResourceHandler resource\u handler=new ResourceHandler();
resource_handler.setWelcomeFiles(新字符串[]{“index.html”});
resource_handler.setResourceBase(HTML_站点);
ResourceHandler resource_handler1=新的ResourceHandler();
resource_handler1.setWelcomeFiles(新字符串[]{“index.html”});
resource_handler1.setResourceBase(HTML_CLIENTZONE_站点);
//部署引擎
WebAppContext webapp=新的WebAppContext();
String dir=System.getProperty(“user.dir”);
setResourceBase(getWebAppPath());
webapp.setContextPath(“/”);
HandlerList handlers=new HandlerList();
setHandlers(新处理程序[]{resource\u Handler,resource\u handler1,webapp,new DefaultHandler()});
setHandler(处理程序);

如何添加多个静态资源目录?

自6.1.12以来,这是通过在WebAppContext的基本资源中使用ResourceCollection来支持的:

Server服务器=新服务器(8282);
WebAppContext=新的WebAppContext();
context.setContextPath(“/”);
ResourceCollection resources=new ResourceCollection(新字符串[]){
“项目/webapp/文件夹”,
“/root/static/folder/A”,
“/root/static/folder/B”,
});
背景。挫折资源(资源);
setHandler(上下文);
server.start();
要随后打开文件,请使用ServletContext(例如WebAppContext),它可能是接口定义的一部分,例如:

/**
*使用servlet上下文打开文件。
*/
公共默认InputStream打开(ServletContext上下文,字符串文件名){
字符串f=System.getProperty(“file.separator”)+文件名;
返回context.getResourceAsStream(f);
}
例如:

InputStream in=open(上下文,“filename.txt”);
如果某个给定目录中存在
filename.txt
,则会打开该文件。请注意,getResourceAsStream将返回
null
,而不是抛出异常,因此最好检查它:

公共默认InputStream验证(InputStream in,字符串文件名)
抛出FileNotFoundException{
if(in==null){
抛出新的FileNotFoundException(文件名);
}
返回;
}
然后,您可以更新
open
方法,如下所示:

返回验证(context.getResourceAsStream(文件名),文件名);
如果要将独立资源目录“装载”到服务器命名空间中的任意URI,最好使用带有独立
resourceBase
配置的
DefaultServlet
的多个实例

以下代码段将从文件系统路径
X/V/A
和文件系统路径
Q/Z/B
提供URI
/A/*

Server=newserver();
SelectChannelConnector=new SelectChannelConnector();
connector.setPort(Integer.parseInt(port));
addConnector(连接器);
ServletContextHandler servletHandler=新的ServletContextHandler(null,“/”,true,false);
//从X/V/A向/A/*提供服务的配置
DefaultServlet aServlet=新的DefaultServlet();
ServletHolder A文件夹=新的ServletHolder(aServlet);
aHolder.setInitParameter(“resourceBase”、“X/V/A”);
setInitParameter(“pathInfoOnly”、“true”);
addServlet(aHolder,“/A/*”);
//从Q/Z/B服务/B/*的配置
DefaultServlet bServlet=新的DefaultServlet();
ServletHolder bHolder=新的ServletHolder(bServlet);
bHolder.setInitParameter(“资源库”、“Q/Z/B”);
setInitParameter(“pathInfoOnly”、“true”);
addServlet(bHolder,“/B/*”);
HandlerList handlers=new HandlerList();
setHandlers(新处理程序[]{servletHandler});
setHandler(处理程序);
server.start();
注意:正如您从上面的代码中所看到的,没有必要像您的示例中那样,提供
/A/*
服务的目录的名称正好是
A
。这两个名称—要提供服务的目录的文件系统名称和要将内容映射到的URI—都是完全独立的