基于【springboot篇】二. springboot配置详解
springboot静态资源详解
SpringBoot支持多模板引擎
- FreeMarker
- Groovy
- Thymeleaf(官方推荐)
- Mustache
- springboot推荐视图模板是 thymeleaf,不支持jsp,原因是tomcat只支持war的打包方式,不支持可执行的jar。jetty嵌套的容器不支持jsp。
- 使用上述模板引擎之一,springboot项目默认模板配置路径为 src/resources/templates,可以通过各引擎配置文件查询并修改。
- thymeleaf依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
项目准备
- 创建项目day63-springboot-02-thymeleaf
- 创建项目步骤参考
- application.yml
#thymeleaf的相关配置 spring: thymeleaf: cache: false # 设置浏览器是否缓存 prefix: classpath:/templates/ suffix: .html
- src/resources/templates下新建index.html
- 在主启动类添加@ComponentScan(basePackages = “com.wpj”)注解
- 运行
- springboot默认配置方式,提供的静态资源映射如下:
- classpath:/META-INF/resources
- classpath:/resources
- classpath:/static
- classpath:/public
- 优先加载 /META-INF/resources > resources > static > public
1 自定义静态资源处理
1.1 在resources下创建js目录
1.2 定义WebConfig实现WebMvcConfigurer并重写addResourceHadles方法
package com.wpj.config;
import org.springframework.context.annotation.*;
import org.springframework.web.servlet.config.annotation.*;
/**
* ClassName: WebConfig
* Description:
*
* @author JieKaMi
* @version 1.0
* @date: 2020\1\16 0016 21:19
* @since JDK 1.8
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
}
}
2 不通过controller也能访问非静态资源
2.1 在templates下创建userList.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
userList
</body>
</html>
2.2 WebConfig重写addViewControllers方法
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("userList").setViewName("userList");
}
2.3 访问
3. 配置拦截器
3.1 定义拦截器
package com.wpj.interceptor;
import org.springframework.lang.*;
import org.springframework.web.servlet.*;
import javax.servlet.http.*;
/**
* ClassName: LoginInterceptor
* Description:
*
* @author JieKaMi
* @version 1.0
* @date: 2020\1\19 0019 16:51
* @since JDK 1.8
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Controller调用之前");
return true; // 放行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
System.out.println("视图解析之前调用");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
System.out.println("视图解析之后调用");
}
}
3.2 WebConfig重写addInterceptors方法
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") // 设置被拦截路径
.excludePathPatterns("/release"); // 设置不被拦截路径
}
3.3 写Controller请求
package com.wpj.controller;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
/**
* ClassName: UserController
* Description:
*
* @author JieKaMi
* @version 1.0
* @date: 2020\1\19 0019 16:56
* @since JDK 1.8
*/
@RestController
public class UserController {
// 拦截方法
@RequestMapping("/intercept")
public String intercept(){
System.out.println("UserController.testInterceptor");
return "intercept";
}
// 放行方法
@RequestMapping("/release")
public String release(){
System.out.println("UserController.release");
return "release";
}
}