configureDefaultServletHandling是什么意思?

时间:2015-04-01 16:42:01

标签: java spring spring-mvc

我试图理解Spring MVC是如何工作的,我在Spring配置中不理解这部分代码:

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

当我在WebContextApplication课程中时,一切正常,当它不存在时一切正常。那么这种方法的目的是什么?我的WebContextApplication班级应该有这种方法吗?为什么?

1 个答案:

答案 0 :(得分:11)

正如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(映射到&#34; /&#34;)来提供资源。如果你使用这个,你需要注意几件事。引自docs -

  

这允许将DispatcherServlet映射到&#34; /&#34; (从而覆盖容器的默认Servlet的映射),同时仍然允许容器的默认Servlet处理静态资源请求。它配置一个DefaultServletHttpRequestHandler,其URL映射为&#34; / **&#34;和相对于其他URL映射的最低优先级。

     

此处理程序将所有请求转发到默认Servlet。因此,重要的是它按照所有其他URL HandlerMappings的顺序保持最后。如果您使用或者如果您要设置自己的自定义HandlerMapping实例,请确保将其order属性设置为低于DefaultServletHttpRequestHandler的值,即Integer.MAX_VALUE。