首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Spring应用程序上提供静态资源的Tomcat

在Spring应用程序上提供静态资源的Tomcat
EN

Stack Overflow用户
提问于 2010-09-18 23:29:49
回答 3查看 10.1K关注 0票数 5

我正在构建一个Spring应用程序,frontController servlet被映射为"/“来拦截所有请求,我将能够服务于静态内容(.js、.css、.png.)而不是春天。我的应用程序结构是

代码语言:javascript
运行
复制
-webapp/
   styles/
   images/
   WEB-INF/
          views/

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

代码语言:javascript
运行
复制
<mvc:resources mapping="/resources/**" location="/"/>

该页的代码是:

代码语言:javascript
运行
复制
<img src="resources/images/logo.png" />

我需要配置Tomcat来为静态资源服务,而不需要spring交互

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2010-09-18 23:52:15

您可以重新映射tomcats的默认servlet (它处理静态内容)。

代码语言:javascript
运行
复制
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>
票数 7
EN

Stack Overflow用户

发布于 2010-09-18 23:38:59

看一看这个邮件列表线程,看看它是否能满足您的需要。

票数 1
EN

Stack Overflow用户

发布于 2012-07-13 20:56:02

另一个潜在的解决方案--只需在SpringDispatcherServlet.xml (弹簧文档)中添加以下内容

代码语言:javascript
运行
复制
<mvc:default-servlet-handler/>

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

专业人士(与@nos的解决方案相比)

  • URL重映射解决方案的行为取决于容器的不同。Jetty/Tomcat 6的意思是“映射URL/映像/*到WEBAPP/images/”。Tomcat <6(可能还有其他人)认为这意味着'map URL/映像/ to WEBAPP/*',这是一个很大的安全漏洞。
  • 如果您想从您的站点提供favicon.ico、robots.txt等服务,那么您必须为它们创建额外的url映射。

缺点

  • Spring在循环中,这肯定是不必要的。

此外,不管您喜欢哪种解决方案,我建议在您的web.xml中添加以下内容,以防止目录列表(如URL/图像)

代码语言:javascript
运行
复制
<servlet>
  <servlet-name>default</servlet-name>
  <init-param>
      <param-name>dirAllowed</param-name>
      <param-value>false</param-value>
  </init-param>
</servlet>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3743932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档