2010-05-20 104 views
10

這是jetty 7和xml配置的,未嵌入的。使用jetty 7使用defaultservlet爲web.xml提供靜態內容

我試圖將一個靜態文件crossdomain.xml提供給一個連接到我從jetty運行的數據源的應用程序。爲此,我配置了一個servlet及其映射:

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

可悲的是,我所得到的都是404的。任何幫助將不勝感激,順便說一句我的web.xm文件的其餘部分看起來像:

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

回答

16

我有同樣的問題;這是一個可以工作的代碼片段(Jetty 6.1.22)。 我基本上用org.mortbay替換了org.eclipse,並刪除了 resourceBase參數(但參見下文)。這其實在我的web.xml文件我的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> 

然後,你必須把你靜態文件中的「靜態」目錄中的 WAR文件。像這樣(只是要清楚):

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

如果你想要把你靜態文件的其他地方(但仍 下映射他們/靜態/ URI),您可以使用resourceBase參數指定 目錄,就像你一樣。

碼頭的文檔,幫助我理解這一點更好一點: http://docs.codehaus.org/display/JETTY/Servlets+Bundled+with+Jetty

+2

對於碼頭7和8,使用org.eclipse.jetty.servlet.DefaultServlet代替org.mortbay.jetty.servlet.DefaultServlet – 2013-05-22 17:23:46

+0

相同與碼頭9 :) – 2013-05-22 17:26:23