使用web.xml配置DefaultServlet,在Jetty 7中提供静态内容服务。

10

这是使用Jetty 7和XML进行配置,而不是嵌入式。

我正在尝试为连接到我从Jetty运行的数据源的应用程序提供静态文件crossdomain.xml。为此,我配置了一个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.xml文件的其余部分如下:

<?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>
1个回答

16

我也遇到了同样的问题。下面是一段有效的代码片段 (针对Jetty 6.1.22)。 我基本上用org.mortbay替换了org.eclipse,并删除了resourceBase参数(但请参见下文)。这实际上会出现在我的WAR文件内的web.xml文件中:

  <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文件中的"static"目录中。就像这样(只是为了清晰明了):

  ROOT.war
  |_ WEB-INF/
  |_ static/
如果你想把静态文件放在其他地方(但仍然映射到 /static/ URI 下),你可以使用 resourceBase 参数来指定目录,就像你之前所做的那样。
Jetty 的文档帮助我更好地理解了这一点: http://docs.codehaus.org/display/JETTY/Servlets+Bundled+with+Jetty

2
对于 Jetty 7 和 8,请使用 org.eclipse.jetty.servlet.DefaultServlet 而不是 org.mortbay.jetty.servlet.DefaultServlet。 - Ryan Shillington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接