您的位置:首页 > 编程语言 > Java开发

SpringBoot系列<四>视图解析、路径-资源映射、静态资源访问

2017-12-06 20:07 1346 查看
简言

  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/来访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: