I'm embedding Jetty (version 7.4.5.v20110725) into a java application. I'm serving JSP pages in ./webapps/jsp/ using Jetty's WebAppContext, but if I visit localhost:8080/jsp/ I get Jetty's directory listing for the entire contents of ./webapps/jsp/. I've tried setting the dirAllowed parameter to false on the WebAppContext and it does not change the directory listing behavior.
Disabling the directory listing on a ResourceHandler is simply done be passing false to setDirectoriesListed, works as expected. Can someone tell me how to do this for the WebAppContext?
import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.webapp.WebAppContext; public class Test { public static void main(String[] args) throws Exception { Server server = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setHost("127.0.0.1"); connector.setPort(8080); server.addConnector(connector); // Create a resource handler for static content. ResourceHandler staticResourceHandler = new ResourceHandler(); staticResourceHandler.setResourceBase("./webapps/static/"); staticResourceHandler.setDirectoriesListed(false); // Create context handler for static resource handler. ContextHandler staticContextHandler = new ContextHandler(); staticContextHandler.setContextPath("/static"); staticContextHandler.setHandler(staticResourceHandler); // Create WebAppContext for JSP files. WebAppContext webAppContext = new WebAppContext(); webAppContext.setContextPath("/jsp"); webAppContext.setResourceBase("./webapps/jsp/"); // ??? THIS DOES NOT STOP DIR LISTING OF ./webapps/jsp/ ??? webAppContext.setInitParameter("dirAllowed", "false"); // Create a handler list to store our static and servlet context handlers. HandlerList handlers = new HandlerList(); handlers.setHandlers(new Handler[] { staticContextHandler, webAppContext }); // Add the handlers to the server and start jetty. server.setHandler(handlers); server.start(); server.join(); } } |
You can set "org.eclipse.jetty.servlet.Default.dirAllowed" instead of "dirAllowed":
webAppContext.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
Tested for Jetty 7.4.5.v20110725.
I found the following page on the net which describes the same problem:
I quote what is mentioned in one of the entries in that post as reason for the problem:
the problem is that for some reason Jetty does not merge the webdefault.xml with user web.xml properly when embedded mode is used
and following is the code that was used to overcome the problem:
HashMap hmap = new HashMap |
Unfortunately it didn't help:ServletHolder[] svh = webAppContext.getServletHandler().getServlets();returns a zero length array. –
| If anyone happens across this looking for the equivalent in Jetty 6: |
|