本章咱们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter。html
前面章节咱们也有简单介绍过SpringBoot中对静态资源的默认支持,今天详细的来介绍下默认的支持,以及自定义扩展如何实现。spring
Spring Boot 默认为咱们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各类属性。session
建议你们使用Spring Boot的默认配置方式,提供的静态资源映射以下:mvc
classpath:/META-INF/resourceside
classpath:/resourcesspa
classpath:/static3d
classpath:/public日志
在工程里面路径是这样:htm
上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public对象
你们能够本身在上面4个路径下都放一张同名的图片,访问一下便可验证。
还有,你能够随机在上面一个路径下面放上index.html,当咱们访问应用根目录http://lcoalhost:8080 时,会直接映射到index.html页面。
对应的配置文件配置以下:
咱们能够经过修改spring.mvc.static-path-pattern来修改默认的映射,例如我改为/dudu/**,那运行的时候访问 http://lcoalhost:8080/dudu/index.html 才对应到index.html页面。
若是Spring Boot提供的Sping MVC不符合要求,则能够经过一个配置类(注解有@Configuration的类)加上@EnableWebMvc注解来实现彻底本身控制的MVC配置。
固然,一般状况下,Spring Boot的自动配置是符合咱们大多数需求的。在你既须要保留Spring Boot提供的便利,有须要增长本身的额外的配置的时候,能够定义一个配置类并继承WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解。
这里咱们提到这个WebMvcConfigurerAdapter这个类,重写这个类中的方法可让咱们增长额外的配置,这里咱们就介绍几个经常使用的。
好比,咱们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法便可。
经过addResourceHandler添加映射路径,而后经过addResourceLocations来指定路径。咱们访问自定义my文件夹中的elephant.jpg 图片的地址为http://localhost:8080/my/elephant.jpg
若是你想指定外部的目录也很简单,直接addResourceLocations指定便可,代码以下:
addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径
之前写SpringMVC的时候,若是须要访问一个页面,必需要写Controller类,而后再写一个方法跳转到页面,感受好麻烦,其实重写WebMvcConfigurerAdapter中的addViewControllers方法便可达到效果了
值的指出的是,在这里重写addViewControllers方法,并不会覆盖WebMvcAutoConfiguration中的addViewControllers(在此方法中,Spring Boot将“/”映射至index.html),这也就意味着咱们本身的配置和Spring Boot的自动配置同时有效,这也是咱们推荐添加本身的MVC配置的方式。
拦截器在咱们项目中常常使用的,这里就来介绍下最简单的判断是否登陆的使用。
要实现拦截器功能须要完成如下2个步骤:
建立咱们本身的拦截器类并实现 HandlerInterceptor 接口
其实重写WebMvcConfigurerAdapter中的addInterceptors方法把自定义的拦截器类添加进来便可
首先,自定义拦截器代码:
这里咱们简单实现了根据session中是否有User对象来判断是否登陆,为空就跳转到登陆页,不为空就经过。
接着,重写WebMvcConfigurerAdapter中的addInterceptors方法以下:
addPathPatterns("/**")对全部请求都拦截,可是排除了/toLogin和/login请求的拦截。
页面登陆关键代码:
控制器代码:
这样访问的时候,若是未登陆就会跳转到login.html页面,而访问http://localhost:8080/toLogin 和http://localhost:8080/login 不会被拦截。
更多配置能够查看WebMvcConfigurerAdapter的类的API。因其是WebMvcConfigurer接口的实现,因此WebMvcConfigurer的API方法也能够用来配置MVC。
只是实现这个接口的话,要实现全部的方法,这个就尴尬了。
因此仍是推荐使用继承WebMvcConfigurerAdapter类来处理。
静态资源跟拦截器在平时项目中常常用到,弄懂如何处理是颇有用的。今天就到此为止,下一篇未来介绍一下项目中如何使用日志。