今天被问到重定向的问题,后续又引起了静态资源路径配置的问题,在这里做一个总结,当然,顺便添加默认访问index.html。
一:默认访问
1.默认路径
在springboot中静态资源的映射文件是在resources目录下的static文件夹。
2.访问index.html
在项目中,如何访问我们的index.html呢。
首先看程序结构。
然后启动项目。
输入localhost:8090就可以访问了,这个是默认的,不需要具体的写index.html
二:重定向
1.程序
package com.jun; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @SpringBootApplication
@RestController
public class SpringBootApplicationTest {
public static void main(String[] args) {
System.out.print(11);
SpringApplication.run(SpringBootApplicationTest.class,args);
} /**
* 测试重定向,与验证restful
* @param response
* @throws IOException
*/
@GetMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
response.sendRedirect("http://127.0.0.1:8090/test/tt.html");
}
}
2.知识点
使用response.sendRedirect("绝对路径");
3.注意点
在写绝对路径的时候,可以省略static。
三:资源配置
1.默认资源路径
Spring Boot默认的静态资源文件配置: private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
2.自定义路径的方法
改变springboot项目静态资源文件访问目录的方式有两种:
一种是直接在配置文件中进行设置,
另一种是我们编写一个配置类,继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter【已经弃用】或者WebMvcConfigurationSupport
并重写addResourceHandlers(ResourceHandlerRegistry registry)方法,其实addResourceHandlers(ResourceHandlerRegistry registry)方法就是个空方法。
3.配置方式
spring.mvc.static-path-pattern=/**
表示所有的访问都经过静态资源路径;如果不设置,则不需要在绝对路径中考虑这个配置,如果配置了值,则需要考虑配置的值。在设置之后,在路径中不写配置的值则会报错,找不到路径。
spring.resources.static-locations
在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上,否则static
、public
等这些路径将不能被当作静态资源路径
4.配置方式的实践
classpath下的所有文件都是可以被访问到的。但是这种方式还是不建议的,使用默认的即可,不过实践可以学习一下。
重新设置目录结构:
配置:
server.port=8090
#spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/
在这里,其实可以不设置spring.mvc.static-path-pattern。
程序:
@GetMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
// response.sendRedirect("http://127.0.0.1:8090/test/tt.html");
response.sendRedirect("http://127.0.0.1:8090/template/yy.html");
}
和:
@GetMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
// response.sendRedirect("http://127.0.0.1:8090/test/tt.html");
// response.sendRedirect("http://127.0.0.1:8090/template/yy.html");
response.sendRedirect("http://127.0.0.1:8090/static/test/tt.html");
}
5.程序设置
package com.jun.config; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; /**
* 这里主要用于设置静态资源的访问路径的测试
*/
@Configuration
public class MvcConfig extends WebMvcConfigurationSupport{
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 这里之所以多了一"/",是为了解决打war时访问不到问题
registry.addResourceHandler("/**").addResourceLocations("/template","classpath:/template");
}
}
6.访问
上面的程序说明,只能访问template路径下的静态资源。