2017-06-06 50 views
0

使用以下代码,我可以在/以及我在/ rest处的REST API提供我的视图。目前,我没有使用web.xml。使用嵌入式Jetty在根上下文中提供index.html

我可以在/使用Jetty服务/index.html还是不定义web.xml? (这是我正在构建的框架的一部分 - 如果可能,我希望避免文件生成)。

protected RESTServer(int port, Class<?> api, String path) { 
     // Server 
     this.server = new org.eclipse.jetty.server.Server(port); 

     // REST 
     ServletContextHandler restHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     restHandler.setContextPath(path); 

     ServletHolder servlet = restHandler.addServlet(ServletContainer.class, "/rest/*"); 
     servlet.setInitOrder(0); 
     servlet.setInitParameter(JERSEY_PROVIDER, api.getCanonicalName()); 

     // Web 
     ResourceHandler webHandler = new ResourceHandler(); 
     webHandler.setDirectoriesListed(true); 
     webHandler.setResourceBase("src/main/webapp"); 
     webHandler.setWelcomeFiles(new String[]{"index.html"}); 

     // Server 
     HandlerCollection handlers = new HandlerCollection(); 
     handlers.addHandler(webHandler); 
     handlers.addHandler(restHandler); 
     server.setHandler(handlers); 
} 

回答

1

这是我想出的解决方案。它需要Jetty webapp依赖。

protected RESTServer(int port, Class<?> api, String path) { 
     this.server = new org.eclipse.jetty.server.Server(port); 
     WebAppContext webAppContext = new WebAppContext(); 
     webAppContext.setResourceBase("src/main/webapp"); 
     ServletHolder restServlet = webAppContext.addServlet(ServletContainer.class, "/rest/*"); 
     restServlet.setInitOrder(0); 
     restServlet.setInitParameter(JERSEY_PROVIDER, api.getCanonicalName()); 
     HandlerCollection handlers = new HandlerCollection(); 
     handlers.addHandler(webAppContext); 
     server.setHandler(handlers); 
}