2015-04-01 742 views
11

我想了解Spring MVC中如何做的工作,我也没有在我Spring的配置文件理解这部分代码:如果这是我的WebContextApplicationconfigureDefaultServletHandling的含义是什么?

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

,一切工作正常时,它的不目前一切工作正常。那么这种方法的目的是什么?我的WebContextApplication类应该有这种方法吗?为什么?

+1

它告诉Spring使用容器的默认servlet来处理某些请求,比如静态资源。 https://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html#what。这是一个性能优化 – 2015-04-01 17:13:13

+1

你在javadoc中不了解什么:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.html 。你有静态资源吗?他们如何处理? – 2015-04-01 17:29:34

+1

是的,我有静态资源,这种方法'@Override \t public void addResourceHandlers(ResourceHandlerRegistry registry){ \t \t registry.addResourceHandler(“/ assets/**”)。addResourceLocations( “/资源/引导/”); \t}' – Vercryger 2015-04-01 17:35:55

回答

6

由于JB Nizet已经试图解释两者都用于服务静态资源。

所以你的问题是,你的基于Java的Spring配置有

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) {  
    registry.addResourceHandler("/assets/**").addResourceLocations("/resources/bootstrap/"); 
} 

那你为什么需要

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

为什么 <mvc:default-servlet-handler/>如果你有

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

而言的XML配置。


要基于你已经把你不需要重写configureDefaultServletHandling()因为你已经覆盖并提供你的静态资源映射,要求回答你的问题。

通过覆盖addResourceHandlers()方法,你实质上是要求ResourceHttpRequestHandler服务于资源位置的资源。

但是,如果覆盖configureDefaultServletHandling()并启用它,则实质上是要求默认servlet(映射到“/”)来为资源提供服务。如果您正在使用此功能,您需要在这里处理几件事。从docs报价 -

这使得映射的DispatcherServlet为“/”(因此重写容器的默认的Servlet的映射),同时还允许静态资源请求通过容器的默认的Servlet处理。它使用“/ **”的URL映射和相对于其他URL映射的最低优先级来配置DefaultServletHttpRequestHandler。

该处理程序将把所有请求转发给默认的Servlet。因此,重要的是它保持最后的所有其他URL HandlerMappings的顺序。如果您使用或者如果您正在设置自己的自定义HandlerMapping实例,则情况会是这样,请务必将其顺序属性设置为低于DefaultServletHttpRequestHandler(即Integer.MAX_VALUE)的值。

+1

非常感谢! – Vercryger 2016-03-05 22:12:43