2010-05-20 13 views
10

Questo è jetty 7 e xml configurato, non incorporato.Fornitura di contenuto statico con jetty 7, utilizzando defaultservlet configurato da web.xml

Sto tentando di pubblicare un file statico, crossdomain.xml, in un'app che si connette a un'origine dati eseguita dal molo. Per fare questo, ho configurato un servlet e la sua mappatura quindi:

<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> 

Purtroppo tutto quello che ottiene sono 404 di. Qualsiasi aiuto sarebbe molto apprezzato, btw il resto della mia web.xm lfile assomiglia:

<?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> 

risposta

16

Ho avuto lo stesso problema; ecco uno snippet che funziona (Jetty 6.1.22). Fondamentalmente ho sostituito org.eclipse con org.mortbay e rimosso il parametro resourceBase (ma vedi sotto). E questo in realtà finisce nel mio file web.xml dentro il mio file WAR:

<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> 

Quindi, è necessario mettere i file statici nella directory "statica" nel file WAR. Ti piace questa (tanto per mettere in chiaro):

ROOT.war 
    |_ WEB-INF/ 
    |_ static/ 

Se si vuole mettere i file statici altrove (ma ancora mapparli sotto l'/ static/URI), è possibile utilizzare il parametro resourceBase per specificare il directory, proprio come hai fatto tu.

documentazione del molo mi ha aiutato a capire questo un po 'meglio: http://docs.codehaus.org/display/JETTY/Servlets+Bundled+with+Jetty

+2

Per Molo 7 e 8, utilizzare org.eclipse.jetty.servlet.DefaultServlet invece di org.mortbay.jetty.servlet.DefaultServlet –

+0

stesso con Jetty 9 :) –

Problemi correlati