SpringBoot 系列教程(五十七):SpringBoot跳转static目录下静态html页面
源码:
https://github.com/Thinkingcao/SpringBootLearning/tree/master/springboot-html
前言
在src/main/resources下面有两个文件夹,static和templates,springboot默认static中放静态页面和静态资源文件,而templates中放动态页面,动态页面访问的话需要Thymeleaf的依赖,动态页面需要从后台Controller跳转,静态页面直接类似于:http://127.0.0.1:8080/index.html 访问就可以了;如果static下的无法访问,首先你要保证了你这几个文件访问,不会被拦截器干掉
使用开发工具IDEA或者Eclipse创建SpringBoot项目的时候,Src目录下会自动有static和templates的文件夹的,这是SpringBoot框架约定俗成;
接下来我们创建如图所示的SpringBoot项目测试一下
一、创建SpringBoot项目
1、依赖信息如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot-html</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-html</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、application.yml配置
#HTML页面配置
spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html
3、创建index.html页面和login.html页面
index.html放到static目录下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2><p> 我是SpringBoot-Static目录下的页面</p></h2>
</body>
</html>
login.html放到templates目录下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h2><p> 我是SpringBoot-templates目录下的页面</p></h2>
</body>
</html>
4、创建LoginController访问templates下的login.html页面
因为login.html是存放在templates目录下面的,是一个动态页面,需要和后台的数据交互,所以需要从后端Controller控制器跳转
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <pre>
* @Desc
* @author cao_wencao
* @date 2019年11月13日 下午6:02:22
* @version V1.0
* </pre>
*/
@Controller
public class LoginController {
@RequestMapping("/login")
public String index() {
return "login";
}
}
启动项目,访问:http://127.0.0.1:8080/login 可以正常访问
5. 关于static目录下的页面如何访问
5.1、在思考页面存放在static目录下如何访问之前,我们先丢一张图片到static下面
访问: http://127.0.0.1:8080/spring.png , 结果正常访问
上面通过从controller跳转到templates目录下面的login.html ,是OK的,访问static目录下的静态资源图片也是OK的,那么如果有的静态Html页面是放在static静态资源目录下面的,我们该如何访问呢? 是否和正常的静态资源访问一样的,接下来我们测试下
5.2、static目录下的页面访问形式
如果真的想跳转到static中的
index.html,可以在Controller
return "redirect:index.html"
,但不建议这么做。
return 的字符串是view的名称,会根据你配置的模板位置来查找,spring boot 默认的模板存放在/resource/templates
下,不会到static
目录下去寻找。redirect
其实就是重定向到外部资源
方式一:直接当做静态资源目录访问,类似于访问图片一样
访问: http://127.0.0.1:8080/index.html
方式二:可以从Controller跳转,上面开头说了,从Controller是重定向
创建IndexController类,用于重定向到Index.html页面
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <pre>
* @Desc
* @author cao_wencao
* @date 2019年11月13日 下午6:02:07
* @version V1.0
* </pre>
*/
@Controller
public class IndexController {
@RequestMapping("/thinkingcao")
public String index() {
return "redirect:index.html";
}
}
访问:http://127.0.0.1:8080/index (这个是从Controller跳转的)
二、总结
SpringBoot项目中static目录和templates目录,默认static中放静态资源文件,例如:img、js、css、font等等,如果静态html页面放在static下,一是可以直接当做静态资源访问;另外如果有一种情况,如果页面是放在static下面的,同时也需要从controller来跳转,那么可以采用重定向的方式,因为spring boot 默认的模板存放在 /resource/templates
下,不会到 static
目录下去寻找。redirect
其实就是重定向到外部资源;其实动态页面放在templates下,大家也都知道,需要从Controller来跳转访问,这些都是SpringBoot约定成俗的一些配置;
源码:
https://github.com/Thinkingcao/SpringBootLearning/tree/master/springboot-html
上一篇: 商城项目-页面静态化