【问题标题】:Tomcat serving static resources on Spring MVC appTomcat 在 Spring MVC 应用程序上提供静态资源
【发布时间】:2010-09-18 23:29:49
【问题描述】:

我正在构建一个 Spring MVC 应用程序,frontController servlet 映射在“/”中,拦截所有请求,我希望能够提供静态内容(.js、.css、.png...)来自tomcat而不是Spring。 我的应用结构是

-webapp/
   styles/
   images/
   WEB-INF/
          views/

默认情况下,因为 frontController 映射到我的应用程序的上下文根,它处理所有请求但不提供任何静态资源。 静态资源的mvc配置如下。

<mvc:resources mapping="/resources/**" location="/"/>

页面的代码是:

<img src="resources/images/logo.png" />

我需要配置 Tomcat 以提供静态资源没有弹簧交互

有什么建议吗?

【问题讨论】:

    标签: spring tomcat static-resource


    【解决方案1】:

    您可以重新映射 tomcats 默认 servlet(处理静态内容),例如

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/images/*</url-pattern>
    </servlet-mapping>
    

    【讨论】:

      【解决方案2】:

      看看this mailing list thread,看看它是否符合您的要求。

      【讨论】:

      • 坦克,我找到了解决方案,只将静态资源扩展映射到 defaultServlet。
      【解决方案3】:

      另一个潜在的解决方案 - 只需将以下内容添加到您的 Spring DispatcherServlet.xml (Spring Docs)

      <mvc:default-servlet-handler/>
      

      此标记允许将 DispatcherServlet 映射到“/”(从而覆盖容器默认 Servlet 的映射),同时仍允许由容器的默认 Servlet 处理静态资源请求。它使用“/**”的 URL 映射(给定最低优先级顺序)配置 DefaultServletHttpRequestHandler。此处理程序会将所有请求转发到默认 Servlet。

      优点(与@nos 的解决方案相比)

      • URL 重新映射解决方案的行为因您的容器而异。 Jetty/Tomcat 6 将其表示为“将 URL/images/* 映射到 WEBAPP/images/”。 Tomcat 映射到 WEBAPP/*”,这是一个重大的安全漏洞。
      • 如果您想从您的网站提供 favicon.ico、robots.txt 等,那么您将拥有 为他们创建额外的 url 映射。

      缺点

      • 弹簧在循环中,这绝对是不必要的。

      此外,无论您喜欢哪种解决方案,我都建议将以下内容添加到您的 web.xml 以防止目录列表(例如 URL/图像)

      <servlet>
        <servlet-name>default</servlet-name>
        <init-param>
            <param-name>dirAllowed</param-name>
            <param-value>false</param-value>
        </init-param>
      </servlet>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多