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

本文讲述了在Spring Boot 2.1.3版本中遇到的js、css样式丢失问题,以及如何解决。通过引入webjars解决静态资源依赖,然后探讨了Spring Boot 1.x与2.x在SpringMVC扩展上的差异,不再使用WebMvcConfigurerAdapter,而是实现WebMvcConfigurer接口,并展示了如何添加自定义拦截器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天搞了一下Spring Boot,使用自动生成的,现在自动生成都是2.1.3的Spring Boot版本,与我在网上找的视频版本不是很一样。

刚开始还没有遇到有js/css样式的问题,就出现了一个这样的错:

发现这个jq文件找不到,然后我去pom文件中找了一下,发现没有导入相对应的jq依赖,Springboot官方是推荐使用webjars的

       <!--引入jquery-webjar-->
		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>jquery</artifactId>
			<version>3.3.1</version>
		</dependency>

以及bootstrap依赖

     <!--引入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放行就行

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 {

    }
}

接着在我们的配置类中把该拦截器类添加到容器当中

    //添加拦截器组件bean
    @Bean
    public MyLoginInterceptor myLoginInterceptor(){
        return new MyLoginInterceptor();
    }

 千万别忘记了在方法的头上加上@Bean注解,也别忘了在类上面加上@Configuration注解或者@Component

,不然我们的类就不是一个扩展类了。

实现addInterceptors方法

    //装配自定义拦截器 
 @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文件等等,如果下次遇到了这类和版本不一样的东西也会做一些记录,时间也不早了,溜了溜了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值