Springboot web工程

背景

目前,基于servlet 3.0web具备两种发布方式:1. 采用独立的web容器,以war包的形式发布;2. 采用内嵌式容器,以jar包方式发布。 spring boot提供了二者的继承方案。 现针对当前技术栈中使用最多的jar包发布方式进行相关说明。css

工程结构

spring boot的工程结构,采用maven标准的工程结构。html

src/main/java
src/main/resource
          |__________static
                        |_________js
                        |_________images
                        |_________css
          |----------public
                        | index.html
                        | index.vm

其中java目录下存放全部的工程源码,resource目录下存放配置文件、静态资源、页面等。
static目录:主要存放静态文件:如js、图片等
public目录下主要存放页面、模板等相关的展现文件。java

举个栗子

imges目录下的demo.jpg 在HTML/JSP中访问是的路径就是<img src="/images/demo.jpg">, 由于Spring Boot的 缺省工做目录就是src/main/java, 当访问资源时,就是src/main/resources, 而/static/**被SPRING BOOT被映射到了classpath:/static下。因此也能够不带起始的“/”,直接写成<img src="images/demo.jpg">。此处建议使用相对路径,或者是使用带server.contextPath的绝对路径。
在此,咱们的静态资源存放在 classpath:/static,且映射的 url 为 /web

Spring boot静态资源加载

Spring boot对于静态资源的加载过程,在WebMvcAutoConfiguration类中,具备完整的体现。
其中:spring

String staticPathPattern = "/**"   
String[] CLASSPATH_RESOURCE_LOCATIONS = {
      "classpath:/META-INF/resources/", "classpath:/resources/",
      "classpath:/static/", "classpath:/public/" };

也就是说,spring boot在检测到该工程是一个web工程时,在默认的状况下会自动加载上述目录下的全部资源。 注意:无需使用 @EnaleWebMvc 注解。使用了 @EnableWebMvc 注解后 WebMvcAutoConfiguration 提供的默认配置会失效,必须提供所有配置。springboot

配置资源加载位置

咱们使用 spring boot 提供的编写配置文件的方式,实现上面资源配置。app

application.properties

设置静态资源的存放地址maven

spring.resources.static-locations=classpath:/resources 
。。。。。。

建议参看:深刻 Spring 系列之静态资源处理以获取详细信息。ide

最后介绍一下如何查看这些配置的技巧:

经过查看 ResourceProperties 这个类能够看到,该类顶部有一个注解 @ConfigurationProperties(prefix="spring.resources", ignoreUnknownFields = false)。spring-boot

ConfigurationProperties 是用来注入值的,prefix = “spring.resources” 表示前缀。好比咱们配置文件中的 spring.resources.static-locations=classpath:/resources 这个配置,去掉 spring.resources 这个前缀,剩下的为 static-locations ,则它的值 classpath:/resources 会被注入到 ConfigurationProperties 类的 staticLocations 成员变量中。经过这种方法,咱们就能经过编写配置文件改变类的状态而无需编写代码。固然,如何使用这些配置的关键仍是要知道这些成员变量的做用。

自定义位置

若是我不太满意目前的目录结构,能够经过自定以的方式,调整springboot的资源加载。

@Configuration
public class MyWebAppConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/myResource/**").addResourceLocations("classpath:/myResource/");
        super.addResourceHandlers(registry);
    }   
}

目录结构为:

src/main/resource
          |__________myResource

若是newDemo.jpg放在src/main/resource/myResource/images/newDemo.jpg,那么就可用<img src="image/newDemo.jpg">访问。
在此,咱们的静态资源存放在 classpath:/myResource,且映射的 url 为 /myResource

注意:此处的路径是是添加,不是替换,添加不影响原来的默认约定。非要自定义,那就配置类继承WebMvcConfigurerAdapter

webjars

http://blog.csdn.net/xichenguan/article/details/52794862

参考:

http://www.cnblogs.com/chry/p/5877979.html
https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot
http://blog.csdn.net/xichenguan/article/details/52794862

相关文章
相关标签/搜索