聊聊、SpringBoot 静态资源访问
SpringBoot 1.X 版本和 SpringBoot 2.X 版本在静态资源访问上有一些区别,如果直接从 1.X 升级到 2.X 肯定是有问题的。这篇文章就来讲讲这方面问题,也是项目中的坑。
先看看项目结构,这个项目主要是开发商管理系统,包含了开发商信息,开发商订单等模块。主要介绍 resources 目录,static 静态资源目录,包含 js,css 等。templates 目录主要是页面。SpringBoot 和 thymeleaf 是官方推荐,也是默认集成。
划掉了的都是不需要的,先来看看我的 controller 类
package com.example.demo.controller; import com.example.demo.entity.InventoryRequestEntity;
import com.example.demo.service.InventoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* DemoController
* TODO
* rockcode
* 2018/6/25-9:47
*/
@Controller
public class DemoController { @RequestMapping("/login")
public String login() {
System.out.println(">>>>>>>>>>>>>>>>>>>>>login>>>>>>>>>>>>>>>>>>>>>>");
return "index";
} @RequestMapping("/")
public String index() {
System.out.println(">>>>>>>>>>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>>>>>>");
return "index";
} }
SpringBoot 版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository 2.0.3.RELEASE -->
</parent>
启动项目,先来访问 localhost:8888/,没问题可以访问 templates 下面的 index.html 页面。这说明,SpringBoot 默认去 templates 目录寻找页面,再来看看页面上脚本和样式引入。
我的所有 js 和 css 都放在 resources/static 目录下面,但是我引入的时候不用加 static 一样成功,这说明 SpringBoot 默认去 static 目录引入脚本和样式,下面是成功页面导航栏。
关于上面端口 8888,可以在 application.properties 里面配置,server.port = 8888。
到这里都没有问题,但是出于安全的考虑,我必须加上拦截器,如果没有登录,那必须去登录才可以访问。先来看看 1.5.4.RELEASE 版本拦截器。
package com.example.demo.config; import com.example.demo.interceptor.DemoInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*; /**
* WebConfig
* TODO
* rockcode
* 2018/7/4-10:21
*/ @Configuration
public class WebConfig extends WebMvcConfigurerAdapter{ @Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new DemoInterceptor()).addPathPatterns("/");
}
}
package com.example.demo.interceptor; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.util.UrlPathHelper;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* DemoInterceptor
* TODO
* rockcode
* 2018/7/4-10:02
*/
public class DemoInterceptor extends HandlerInterceptorAdapter { private UrlPathHelper urlPathHelper = new UrlPathHelper(); @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("DemoInterceptor....验证用户名,密码是否正确....");
response.sendRedirect("/login");
return true;
}
}
现在来访问 localhost:8888/,拦截器会拦截 /,然后跳转到 /login,让其去做验证等等事情。下面是成功界面。但是如果把版本换成 2.0.3.RELEASE,你会发现页面变得很乱,样式和脚本没办法加载进来。
原因在 1.X 和 2.X 静态资源访问方式变了,1.X 是默认 static 目录,但是 2.X 需要显示去说明。
我们来看看 2.X 的拦截器有什么不同,首先 WebMvcConfigurerAdapter 已经过时,要用 WebMvcConfigurationSupport 类,而且需要实现 addResourceHandlers 方法。
package com.example.demo.config; import com.example.demo.interceptor.DemoInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; /**
* WebConfig
* TODO
* rockcode
* 2018/7/4-10:21
*/ @Configuration
public class WebConfig extends WebMvcConfigurationSupport { @Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new DemoInterceptor()).addPathPatterns("/login").excludePathPatterns("/static/**");
} @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}
指定了静态文件目录,在页面引用必须加上 static,例如 <link rel="stylesheet" href="static/css/bootstrap.min.css"/> 等。
这其中的原因,可以去看看 WebMvcConfigurationSupport 和 WebMvcConfigurerAdapter 源码。
聊聊、SpringBoot 静态资源访问的更多相关文章
- springboot 静态资源访问,和文件上传 ,以及路径问题
springboot 静态资源访问: 这是springboot 默认的静态资源访问路径 访问顺序依次从前到后(http://localhost:8080/bb.jpg) spring.resourc ...
- SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆
在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...
- springmvc、springboot静态资源访问配置
如何访问项目中的静态资源? 一.springmvc springmvc中访问静态资源,如果DispatcherServlet拦截的为"",那么静态资源的访问也会交给Dispatch ...
- SpringBoot静态资源访问
在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置: Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static ...
- IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404
IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404 .embody{ padding:10px 10px 10px; margin:0 -20px; borde ...
- springboot学习入门简易版四---springboot2.0静态资源访问及整合freemarker视图层
2.4.4 SpringBoot静态资源访问(9) Springboot默认提供静态资源目录位置需放在classpath下,目录名需要符合如下规则 /static /public /resourc ...
- springboot + thymeleaf静态资源访问404
在使用springboot 和thtmeleaf开发时引用静态资源404,静态资源结如下: index.html文件: <!DOCTYPE html> <html xmlns:th= ...
- SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径
Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class Sta ...
- springboot配置静态资源访问路径
其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/s ...
随机推荐
- Shell脚本 - 用来检查memcache并自动重启生效脚本
#!/bin/sh#check memcache process and restart if downmm_bin="/usr/local/bin/memcached"mm_lo ...
- HTML 5.1 的 14 个新特性(含使用案例)
HTML5 属于万维网联盟 (W3C), 这个组织为整个网络界提供了标准,如此形成的协议可在全世界通行.在 2016 年 11 月, W3C 对长期行使的 HTML 5 标准进行了更新,它是2年内的第 ...
- CUDA && GPU中dim3介绍
- 前端小记2——移动web解决方案
面向用户级移动web解决方案: 1.代码结构规范 2.字体设置 body{ font-family: -apple-system, BlinkMacSystemFont, "PingFang ...
- GMap.Net解决方案之在WinForm和WPF中使用GMap.Net地图插件的开发
在做地理位置相关的开发时,总是面临高额地图引擎费用让大部分用户望而却步,加之地图数据又是天价,那么GMap.NET就是首选了,它本身就是开源免费,服务器可以在本地缓存,以后访问时就可以直接访问. 可以 ...
- 螺旋矩阵,两步进阶,从暴力到o(1)
题目描述 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格 ...
- PAT 乙级 1078 / 1084
题目 PAT 乙级 1078 PAT 乙级 1084 题解 1078和1084这两道题放在一块写,主要是因为这两道题的解法和做题思路非常相似:之前我做这一类题没有一个固定的套路,想到哪写到哪,在某种程 ...
- 线程池是什么?Java四种线程池的使用介绍
使用线程池的好处有很多,比如节省系统资源的开销,节省创建和销毁线程的时间等,当我们需要处理的任务较多时,就可以使用线程池,可能还有很多用户不知道Java线程池如何使用?下面小编给大家分享Java四种线 ...
- 问题:Could not install packages due to an EnvironmentError: [Errno 13] Permission denied:
1.安装django 执行pip3 install --user django 2.解决方法:加--user 执行pip3 install --user django
- PyCharm(二)——PyCharm打开本地项目不显示项目文件
一.问题描述 1.1.系统及软件环境 系统:windows10 64位企业版 软件:PyCharm2018.1.4 1.2.问题现象 现象: PyCharm之前一直正常. 从github克隆了一个项目 ...