首页 > 其他分享 >深入解析Spring MVC中静态资源的放行配置

深入解析Spring MVC中静态资源的放行配置

时间:2024-08-15 11:27:33浏览次数:13  
标签:静态 Spring springframework static MVC 放行 import org 资源

深入解析Spring MVC中静态资源的放行配置

在现代Web应用开发中,静态资源的处理是一个重要环节。静态资源包括HTML、CSS、JavaScript、图片等文件,它们不需要服务器进行动态处理,直接由客户端浏览器请求并渲染。Spring MVC提供了多种方式来配置和管理静态资源,确保这些资源能够被正确地访问和加载。本文将深入探讨Spring MVC中静态资源的放行配置,包括基于XML的配置、基于Java的配置以及使用WebJars等方式。

基于XML的静态资源配置

在Spring MVC的早期版本中,静态资源的配置主要通过XML文件进行。以下是一个典型的基于XML的静态资源配置示例:

<mvc:resources mapping="/resources/**" location="/static/" />

解释:

  • <mvc:resources>标签用于配置静态资源的映射。
  • mapping属性指定URL路径模式,例如/resources/**表示所有以/resources/开头的请求都会被映射到静态资源。
  • location属性指定静态资源所在的目录,例如/static/表示静态资源存放在Web应用的/static/目录下。
基于Java的静态资源配置

随着Spring框架的发展,基于Java的配置方式逐渐成为主流。Spring MVC提供了WebMvcConfigurer接口和addResourceHandlers方法来配置静态资源。

示例代码:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
}

解释:

  • @Configuration注解表示这是一个配置类。
  • WebMvcConfigurer接口提供了多种配置方法,包括addResourceHandlers
  • addResourceHandlers方法用于添加静态资源处理器。
  • addResourceHandler方法指定URL路径模式,例如/static/**
  • addResourceLocations方法指定静态资源所在的目录,例如classpath:/static/表示静态资源存放在类路径的/static/目录下。
使用WebJars管理静态资源

WebJars是一种将前端库(如jQuery、Bootstrap)打包成JAR文件的方式,方便在Java项目中管理和使用。Spring MVC提供了对WebJars的支持,可以轻松配置和使用这些前端库。

示例代码:

  1. pom.xml文件中添加WebJars依赖:
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>
  1. 配置WebJars静态资源处理器:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

解释:

  • pom.xml文件中添加WebJars依赖,例如jquery
  • WebConfig配置类中,使用addResourceHandler方法指定URL路径模式/webjars/**
  • 使用addResourceLocations方法指定WebJars资源所在的目录classpath:/META-INF/resources/webjars/
静态资源的缓存控制

为了提高Web应用的性能,通常需要对静态资源进行缓存控制。Spring MVC提供了多种方式来配置静态资源的缓存策略。

示例代码:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.CssLinkResourceTransformer;
import org.springframework.web.servlet.resource.VersionResourceResolver;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/")
                .setCachePeriod(31556926) // 设置缓存周期为一年
                .resourceChain(true)
                .addResolver(new VersionResourceResolver()
                        .addContentVersionStrategy("/**"))
                .addTransformer(new CssLinkResourceTransformer());
    }
}

解释:

  • setCachePeriod方法设置静态资源的缓存周期,例如31556926秒(一年)。
  • resourceChain方法启用资源链,支持资源解析和转换。
  • addResolver方法添加版本资源解析器,使用内容版本策略。
  • addTransformer方法添加CSS链接资源转换器,处理CSS文件中的链接。
静态资源的压缩和优化

为了进一步提高静态资源的加载速度,可以对静态资源进行压缩和优化。Spring MVC提供了多种工具和插件来实现这一目标,例如Gzip压缩、CSS和JavaScript的合并与压缩等。

示例代码:

  1. 配置Gzip压缩:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.GzipResourceResolver;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/")
                .setCachePeriod(31556926)
                .resourceChain(true)
                .addResolver(new GzipResourceResolver());
    }
}

解释:

  • addResolver方法添加Gzip资源解析器,对静态资源进行Gzip压缩。
  1. 使用构建工具(如Gradle或Maven)进行CSS和JavaScript的合并与压缩:
plugins {
    id "com.eriwen.gradle.css" version "2.14.1"
    id "com.eriwen.gradle.js" version "2.14.1"
}

css.source {
    dev {
        css {
            srcDir "src/main/resources/static/css"
            include "*.css"
        }
    }
}

js.source {
    dev {
        js {
            srcDir "src/main/resources/static/js"
            include "*.js"
        }
    }
}

css.tasks.cssMinify {
    source = css.source.dev.css.files
    dest = "${buildDir}/resources/main/static/css"
}

js.tasks.jsMinify {
    source = js.source.dev.js.files
    dest = "${buildDir}/resources/main/static/js"
}

解释:

  • 使用Gradle插件(如com.eriwen.gradle.csscom.eriwen.gradle.js)进行CSS和JavaScript的合并与压缩。
  • 配置源文件目录和输出目录,执行构建任务生成优化后的静态资源。
结论

Spring MVC提供了多种灵活且强大的方式来配置和管理静态资源,包括基于XML的配置、基于Java的配置、使用WebJars、缓存控制、压缩和优化等。理解这些配置方式的用法和优缺点,有助于开发者更好地利用Spring MVC进行开发,提高Web应用的性能和用户体验。

希望通过本文的讲解,你对Spring MVC中静态资源的放行配置有了更深入的理解,并能在实际开发中灵活应用。

标签:静态,Spring,springframework,static,MVC,放行,import,org,资源
From: https://blog.csdn.net/xycxycooo/article/details/141196691

相关文章

  • java毕业设计-基于微信小程序的宠物服务中心平台系统,基于移动端的宠物中心系统,基于jav
    文章目录前言演示视频项目背景项目架构和内容获取(文末获取)具体实现截图用户前台管理后台技术栈具体功能模块设计系统需求分析可行性分析系统测试为什么我?关于我我自己的网站项目相关文件前言博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务阶段4】任务阶段1、2、3链接一、实现任务阶段1-编写自己Spring容器,实现扫描包,得到bean的class对象二、实现任务阶段2-扫描将bean信息封装到BeanDefinition对象,并......
  • SpringMVC流程
    SpringMVC流程 主要组件:DispatcherServlet:SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它处理和分发。HandlerMapping:SpringMVC提供,我们需要进行IoC配置,使其加入到IoC容器。它内部缓存handler(controller方法),和handler访问路径数......
  • spring cloud面试题
    什么是SpringCloud?SpringCloud是一个微服务框架,‌它提供了全套的分布式系统解决方案。使用SpringCloud有什么优势将单体服务拆分所带来的问题:-服务实例太多怎么办-服务调用关系太杂乱怎么办-服务访问出错了怎么办-配置信息散落在各个服务中怎么办-服务调用链路......
  • 基于SpringBoot+MySQL+SSM+Vue.js的药房药品采购系统(附论文)
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描述基于SpringBoot+MySQL+SSM+Vue.js的药房药品采购系统(附论文......
  • 基于SpringBoot+MySQL+SSM+Vue.js的旅游咨询系统
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描述基于SpringBoot+MySQL+SSM+Vue.js的旅游咨询系统,用户,管理......
  • [NSSCTF 2022 Spring Recruit]ezgame
    首先查看本题描述:js分析,源码泄露,信息收集,大致了解了题的解法方向,进入题目页面查看一下,是一个射击游戏,查看源码发现要获得65分才能拿到成绩,一般来说这种游戏基本不可能拿到给定的分数,通常是对源码进行分析然后用bp抓包改包以此来进行分数获得。 结合前面题解的描述,我们先对js文......
  • Springboot项目中的VO包
    在SpringBoot项目中,VO(ValueObject)是一个非常重要的概念。VO代表值对象,它用于封装业务逻辑中的数据,并且在应用程序的不同层之间进行传递。VO在SpringBoot项目中起到了很多重要的作用,下面我们来详细讲解一下。数据封装:VO用于封装业务逻辑中的数据。在一个典型的SpringBoo......
  • Spring Boot的配置文件管理技巧
    SpringBoot的配置文件管理技巧大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!SpringBoot的配置文件管理是实现不同环境配置和快速部署的关键。SpringBoot提供了多种方式来管理配置文件,以下是一些有效的管理技巧。1.配置文件的命名SpringBoot......
  • Spring Boot集成Spring Data JPA进行数据库操作
    SpringBoot集成SpringDataJPA进行数据库操作大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!SpringDataJPA是一个用于简化数据库操作的ORM(对象关系映射)框架,它提供了一套统一的API来访问数据库,而无需编写大量的JDBC代码。SpringBoot与SpringDat......