首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以将SpringMVC配置为处理所有请求,但排除静态内容目录?

是否可以将SpringMVC配置为处理所有请求,但排除静态内容目录?
EN

Stack Overflow用户
提问于 2009-08-05 16:24:06
回答 13查看 55.8K关注 0票数 59

如果我将spring应用程序映射为处理所有传入请求('/*'),则对静态内容的请求将返回404。例如,对"myhost.com/css/global.css“的请求将返回404,即使Spring截获该请求时资源已经存在。

另一种方法是将主目录映射到一个子目录(例如‘/ SpringMVC /’),但在这种情况下,必须在应用程序内的所有链接中传递该目录。有没有办法将SpringMVC映射到'/‘并从处理中排除一组目录?

我当前的web.xml配置是:

代码语言:javascript
复制
<servlet>
    <servlet-name>springApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springApp</servlet-name>
    <url-pattern>/home/*</url-pattern>
</servlet-mapping>

理想情况下,我希望映射如下所示:

代码语言:javascript
复制
 <servlet-mapping>
    <servlet-name>springApp</servlet-name>
    <url-pattern>/*</url-pattern>
    <exclude>/css/*,/js/*</exclude>
 </servlet-mapping>

这种事情有可能发生吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-08-05 19:40:17

如果你只想用Spring来做这件事,这是可能的,但有点麻烦:

  1. 您要么需要使用一个可以显式指定应映射到控制器的URL模式的SimpleUrlHandlerMapping,要么扩展它以支持“忽略”URL,就像"css/**".
  2. You'll需要编写您自己的基本上由"getServletContext().getRequestDsipatcher().include()“调用组成的HttpRequestHandler实现,以按原样返回请求的资源。
  3. 您必须为上面的URL将该处理程序注册为defaultHandler

一旦所有这些都完成了,所有无法映射到您的控制器的请求都将被转发到您的HttpRequestHandler,并“按原样”提供服务。

票数 8
EN

Stack Overflow用户

发布于 2010-12-30 01:26:48

Spring注意:此答案仅适用于 3.0.4+

(顺便说一句,这个问题也在这里处理过:Spring serving static content with mvc:resources, invalid xsd)

查看Spring subversion samples repository中的Spring mvc-showcase项目。它准确地显示了您想要做什么,也就是说,您可以描述不会被DisapatcherServlet处理的静态资源。请参见文件/mvc-showcase/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml。下面是我如何处理这些排除的一小段代码,其中JS、CSS和图像位于应用程序上下文根目录中( MVC名称空间映射到mvc

代码语言:javascript
复制
<!-- resources exclusions from servlet mapping -->
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
票数 56
EN

Stack Overflow用户

发布于 2009-08-09 21:11:27

我通过“默认”servlet提供静态内容来解决这个问题,这个servlet只向客户端提供内容。所以我的web.xml看起来像这样:

代码语言:javascript
复制
<servlet>
    <servlet-name>MyApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyApp</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping> <!-- The 'dynamic' content -->

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping> <!-- The 'static' content -->

希望这能有所帮助。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1234298

复制
相关文章

相似问题

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