I\'m using embedded Jetty to create a static web site. Does ServletContextHandler.setResourceBase("...") have a same effect as ResourceHandler.setResourceBase(&quo
With that setup, the resourceHandler
will never be called, as the DefaultServlet
processing (or Default404Servlet
) at the end of the ServletContextHandler
chain will always respond, not allowing resourceHandler
to even execute.
If you have a ServletContextHandler
, do not use ResourceHandler
use the DefaultServlet
in that ServletContextHandler
to setup and serve your static files.
ResourceHandler
is very simplistic, if you want more control / features, use a DefaultServlet
configured in your ServletContextHandler
instead.
Ok, with that out of the way ...
The ServletContextHandler.setBaseResource(Resource) is the place for the ServletContext
itself to configure its context-wide resourceBase
.
(Note: the parameter of setResourceBase() is a URL string that can point to a file://
directory or even a jar:file://
location. Pretty much anything supported by Resource.newResource(String))
${resourceBase}/
is the lookup point for various methods in javax.servlet.ServletContext such as:
String getRealPath(String path)
URL getResource(String path)
InputStream getResourceAsStream(String path)
Set<String> getResources(String path)
DefaultServlet
, which might serve static resources (such as *.html
, *.css
, *.js
) from the specified ${resourceBase}/${request.pathInfo}
ResourceHandler
does not participate in ServletContextHandler
is an is inappropriate to mix with ServletContextHandler
.
Also, don't forget to set ServletContextHandler.setContextPath(String)
to your desired context path (usually "/"
)
And yes, you can even have multiple DefaultServlet configurations in a single ServletContextHandler.