Ver*_*ger 18 java spring spring-mvc
我试图理解Spring MVC是如何工作的,我在Spring配置中不理解这部分代码:
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
Run Code Online (Sandbox Code Playgroud)
当这是我的WebContextApplication班级,一切正常,当它不存在时一切正常.那么这种方法的目的是什么?我的WebContextApplication班级应该有这种方法吗?为什么?
Ani*_*kur 11
由于JB Nizet已经尝试解释这两者都用于提供静态资源.
所以你的问题是你的基于Java的Spring配置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("/resources/bootstrap/");
}
Run Code Online (Sandbox Code Playgroud)
那么你为什么需要呢?
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
Run Code Online (Sandbox Code Playgroud)
或者
<mvc:default-servlet-handler/>如果你有
<mvc:resources mapping="/assets/**" location="/resources/bootstrap/" />
Run Code Online (Sandbox Code Playgroud)
在xml配置方面.
要根据您提出的要求回答您的问题,您不需要覆盖,configureDefaultServletHandling()因为您已经覆盖并提供了静态资源映射.
通过重写addResourceHandlers()方法,您基本上要求ResourceHttpRequestHandler提供资源提到的资源位置.
但是,如果覆盖configureDefaultServletHandling()并启用它,则实际上是要求默认servlet(映射到"/")来提供资源.如果你使用这个,你需要注意几件事.引自文档 -
这允许将DispatcherServlet映射到"/"(从而覆盖容器的默认Servlet的映射),同时仍允许容器的默认Servlet处理静态资源请求.它配置DefaultServletHttpRequestHandler,其URL映射为"/**",并且相对于其他URL映射具有最低优先级.
此处理程序将所有请求转发到默认Servlet.因此,重要的是它按照所有其他URL HandlerMappings的顺序保持最后.如果您使用或者如果您要设置自己的自定义HandlerMapping实例,请确保将其order属性设置为低于DefaultServletHttpRequestHandler的值,即Integer.MAX_VALUE.
| 归档时间: |
|
| 查看次数: |
5810 次 |
| 最近记录: |