【BUG】SpringBoot 静态资源(static)无法访问问题404

这篇具有很好参考价值的文章主要介绍了【BUG】SpringBoot 静态资源(static)无法访问问题404。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot访问静态资源出现 404

项目场景

问题描述

​编辑原因分析

解决方案

1. 将静态资源放在static 或 templates目录中

2. 继承WebMvcConfigurerAdapter  【已经过时】

3. 继承WebMvcConfiguratiWebonSupport 【推荐】

4. 实现WebMvcConfigurer接口 【推荐】

WebMvcConfiguratiWebonSupport 与 WebMvcConfigurer 区别

1. WebMvcProperties 和 ResourceProperties 失效

2. 类路径上的 HttpMessageConverter 失效


SpringBoot访问静态资源出现 404

项目场景

我们使用Springboot框架编写程序,里面使用到了静态资源,如下图所示的 backend目录 和 front目录,如果不进行配置,那么里面的静态文件将无法访问,会报 404的错误 

【BUG】SpringBoot 静态资源(static)无法访问问题404

问题描述

我们访问的时候,会出现如下问题

原因分析

在SpringBoot中集成了Tomcat,我们是不需要配置tomcat的,但是其设置了默认值,在不做任何配置的情况下,只能访问名为 static目录templates目录 下的静态资源!

所以我们可以简单粗暴的新建一个目录static,再将上述的两个目录移动至static下即可!

【BUG】SpringBoot 静态资源(static)无法访问问题404

如下所示:

【BUG】SpringBoot 静态资源(static)无法访问问题404

但是这样终究是治标不治本

解决方案

1. 将静态资源放在static 或 templates目录中

见上方,但是不推荐!

2. 继承WebMvcConfigurerAdapter  【已经过时】

产生诸多情况无法访问,配置麻烦,spring2.0以后不再建议使用

3. 继承WebMvcConfiguratiWebonSupport 【推荐】

【BUG】SpringBoot 静态资源(static)无法访问问题404

在config包下新建一个类WebMVCConfig,让其继承WebMvcConfiguratiWebonSupport

