静态资源包括:HTML、CSS、JS、图像、视频、PDF/Office等不需要服务器端处理的文件。
(1)文件位置
Maven工程,静态文件放在src/main/webapp/下。
引用
Project Root
└─src
└─ main
└─ webapp # Web应用的根目录
└─ static
└─ css
└─ app.css
打包发布到Tomcat后文件路径是:
引用
<TOMCAT_HOME>/webapps/spring-boot-sample/static/css/app.css
访问URL:
http://localhost:8080/spring-boot-sample/static/css/app.css
(2)Tomcat的请求响应
Tomcat通过 org.apache.catalina.servlets.DefaultServlet 来响应所有请求处理。
<TOMCAT_HOME>\conf\web.xml。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Servlet 3.0+以后war中jar文件 META-INF/resources 也是Web应用的根目录。
引用
spring-boot-sample.war
└─ WEB-INF
└─ lib
└─ foo.jar
└─ META-INF
└─ resources # Web应用的根目录
└─ static
└─ css
└─ foo.css
访问URL:
http://localhost:8080/spring-boot-sample/static/css/foo.css
(2)Spring MVC的请求响应
通常Spring工程将所有请求都分发给DispatcherServlet,这样就不会调用Tomcat的DefaultServlet,静态文件也就访问不到了。
src/main/webapp/WEB-INF/web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
继续使用DefaultServlet响应静态文件的话,需要开启请求Forward到DefaultServlet。
org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
或者采用Spring MVC自己的静态文件处理
org.springframework.web.servlet.resource.ResourceHttpRequestHandler
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/")
.setCachePeriod(604800);
}
}
(3)SpringBoot的请求响应
SpringBoot已经自动将「/static」「/public」「/resources」「/META-INF/resources」识别为资源文件夹。
引用
Project Root
└─src
└─ main
└─ resources
├─ static
| └─ css
| └─ a.css
├─ public
| └─ css
| └─ b.css
├─ resources
| └─ css
| └─ b.css
└─ META-INF
└─ resources
└─ css
└─ d.css
访问URL:
http://localhost:8080/css/a.css
http://localhost:8080/css/b.css
http://localhost:8080/css/c.css
http://localhost:8080/css/d.css
详细配置:
src/main/resources/application.properties
引用
spring.resources.static-locations=classpath:/static/
spring.resources.cache-period=604800
spring.resources.chain.gzipped=true
spring.resources.chain.cache=false
spring.resources.add-mappings=false
使用方法:
引用
──resources
├─static
│ ├─css
│ │ index.css
│ └─js
│ index.js
└─templates
index.ftl
<link rel="stylesheet" type="text/css" href="/css/index.css">
<script type="text/javascript" src="/js/index.js"></script>
版本管理:
由于浏览器会对静态文件进行缓存,所有服务器端修改后的静态文件不会立即被浏览器重新加载,通常会在资源文件URL的后边添加一个标示(时间戳或版本号),修改时也同时修改该标示,由于URL不同,浏览器就会重新加载该资源文件了。
<script type="text/javascript" src="/js/sample.js?201702091030"></script>
<script type="text/javascript" src="/js/sample.js?v=1.0.1"></script>
a - 资源名MD5 方式
src/main/resources/application.properties
引用
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
b - 版本号 方式
src/main/resources/application.properties
引用
spring.resources.chain.strategy.fixed.enabled=true
spring.resources.chain.strategy.fixed.paths=/js/**,/v1.0.0/**
spring.resources.chain.strategy.fixed.version=v1.0.0
分享到:
相关推荐
Spring Boot 项目结构通常包括 src/main/java 下的主类、配置类和业务逻辑,src/main/resources 下的静态资源、模板和配置文件。 在启动时运行特殊代码,可以使用 `@PostConstruct` 注解的方法。 Spring Boot 2.x ...
在上一部分中,我们可能已经介绍了Spring Boot的基础知识和快速入门。在此阶段,我们将更进一步,通过代码示例深入了解Spring Boot的核心特性以及如何集成常用的数据库连接池Druid和SQL监控工具P6Spy。 首先,...
5. **日志与资源**:项目可能包含`log`目录用于存放运行时的日志文件,以及`resources`目录,其中的`application.properties`或`application.yml`用于配置应用参数,静态资源如HTML、CSS、JavaScript也可能存于此。...
根据提供的文件信息,我们可以推断出这篇文档主要讨论的是与Spring Boot技术栈相关的博客内容,尤其是聚焦于企业级应用中的前后端开发。接下来,我们将基于这些有限的信息来展开相关知识点的详细阐述。 ### Spring ...
在本篇"Spring Boot2 教程1"中,我们将探讨如何在Spring Boot 2.x应用中设置静态资源处理、视图解析以及路径映射。首先,Spring Boot 2.0 强调了Java配置的使用,而不是XML,尽管它仍支持XML配置,但推荐使用Java...
在本篇文章中,我们将深入探讨如何利用Spring Boot来开发一个公告板系统,即“Spring-Boot-Bbs”。这个项目将展示Spring Boot如何快速构建Web应用,并且集成数据库和模板引擎,以实现用户交互功能。 首先,让我们...
首先,了解Spring Boot的基础概念是必要的。Spring Boot是一种简化Spring应用程序开发的框架,它通过提供预配置的依赖和自动配置功能,使得创建独立运行的、生产级别的Java应用变得简单。在Spring Boot应用中,所有...
- 在某些情况下,我们可能希望使用 Servlet 来处理静态资源,而不是使用默认的 Spring Boot 配置。这可以通过自定义一个 Servlet 并指定其 URL 映射来实现。 2. **使用 Filter 实现统一的日志记录**: - 在 Web ...
Java微服务实践中的Spring Boot Web篇涉及到静态内容的高效处理和动态内容的灵活生成。理解这些基础概念和技术对于构建高性能、可扩展的微服务至关重要。同时,模板引擎的使用进一步提升了Web应用的用户体验和开发...
在Spring Boot应用中,我们经常会遇到各种错误情况,如404 Not Found、500 Internal Server Error等。为了提供更友好的用户体验,Spring Boot允许我们自定义这些错误页面,而不是显示默认的Spring Boot错误页面。这...
一、Spring Boot基础 Spring Boot是由Pivotal团队提供的全新框架,它旨在简化Spring应用的初始搭建以及开发过程。Spring Boot通过内嵌Tomcat、自动配置Spring等特性,让开发者能够快速地构建可运行的独立应用。在...
本篇文章将以"TestProject.rar"压缩包中的"Spring Boot基础demo"为例,深入探讨Spring Boot的基础知识和实战应用。 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用...
本篇将围绕“activiti-spring-examples”这个压缩包中的示例,深入探讨如何在Spring环境中配置和使用Activiti。 首先,我们要理解Activiti的核心概念。Activiti设计了流程定义(Process Definition)和流程实例...
总之,"初学Spring项目(入门解读和新建项目)"这篇博文将引导你了解Spring框架的基本概念,学习如何使用Spring Initializr创建项目,并通过实际操作来熟悉Spring Boot的启动流程、MVC架构、数据库操作以及自动配置等...
### Spring Boot深入实践知识点概述 ...通过上述内容的详细介绍,我们不仅了解了Spring Boot的基础概念和核心优势,还深入探讨了其实战案例和技术细节,希望能为读者在Spring Boot的学习道路上提供有价值的参考。
本篇将详细介绍如何利用Maven与Spring Boot框架结合,创建一个名为"SpringMavenExample"的项目,帮助开发者深入理解这两者的集成与应用。 一、Spring Boot简介 Spring Boot是由Pivotal团队维护的Java框架,其设计...
通过上述步骤,我们可以确保Vue项目在Spring Boot环境中部署时,无论是首次加载还是刷新浏览器,都能正确加载静态资源,避免出现页面空白和404错误。请注意,每个项目的具体配置可能因环境而异,因此在实际操作中,...
在Spring Boot中,我们可以利用MultipartFile接口处理文件上传,而文件下载则可以通过StreamingResponseBody或者直接提供静态资源路径来实现。这些功能对于构建一个媒体库应用至关重要。 标签“Java”表明这个项目...
本篇文章将深入解析一个基于Spring Boot构建的员工管理系统,虽然它目前仅是模拟数据库(未连接实际数据库),但已足够展示Spring Boot在构建Web应用方面的强大功能。 首先,让我们从项目结构开始。一个标准的...