Spring Boot 入门 - 基础篇(4)- 静态资源

静态资源包括:HTML、CSS、JS、图像、视频、PDF/Office等不需要服务器端处理的文件。

[b](1)文件位置[/b]
Maven工程,静态文件放在src/main/webapp/下。
[quote]Project Root
└─src
└─ main
└─ webapp # Web应用的根目录
└─ static
└─ css
└─ app.css[/quote]

打包发布到Tomcat后文件路径是:
[quote]<TOMCAT_HOME>/webapps/spring-boot-sample/static/css/app.css[/quote]

访问URL:
[color=blue]http://localhost:8080/spring-boot-sample/static/css/app.css[/color]

[b](2)Tomcat的请求响应[/b]
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应用的根目录。
[quote]spring-boot-sample.war
└─ WEB-INF
└─ lib
└─ foo.jar
└─ META-INF
└─ resources # Web应用的根目录
└─ static
└─ css
└─ foo.css[/quote]

访问URL:
[color=blue]http://localhost:8080/spring-boot-sample/static/css/foo.css [/color]

[b](2)Spring MVC的请求响应[/b]
通常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);
}
}


[b](3)SpringBoot的请求响应[/b]
SpringBoot已经自动将「/static」「/public」「/resources」「/META-INF/resources」识别为资源文件夹。
[quote]Project Root
└─src
└─ main
└─ resources
├─ static
| └─ css
| └─ a.css
├─ public
| └─ css
| └─ b.css
├─ resources
| └─ css
| └─ b.css
└─ META-INF
└─ resources
└─ css
└─ d.css[/quote]
访问URL:
[color=blue]http://localhost:8080/css/a.css
http://localhost:8080/css/b.css
http://localhost:8080/css/c.css
http://localhost:8080/css/d.css[/color]

[b]详细配置:[/b]
src/main/resources/application.properties
[quote]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[/quote]

[b]使用方法:[/b]
[quote]──resources
├─static
│ ├─css
│ │ index.css
│ └─js
│ index.js
└─templates
index.ftl[/quote]
<link rel="stylesheet" type="text/css" href="/css/index.css">
<script type="text/javascript" src="/js/index.js"></script>


[b]版本管理:[/b]
由于浏览器会对静态文件进行缓存,所有服务器端修改后的静态文件不会立即被浏览器重新加载,通常会在资源文件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
[quote]spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**[/quote]

b - 版本号 方式
src/main/resources/application.properties
[quote]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[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值