springboot2.X无法访问static下的静态资源

问题场景:使用springboot2.1.3集成thymeleaf之后static下的静态资源无法访问

springboot2.X无法访问static下的静态资源_第1张图片

在网上百度之后采取了以下几种方式:

1.在application.properties文件中添加如下配置,意思就是把static下的文件访问都映射到locations指定的文件目录下

#以什么样的路径访问静态资源
spring.mvc.static-path-pattern=/static/**
#在何处查找静态资源
spring.resources.static-locations=classpath:/templates/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

2.用代码重写springMVC的资源处理器。因为WebMvcConfigurerAdapter已经过时了,百度很多人说可以用WebMvcConfigurationSupport来代替,就写了以下代码来测试

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport{
	Logger logger = LoggerFactory.getLogger(this.getClass());
	@Autowired
	UserArgumentResolver userArgumentResolver;
	@Override
	public void addArgumentResolvers(List argumentResolvers) {
		argumentResolvers.add(userArgumentResolver);
	}
	/**
	 * 资源处理器
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		 logger.info("addResourceHandlers");
		//将所有/static/**访问都映射到classpath:/static/目录下
		registry.addResourceHandler("/static/**")
				.addResourceLocations("classpath:/static/");
		super.addResourceHandlers(registry);
	}
}

发现还是访问不到静态资源,查资料发现

WebMvc的自动配置都在WebMvcAutoConfiguration类中


@Configuration
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
    public static final String DEFAULT_PREFIX = "";
    public static final String DEFAULT_SUFFIX = "";
    private static final String[] SERVLET_LOCATIONS = new String[]{"/"};
 
    public WebMvcAutoConfiguration() {
    }
@Configuration
@ConditionalOnWebApplication(
    type = Type.SERVLET
)

但是类中有@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})这个注解,这个注解的意思是一旦在容器中检测到WebMvcConfigurationSupport这个类,WebMvcAutoConfiguration类中的配置就都不生效,只有在我们的的容器中没有这个组件的时候,自动配置类才会生效。所以一旦我们自己写的配置类继承了WebMvcConfigurationSupport,就相当于我们的容器中已经导入了WebMvcConfigurationSupport这个组件,所以默认配置都不会生效,都得自己在配置文件中配置。

通过以上两种方式都没有得到解决,查了一上午资料(好吧,我很菜)找到了解决方案:实现WebMvcConfigurer接口

springboot2.X无法访问static下的静态资源_第2张图片

public class WebMvcConfig implements WebMvcConfigurer{
	Logger logger = LoggerFactory.getLogger(this.getClass());
	@Autowired
	UserArgumentResolver userArgumentResolver;
	public void addArgumentResolvers(List resolvers) {
		resolvers.add(userArgumentResolver);
	}
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		logger.info("addResourceHandlers");
		//将所有/static/**访问都映射到classpath:/static/目录下
		registry.addResourceHandler("/static/**")
				.addResourceLocations("classpath:/static/");
	}
}

ok,终于能够访问了!

springboot2.X无法访问static下的静态资源_第3张图片


 

你可能感兴趣的:(错误笔记)