`
rensanning
  • 浏览: 3516832 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37544
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604538
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678399
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87443
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399961
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69113
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90598
社区版块
存档分类
最新评论

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

 
阅读更多
静态资源包括: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
分享到:
评论
1 楼 www88485400 2017-04-26  
静态方法测试不出来 加上springmvc的方式才出来,不知道是怎么回事

相关推荐

Global site tag (gtag.js) - Google Analytics