springboot篇】三. springboot静态资源详解

基于【springboot篇】二. springboot配置详解

springboot静态资源详解

SpringBoot支持多模板引擎

  • FreeMarker
  • Groovy
  • Thymeleaf(官方推荐)
  • Mustache
  1. springboot推荐视图模板是 thymeleaf,不支持jsp,原因是tomcat只支持war的打包方式,不支持可执行的jar。jetty嵌套的容器不支持jsp。
  2. 使用上述模板引擎之一,springboot项目默认模板配置路径为 src/resources/templates,可以通过各引擎配置文件查询并修改。
  3. thymeleaf依赖
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

项目准备

  1. 创建项目day63-springboot-02-thymeleaf
  2. 创建项目步骤参考
  3. application.yml
    #thymeleaf的相关配置
    spring:
      thymeleaf:
        cache: false # 设置浏览器是否缓存
        prefix: classpath:/templates/
        suffix: .html
    
  4. src/resources/templates下新建index.html
  5. 在主启动类添加@ComponentScan(basePackages = “com.wpj”)注解
  6. 运行
    在这里插入图片描述
  7. 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";
    }
}

3.4 访问

3.4.1 访问拦截方法

在这里插入图片描述

3.4.2 访问不被拦截方法

在这里插入图片描述

发布了42 篇原创文章 · 获赞 8 · 访问量 2403

猜你喜欢

转载自blog.csdn.net/TheNew_One/article/details/104010746