springboot工程静态资源访问不到

在Spring Boot工程中,当使用templates模式并引入静态资源时,遇到404错误。问题源于启用@EnableWebMvc导致Spring MVC默认配置覆盖了Spring Boot的静态资源处理。解决方案是取消该注解,或调整Spring MVC配置以允许静态资源访问。此外,模板目录设置为classpath:/templates/,返回页面后缀设为.html。静态文件修改需重启项目或关闭模板引擎缓存以生效。注意,Spring Boot旨在支持微服务,而非传统Web工程。

为什么spring boot工程访问不到 静态资源##

在一个构建项目spring boot工程中,使用了templates模式,但是在工程都构建完成,也能正常请求,正常响应后,很开心得引入静态资源,准备大干一番得时候,发现今天资源怎么也访问不到,都是404,如下图得配置
这里写图片描述

提示信息是

[No mapping found for HTTP request with URI [/index.html] in DispatcherServlet with name 'dispatcherServlet'],

这就郁闷了,找了半天,大家工程都这样构建,没有问题啊,然后各种配置,各种倒腾,回头发现如下描述是很有用得:

	Spring Boot 默认将 /** 所有访问映射到以下目录:
	classpath:/static
	classpath:/public
	classpath:/resources
	classpath:/META-INF/resources

原来springboot中得springmvc模块会默认这些地方进行扫描,如果找到,就会直接响应。
那么现在问题清楚了,肯定是mvc得配置有问题,工程中哪些地方我单独加了springmvc呢,那就只有一图中,添加了@EnableWebMvc,这个标签启用了Spring MVC的注解支持,使得spring boot中的注解默认转化为Spring MVC了,也就是说,要想使用静态资源,得按照springmvc的方式去进行资源配置。
好得,问题知道,就知道怎么解决了,方法很简单,取消掉这个注解,再启动,OK了,静态资源能够正常访问到了,至于springmvc怎么配置,想必大家都知道了,就不在复述了。

定位模板的目录
sring.mvc.view.prefix=classpath:/templates/
给返回的页面添加后缀名
spring.mvc.view.suffix=.html

但是,如果项目没有应用热启动配置,那么你修改完你的静态文件引用的时候,你需要重启一下项目才能生效。或者关闭模板引擎的缓存也会即时生效(然而我并没有测试成功)。

最后想说一点,springboot最终的目的是微服务,而不是构建web工程,我们应该摒弃固定思维(这个也是一种固定思维,仁者见仁吧)。
对于spring boot,我们要不忘初衷,方得始终。

学习,记录,分享。
### 将静态资源Spring Boot前后端不分离项目中提取并单独部署 #### 1. 构建独立的前端工程 对于大型应用而言,随着功能不断迭代,静态文件数量逐渐增多,这不仅增加了打包时间也使得每次更新都变得繁琐。因此建议创建一个专门用于管理这些静态资产的新仓库或模块[^3]。 - 使用`Vue CLI`初始化一个新的vue应用程序作为独立的前端部分[^5]: ```bash npm install -g @vue/cli vue create frontend-app ``` #### 2. 修改后端服务以支持跨域请求(CORS) 当前后端分离时,浏览器的安全策略可能会阻止来自不同源的服务之间的通信。可以在Spring Boot配置类里通过设置CORS来允许特定域名下的页面访问API接口: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") // 生产环境中应指定确切的URL而非通配符* .maxAge(3600); } } ``` #### 3. 打包与发布流程调整 完成上述改造后,在持续集成/持续交付(CI/CD)管道中分别处理两者的构建过程。通常情况下,CI工具会先执行前端项目的构建命令(`npm run build`)并将产出物上传至对象存储(OSS),而后端则只需负责提供RESTful API即可。 #### 4. 利用CDN加速分发 考虑到用户体验及性能因素,可考虑将已发布的静态资源托管到内容分发网络(Content Delivery Network, CDN)上。大多数主流云服务商均提供了此类服务选项,能够有效降低延迟提高加载速度。 #### 5. 更新引用路径 最后一步是要确保所有的HTML模板内的链接指向新的位置而不是本地classpath下的static目录。可以通过修改base URL的方式实现这一点;如果是单页应用(SPA), 还需注意路由模式的选择以免影响SEO效果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值