Java configureDefaultServletHandling是什么意思?

Java configureDefaultServletHandling是什么意思?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我试图理解Spring MVC是如何工作的,但我不理解Spring配置中的这部分代码: @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } 在我的WebContextApplication类中,当它不存在时,一切正常。那么,这种方法的目的是什么?我的WebContextApplication类是

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

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

在我的
WebContextApplication
类中,当它不存在时,一切正常。那么,这种方法的目的是什么?我的
WebContextApplication
类是否应该使用此方法?为什么呢?

正如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:resources mapping="/assets/**" location="/resources/bootstrap/" />

在xml配置方面


要根据您提出的要求回答您的问题,您不需要重写
configureDefaultServletHandling()
,因为您已经重写并提供了静态资源映射

通过重写
addResourceHandler()
方法,您实际上要求
ResourceHttpRequestHandler
为资源位置提到的资源提供服务

但是,如果覆盖
configureDefaultServletHandling()
并启用它,则实际上是在请求默认servlet(映射到“/”)为资源提供服务。如果你使用这个,这里有几件事你需要注意。引用-

这允许将DispatcherServlet映射到“/”(从而覆盖容器的默认Servlet的映射),同时仍然允许容器的默认Servlet处理静态资源请求。它使用“/**”URL映射配置DefaultServletHttpRequestHandler,并且相对于其他URL映射具有最低优先级

此处理程序将所有请求转发到默认Servlet。因此,它在所有其他URL HandlerMappings的顺序中保持最后一个是很重要的。如果使用或设置自己的自定义HandlerMapping实例,则会出现这种情况。请确保将其order属性设置为低于DefaultServletHttpRequestHandler的值,即Integer.MAX_值


它告诉Spring对某些请求使用容器的默认servlet,比如静态资源。这是一种性能优化,您在javadoc中不了解什么:。你有静态资源吗。如何处理它们?是的,我有静态资源,使用此方法
@Override public void addResourceHandlers(ResourceHandlerRegistry注册表){registry.addResourceHandler(“/assets/**”).addResourceLocations(“/resources/bootstrap/”);}