Spring Boot 2.X关于js、css无法正常显示样式以及Springboot1.X和Springboot2.X的SpringMVC扩展类问题
今天搞了一下Spring Boot,使用自动生成的,现在自动生成都是2.1.3的Spring Boot版本,与我在网上找的视频版本不是很一样。
刚开始还没有遇到有js/css样式的问题,就出现了一个这样的错:
发现这个jq文件找不到,然后我去pom文件中找了一下,发现没有导入相对应的jq依赖,Springboot官方是推荐使用webjars的
[code] <!--引入jquery-webjar--> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.3.1</version> </dependency>
以及bootstrap依赖
[code] <!--引入bootstrap--> <dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>4.0.0</version> </dependency>
那么为什么要使用webjar呢?
将静态资源版本化,更利于升级和维护。
剥离静态资源,提高编译速度和打包效率。
实现资源共享,有利于统一前端开发。
可以直接去webjars的官网直接下载自己所需要版本的maven依赖:
.......本来觉得这样应该就没什么问题了,后面在进行登录的时候发现了js、css等样式丢失了,然后找了一会儿发现应该是被拦截器拦截了,然后按照1.X的版本对类SpringMVC进行了扩展,也就是如下
该方法已经过时了,然后又去观看了一下1.X和2.X的区别,这里推荐一个文章,是SpringBoot 1.X和 2.X的区别
然后在经过了百度和查询文档,发现2.X的SpringBoot已经不在使用继承WebMvcConfigurerAdapter了,而是使用实现类
实现WebMvcConfigurer接口
扩展SpringMVC需要的方法,这里有一个注解可以了解一下@EnableWebMvc
(这个注解的作用是我们自己完全掌控SpringMVC,也就是说,Spring Boot不在给我们自动添加Spring MVC的基本组件,一切都要自己手动实现。)
接着我们继续添加我们需要的方法进行重写(需要在类上实现WebMvcConfigurer),重写addInterceptors拦截器组件
首先写一个自定义拦截器类,方法空实现也行,只要拦截器的方法preHandle放行就行
[code]package com.hbsi.springbootdemo01.interceptor; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.HashMap; public class MyLoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HashMap<String, String> map = new HashMap<>(); HttpSession session = request.getSession(); Object user = session.getAttribute("loginUser"); if(user == null){ //map.put("msg","还没有登录请先登录"); request.setAttribute("msg","还没有登录请先登录"); request.getRequestDispatcher("/login").forward(request,response); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }
接着在我们的配置类中把该拦截器类添加到容器当中
[code] //添加拦截器组件bean @Bean public MyLoginInterceptor myLoginInterceptor(){ return new MyLoginInterceptor(); }
千万别忘记了在方法的头上加上@Bean注解,也别忘了在类上面加上@Configuration注解或者@Component
,不然我们的类就不是一个扩展类了。
实现addInterceptors方法
[code] //装配自定义拦截器 @Autowired private MyLoginInterceptor myLoginInterceptor; /** * 添加拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { //addPathPatterns()拦截什么目录 InterceptorRegistration registration = registry.addInterceptor(myLoginInterceptor).addPathPatterns("/**"); //注册添加拦截器 registration.excludePathPatterns("/","/login.html","/user/login", "/login","/asserts/css/**","/asserts/img/**","/asserts/js/**","/webjars/**"); //不拦截什么 }
registry.addInterceptor(myLoginInterceptor)填写我们自定义的拦截器。
addPathPatterns是拦截什么目录,这里我们拦截所有/**。
excludePathPatterns不拦截什么,放行登录注册的一些方法和页面,这里需要拦截器不拦截js、css,然后webjars我也放行了我怕万一webjars也被拦截了。
然后一起测试,webjars的jq依赖问题也解决了,js、css样式也能显示了,这里就不放图了。
后记
以上就是今天所遇到的一些问题,关于SpringBoot也是初学,对于2X还有很多都没有了解、也包括一些源码、properties文件等等,如果下次遇到了这类和版本不一样的东西也会做一些记录,时间也不早了,溜了溜了。
- Stackoverflow 打开慢或样式(CSS)无法正常显示问题
- 解决Spring boot中使用Gson,Swagger2 api-docs无法正常显示json问题
- ASP.NET Form身份验证 css和js无法正常显示问题
- 关于springboot正常启动,路由却无法正常访问的问题
- Spring Boot无法访问css,js等静态资源的问题
- 关于jquery操作iframe中内容, 无法正常显示的问题
- 关于android的webview 使用的问题 JS无法正常使用 界面切换出现白屏
- 关于CocoaPod无法升级以及无法下载第三方库和Cocoapods在OS X 10.11系统上的无法正常使用的问题
- 关于从GridView表中导出数据到Excel表中,身份证或者长度过长的数据在Excel中无法正常显示的问题
- IIS7无法显示htm/js/图片/css的问题
- django 解决css,js文件304导致无法加载显示问题
- 关于IE下验证码图片无法正常显示问题
- 关于CSS中内层使用float导致外层的背景无法显示的问题的解决方法
- 微信js-sdk:关于menuItem:delete按钮无法显示的问题
- 关于spring mvc拦截器拦截js文件等导致无法正常使用问题的解决
- 关于spring boot无法自动注入bean问题解决方案
- 解决SpringBoot 整合 FreeMaker,不能js,css静态资源的问题
- 使用springMVC后easyUI页面无法显示样式的问题
- 关于springboot 中 的freemarker无法识别问题
- ie6因为编码问题无法正常解析css文件和js文件