【问题标题】:Serving static content with jetty 7, using defaultservlet configured from web.xml使用从 web.xml 配置的 defaultservlet 使用 jetty 7 提供静态内容
【发布时间】:2011-02-21 23:43:14
【问题描述】:

这是 jetty 7 和 xml 配置,未嵌入。

我正在尝试将静态文件 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.xm lfile 的其余部分看起来像:

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

【问题讨论】:

    标签: jetty


    【解决方案1】:

    我有同样的问题;这是一个有效的 sn-p (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 文件。像这样(只是为了说清楚):

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

    如果您想将静态文件放在其他地方(但仍将它们映射到 /static/ URI),您可以使用 resourceBase 参数来指定 目录,就像你做的那样。

    Jetty 的文档帮助我更好地理解了这一点: http://docs.codehaus.org/display/JETTY/Servlets+Bundled+with+Jetty

    【讨论】:

    • 对于 Jetty 7 和 8,使用 org.eclipse.jetty.servlet.DefaultServlet 而不是 org.mortbay.jetty.servlet.DefaultServlet
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多