Directory 向jetty添加多个资源目录
希望在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
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—都是完全独立的