@Configuration
public class WebMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/front/**")
                .addResourceLocations("classpath:/front/");
        registry.addResourceHandler("/backend/**")
                .addResourceLocations("classpath:/backend/");
    }
}

4. 实现WebMvcConfigurer接口 【推荐】

与第三个方法类似,但是都是推荐的!!!

@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/backend/**")
                .addResourceLocations("classpath:/backend/");
        registry.addResourceHandler("/front/**")
                .addResourceLocations("classpath:/front/");
    }
}

WebMvcConfiguratiWebonSupport 与 WebMvcConfigurer 区别

在Spring Boot 2.0后用自己的的配置类继承WebMvcConfigurerAdapter时,idea会提示这个类已经过时了。 

所以我们在解决这个问题的时候,一般是使用:

  • 实现WebMvcConfigurer  
  • 继承WebMvcConfigurationSupport

但是继承WebMvcConfigurationSupport时发现会造成一些问题

我们可以先看看 WebMvcAutoConfiguration 类

【BUG】SpringBoot 静态资源(static)无法访问问题404

注意一下这个注解 @ConditionalOnMissingBean

SpringBoot做了这个限制,只有WebMvcConfigurationSupport不存在的时候才会生效WebMvc自动化配置,WebMvc自动配置类中不仅定义了classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/等路径的映射,还定义了配置文件spring.mvc开头的配置信息等。

1. WebMvcProperties 和 ResourceProperties 失效

因为两个配置类中的属性都在 WebMvcAutoConfiguration 中使用。当WebMvc自动配置失效(WebMvcAutoConfiguration自动化配置)时,会导致无法视图解析器无法解析并返回到对应的视图。

2. 类路径上的 HttpMessageConverter 失效

如:StringHttpMessageConverterConfiguration、MappingJackson2HttpMessageConverter ,因为 HttpMessageConverters 中持有着所有HttpMessageConverter的实例, 在WebMvcAutoConfigurationAdapter 中会注入 HttpMessageConverters ,因此当WebMvcAutoConfigurationAdapter 不加载时,则会失效,间接的造成spring.http.encoding.charset 与 spring.jackson.date-format 假象的失效。

这一块我看的不是很明白,可以参考一下这里:

WebMvcConfigurer 与 WebMvcConfigurationSupport避坑指南 - 少说点话 - 博客园 (cnblogs.com)https://www.cnblogs.com/sueyyyy/p/11611676.html文章来源地址https://www.toymoban.com/news/detail-453732.html

到了这里,关于【BUG】SpringBoot 静态资源(static)无法访问问题404的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot设置并访问静态资源目录

    目录 ​​​​​​​ 静态文件 application设置方法 配置详解 编写配置 优缺点 设置配置类方法 配置详解 编写配置 优缺点 总结         静态资源,一般是网页端的: HTML文件、JavaScript文件和图片 。尤其是 设置图片的静态资源 ,尤其重要: 这样的静态资源访问不会被Sp

    2024年02月15日
    浏览(51)
  • SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

    记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源,在开发的时候,一般选择前后端分离的方式,前端使用vue 后端使用SpringBoot,通常情况下,部署都是前端通过http去请求后端资源,涉及到http请求,那么肯定需要资源的目标地址IP,一般云端部署给到I

    2024年02月09日
    浏览(59)
  • Linux中Tomcat发布war包后无法正常访问非静态资源

    在CentOS8中安装完WEB环境,首次部署WEB项目DEMO案例,发现可以静态的网页内容, 但是无法向后台发送异步请求,全部出现 404 问题,导致数据库数据无法渲染到界面上。 CentOS请求中提示 用来获取资源的连接不安全 因为使用的 HTTP 协议访问的项目 不安全是正常的,请暂时忽略

    2024年02月09日
    浏览(38)
  • 10SpringBoot 静态资源访问 11Springboot的默认配置文件和外部配置文件及加载顺序

            做web开发的时候,我们往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢?        以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下就可以直接访问。        但是,基

    2023年04月08日
    浏览(42)
  • SpringBoot整合Swagger踩坑-项目启动报错与swagger-ui.html请求404无法访问

    依赖 常见依赖接入方式如下: springfox推荐 依赖接入方式如下: 建议使用推荐的方式,可以协助我们解决404异常的问题。 配置 依赖导入完成后创建 SwaggerConfig.java 配置: 报错信息: org.springframework.context.ApplicationContextException: Failed to start bean ‘documentationPluginsBootstrapper’; n

    2024年02月01日
    浏览(24)
  • SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问

    使用springboot开发一个项目,开发文件上传的时候,通常会将上传的文件存储到资源目录下的static里面,然后在本地测试上传文件功能没有问题,但是将项目打成jar包放到服务器上运行的时候就会报错,找不到对应目录。或者可以将上传文件存储到和jar包同级的目录下,但是无

    2024年02月12日
    浏览(48)
  • Springboot 使用thymeleaf 服务器无法加载resources中的静态资源异常处理

    Springboot使用thymeleaf,并 连接远程数据库 启动时,无法加载resources中的静态资源 浏览器报错 后端启动时报错 前端打开页面时后端报错 打包编译项目,显示找不到js、css、html等静态资源,但本地路径并没有写错,于是我去找编译文件,查看是不是静态资源没有编译到,打开项

    2024年02月04日
    浏览(38)
  • Crow:CROW_STATIC_DIRECTORY静态资源

    Crow通过宏定义CROW_STATIC_DIRECTORY来指定静态资源的目录。 CROW_STATIC_DIRECTORY默认被定义为\\\"static/\\\"  Crow:基于req.rul查找路由Rule对象及匹配参数-CSDN博客 Crow::run()会调用Crow::validate()

    2024年01月21日
    浏览(22)
  • SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

    小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场

    2024年02月01日
    浏览(35)
  • 静态内部类的访问方法(static/无static)

    笔记汇总: 《Java面向对象程序设计》学习笔记 用static修饰内部类,可以直接通过内部类类名访问静态内部类。 没有用static修饰内部类,则需要new一个外部类实例,再通过外部实例创建内部类。 外部类之外创建内部类对象_new通过外部类创建内部类对象_Dingwensheng1222的

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包