您的位置:首页 > 编程语言 > Java开发

Spring Boot 2.X关于js、css无法正常显示样式以及Springboot1.X和Springboot2.X的SpringMVC扩展类问题

2019-04-02 00:57 1116 查看

今天搞了一下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依赖:

https://www.webjars.org/官网

.......本来觉得这样应该就没什么问题了,后面在进行登录的时候发现了js、css等样式丢失了,然后找了一会儿发现应该是被拦截器拦截了,然后按照1.X的版本对类SpringMVC进行了扩展,也就是如下

该方法已经过时了,然后又去观看了一下1.X和2.X的区别,这里推荐一个文章,是SpringBoot 1.X和 2.X的区别

Spring Boot 1.X和Spring Boot 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文件等等,如果下次遇到了这类和版本不一样的东西也会做一些记录,时间也不早了,溜了溜了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: