Embedded Jetty looking for files inside its Jar fi

2019-01-22 12:57发布

问题:

I successfully embedded Jetty on a test application. It can serve files without issues. Now I want to know if it's possible for Jetty to serve files that are inside its own Jar file.

Does anyone know if that's possible?

回答1:

An example is listed on the Jetty embedding page at http://docs.codehaus.org/display/JETTY/Embedding+Jetty

The trick is to create a File URL to your classpath location.

String webDir = this.class.getClassLoader().getResource("com/company/project/mywebdir").toExternalForm();

ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.setResourceBase(webDir);


回答2:

It's pretty simple, if you throw Spring into the equation. And here it goes:

 ...

 WebAppContext webAppContext = new WebAppContext();
 webAppContext.setServer(server);
 webAppContext.setContextPath("/");
 webAppContext.setResourceBase(new ClassPathResource("webapp").getURI().toString());

 server.addHandler(webAppContext); 

 ....

That will make jetty find the necessary web resources inside the jar file.



回答3:

Maybe more of a hack, but aren't JAR files actually ZIPs? (not sure) Could you unzip them into a temporary folder and serve them from there?



回答4:

Found the answer and it's not Jetty, it's Winstone. http://winstone.sf.net