首先,如果这是不正确的,抱歉。我做了很多 Spring 工作,但通常只是 XML 配置。
让我们从这里开始:
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/","/css/","/js/");
这就是说“当我请求带有路径的东西时http://localhost/resources/**
在看/resources/
, /css/
or /js/
.
Well, /css/
and /js/
不存在。仅有的/resources/
does.
在这种情况下,您应该映射此
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
并通过这种方式访问:
<script src="/resources/js/myapp.js"></script>
或者,你也可以这样做:
registry.addResourceHandler("/js/**")
.addResourceLocations("/resources/js/");
registry.addResourceHandler("/css/**")
.addResourceLocations("/resources/css/");
并以这种方式访问静态内容:
<script src="/js/myapp.js"></script>
至于为什么更改上下文根有效,是因为:
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
这尝试通过具有上下文根的默认 servlet 路由静态内容请求/
。由于您正在创建 DispatcherServlet/
,默认的 servlet 永远不会被命中,因为它默认设置为最低优先级。
如果您正在使用registry.addResourceHandler
您不需要配置默认 servlet,反之亦然。正如您所发现的,您永远不会点击它,因为默认情况下它是最低优先级的。
如果您仍然遇到问题,即使在修复 ResourceHandler 之后,您也可以尝试完全省略资源处理程序配置,或者将默认 servlet 设置为更高的优先级(我不建议这样做)。