SpringBoot系列<四>视图解析、路径-资源映射、静态资源访问
2017-12-06 20:07
1346 查看
简言
SpringBoot集成了各种模板引擎的视图解析,具体就不一一列举了,本文主要讲如何集成SpringMVC时对JSP的视图解析;
SpringBoot快速创建时会自动在resources目录下创建classpath:/static和classpath:/templates目录,这两个目录是SpringBoot默认对模板引擎的支持,当然模板引擎是可以自己配置指定静态资源目录的;默认页面是放classpath:/templates,静态资源放classpath:/static
1、在resources同级目录下创建webapp目录,SpringBoot默认对JSP页面的访问是通过访问webapp目录下的资源实现的;
2、添加对JSP页面的依赖支持
3、在webapp目录下存放好需要访问的JSP页面,在配置文件里配置SpringMVC的视图解析参数
注:这里我的JSP页面是存放在/WEB-INF/jsp/目录下,SpringBoot访问webapp目录下/WEB-INF/jsp/的以.jsp结尾的页面;
3、启动项目访问静态页面,项目启动过程中控制台如出现
则是tomcat-embed-jasper包和spring-boot-starter-tomcat冲突,如果两者的< scope>都是provided,就会出现上述启动异常;注释掉新加入的tomcat-embed-jasper的< scope>
定义一个类继承WebMvcConfigurerAdapter,重写addViewControllers方法,将空路径转发到相应访问,可以配置多个资源-路径映射;
这里的路径映射转发只能映射成可单独访问的路径;比如映射成静态资源访问路径,必须该静态资源访问路径能单独访问成功!
spring Boot 对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求。
前面我们自定义了SpringBoot对JSP的支持,所以静态资源就不放在上述默认路径了,放入webapp目录下,webapp目录下的访问和默认目录下的访问方式一致,只要路径对就行;
下面介绍两种修改静态资源路径映射的方法:
第一种方式:静态资源配置类
第二种方式:在application.properties配置
注意:通过spring.mvc.static-path-pattern这种方式配置,会使Spring Boot的默认配置失效,也就是说,/public /resources 等默认配置不能使用。
application.properties配置中配置了静态模式为/static/,就只能通过/static/来访问。
SpringBoot集成了各种模板引擎的视图解析,具体就不一一列举了,本文主要讲如何集成SpringMVC时对JSP的视图解析;
SpringBoot快速创建时会自动在resources目录下创建classpath:/static和classpath:/templates目录,这两个目录是SpringBoot默认对模板引擎的支持,当然模板引擎是可以自己配置指定静态资源目录的;默认页面是放classpath:/templates,静态资源放classpath:/static
一、SpringBoot对JSP页面的支持
下面开始SpringBoot对JSP页面的支持,默认SpringBoot对JSP页面的支持不友好,需要按照下面的步骤配置:1、在resources同级目录下创建webapp目录,SpringBoot默认对JSP页面的访问是通过访问webapp目录下的资源实现的;
2、添加对JSP页面的依赖支持
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>8.5.6</version> <!-- <scope>provided</scope>--> </dependency> <!--对jstl支持的 libs--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
3、在webapp目录下存放好需要访问的JSP页面,在配置文件里配置SpringMVC的视图解析参数
#---------------------配置视图层--------------------- # 页面默认前缀目录 spring.mvc.view.prefix=/WEB-INF/jsp/ # 响应页面默认后缀 spring.mvc.view.suffix=.jsp #页面向后台传入日期格式化 spring.mvc.date-format="yyyy-MM-dd HH:mm:ss"
注:这里我的JSP页面是存放在/WEB-INF/jsp/目录下,SpringBoot访问webapp目录下/WEB-INF/jsp/的以.jsp结尾的页面;
3、启动项目访问静态页面,项目启动过程中控制台如出现
o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
则是tomcat-embed-jasper包和spring-boot-starter-tomcat冲突,如果两者的< scope>都是provided,就会出现上述启动异常;注释掉新加入的tomcat-embed-jasper的< scope>
二、SpringBoot的默认首页
SpringBoot设置首页有两种方式,一种是定义一个空路径的Controller,Controller再执行转发,这种方式就不具体贴出了,不够友好!下面贴出另一种方式,代码如下:@Configuration public class DefaultView extends WebMvcConfigurerAdapter{ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("forward:/test/index"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addViewControllers(registry); } }
定义一个类继承WebMvcConfigurerAdapter,重写addViewControllers方法,将空路径转发到相应访问,可以配置多个资源-路径映射;
这里的路径映射转发只能映射成可单独访问的路径;比如映射成静态资源访问路径,必须该静态资源访问路径能单独访问成功!
三、静态资源访问
在web开发中,静态资源的访问是必不可少的,如:图片、js、css 等资源的访问。spring Boot 对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求。
Spring Boot 默认将 /** 所有访问映射到以下目录: classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources
前面我们自定义了SpringBoot对JSP的支持,所以静态资源就不放在上述默认路径了,放入webapp目录下,webapp目录下的访问和默认目录下的访问方式一致,只要路径对就行;
下面介绍两种修改静态资源路径映射的方法:
第一种方式:静态资源配置类
package com.jd.m.tg.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class WebMvcStaticConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //将所有/static/** 访问都映射到classpath:/static/ 目录下 //registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); registry.addResourceHandler("/static/**").addResourceLocations("/static/image/"); } }
第二种方式:在application.properties配置
spring.mvc.static-path-pattern=/static/**
注意:通过spring.mvc.static-path-pattern这种方式配置,会使Spring Boot的默认配置失效,也就是说,/public /resources 等默认配置不能使用。
application.properties配置中配置了静态模式为/static/,就只能通过/static/来访问。
相关文章推荐
- Spring boot 默认静态资源路径与手动配置访问路径的方法
- spring boot整合Jersey时无法访问静态资源路径解决办法
- Springboot配置静态资源url映射及对应的本地路径
- spring boot war 发布到jboss上之后 静态资源访问路径的处理
- Spring boot 默认静态资源路径与手动配置访问路径的方法
- SpringBoot学习历程(3)->springboot中对静态资源的访问
- 架构搭起后 为了实现 对静态资源文件的访问 spring_mvc.xml 添加<mvc:default-servlet-handler /> 但却再也无法访问到controller
- spring对于静态资源的访问<mvn:default-servlet-handler/>
- springboot 1.5.2 thymeleaf 添加templates 静态资源访问路径
- IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404
- spring<mvc:resources> 标签的使用 静态资源的访问
- spring boot 映射访问项目之外的静态资源
- IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404
- 【转】Spring Boot干货系列:(六)静态资源和拦截器处理
- springboot jsp 静态资源访问
- Spring Boot干货系列:(六)静态资源和拦截器处理
- spring-boot 加载本地静态资源文件路径配置
- (五)Spring Boot配置静态资源访问,整合Thymeleaf模板
- 0055 <mvc:default-servlet-handler />不能同时访问静态资源和动态资源的问题
- spring-boot 加载本地静态资源文件路径配置