Serving static content with jetty 7, using defaultservlet configured from web.xml

15,552

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

Share:
15,552
Chilly
Author by

Chilly

Updated on July 18, 2022

Comments

  • Chilly
    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
    Ryan Shillington about 11 years
    For Jetty 7 and 8, use org.eclipse.jetty.servlet.DefaultServlet instead of org.mortbay.jetty.servlet.DefaultServlet