Serving static content with jetty 7, using defaultservlet configured from web.xml
I had the same issue; here is a snippet that works (Jetty 6.1.22). I basically replaced org.eclipse with org.mortbay and removed the resourceBase parameter (but see below). And this actually ends up in my web.xml file inside my WAR file:
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>foo.bar.MyServlet</servlet-class>
<display-name></display-name>
<description>The smallest Servlet ever!</description>
</servlet>
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
Then, you have to put your static files in the "static" directory in your WAR file. Like this (just to make it clear):
ROOT.war
|_ WEB-INF/
|_ static/
If you want to put your static files elsewhere (but still map them under the /static/ URI), you can use the resourceBase parameter to specify the directory, just like you did.
Jetty's documentation helped me to understand this a little bit better: http://docs.codehaus.org/display/JETTY/Servlets+Bundled+with+Jetty
Chilly
Updated on July 18, 2022Comments
-
Chilly almost 2 years
This is jetty 7 and xml configured, not embedded.
I'm trying to serve a static file, crossdomain.xml, to an app that connects to a datasource I run from jetty. To do this, I configured a servlet and its mapping thus:
<servlet> <servlet-name>default </servlet-name> <servlet-class>org.eclipse.jetty.servlet.DefaultServlet </servlet-class> <init-param> <param-name>resourceBase </param-name> <param-value>/foo/foo </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>default </servlet-name> <url-pattern>/* </url-pattern> </servlet-mapping>
Sadly all I get are 404's. Any help would be much appreciated, btw the rest of my web.xm lfile looks like:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"> <servlet> <servlet-name>cometd </servlet-name> <servlet-class>org.cometd.server.continuation.ContinuationCometdServlet </servlet-class> <load-on-startup>1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name>cometd </servlet-name> <url-pattern>/cometd/* </url-pattern> </servlet-mapping> <servlet> <servlet-name>default </servlet-name> <servlet-class>org.eclipse.jetty.servlet.DefaultServlet </servlet-class> <init-param> <param-name>resourceBase </param-name> <param-value>/foo/foo </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>default </servlet-name> <url-pattern>/* </url-pattern> </servlet-mapping> <servlet> <servlet-name>initializer </servlet-name> <servlet-class>com.foo.research.Initializer </servlet-class> <load-on-startup>2 </load-on-startup> </servlet> <filter> <filter-name>cross-origin </filter-name> <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter </filter-class> </filter> <filter-mapping> <filter-name>cross-origin </filter-name> <url-pattern>/cometd/* </url-pattern> </filter-mapping> </web-app>
-
Ryan Shillington about 11 yearsFor Jetty 7 and 8, use org.eclipse.jetty.servlet.DefaultServlet instead of org.mortbay.jetty.servlet.DefaultServlet