当前位置: 首页 > wzjs >正文

网站设为首页代码鹤壁做网站的网络公司

网站设为首页代码,鹤壁做网站的网络公司,删除百度收录网站,唐山网站制作app文章目录 Spring MVC 处理静态资源请求 - ResourceHandler一、Spring MVC 处理静态资源的背景和机制二、配置静态资源处理器的方法1、Java 配置方式(推荐)2、XML 配置方式 三、静态资源的存放位置 Spring MVC 处理静态资源请求 - ResourceHandler 一、S…

文章目录

  • Spring MVC 处理静态资源请求 - ResourceHandler
    • 一、Spring MVC 处理静态资源的背景和机制
    • 二、配置静态资源处理器的方法
      • 1、Java 配置方式(推荐)
      • 2、XML 配置方式
    • 三、静态资源的存放位置

Spring MVC 处理静态资源请求 - ResourceHandler

一、Spring MVC 处理静态资源的背景和机制

  • 在 Web 应用中,除了动态内容(如通过 Controller 处理的请求返回的视图)外,还包含大量的静态资源,如 HTML 文件、CSS 文件、JavaScript 文件、图片等。
  • Spring MVC 默认不会处理静态资源请求,因为它主要是为处理动态请求设计的。如果直接使用 Spring MVC 的默认配置来处理静态资源,会因为找不到对应的 Controller 处理方法而报 404 错误。
  • Spring MVC 提供了多种方式来处理静态资源。一种常见的方式是通过配置资源处理器(ResourceHandler),它可以将特定路径的请求映射到服务器上的物理资源目录。

二、配置静态资源处理器的方法

有两种主要方式配置静态资源处理器:

1、Java 配置方式(推荐)

通过继承 WebMvcConfigurerAdapter(Spring 4.x) 或实现 WebMvcConfigurer(Spring 5.x+),重写 addResourceHandlers 方法。

方式一:继承 WebMvcConfigurerAdapter(Spring 4.x)

// 导入Spring框架相关的包
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** WebMvcConfig类用于配置Spring MVC的相关设置,特别是静态资源的处理* 该类通过继承WebMvcConfigurerAdapter并使用@Configuration注解成为一个配置类*/
@Configuration  // 表明这是一个配置类,相当于一个XML配置文件
@EnableWebMvc   // 启用Spring MVC的高级配置特性
public class WebMvcConfig extends WebMvcConfigurerAdapter {/*** 重写addResourceHandlers方法,配置静态资源的处理* @param registry 资源处理器注册器,用于注册资源处理的规则*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 添加一个资源处理器// addResourceHandler("/static/**") 表示所有以/static/开头的请求路径都会被这个处理器处理// addResourceLocations("classpath:/static/") 表示这些静态资源实际存放在类路径下的static目录中// 例如,请求路径为/static/js/main.js的资源会从classpath:/static/js/main.js加载registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");// 可添加多个映射规则registry.addResourceHandler("/images/**").addResourceLocations("file:/path/to/images/"); // 从文件系统加载// 调用父类的方法,确保其他默认的资源处理规则仍然生效super.addResourceHandlers(registry);}
}

方式二:实现 WebMvcConfigurer(Spring 5.x+)

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 映射 /static/** 路径到类路径下的 static 目录registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");// 可添加多个映射规则registry.addResourceHandler("/images/**").addResourceLocations("file:/path/to/images/"); // 从文件系统加载}
}

ResourceHandlerRegistry 如何获取到?

在上面的两个示例中,我们会看到重写 addResourceHandlers 方法的入参是:ResourceHandlerRegistry,这个参数又是如何获取到的呢?

其实,在 Spring 框架中,ResourceHandlerRegistry 参数是由 Spring 容器在运行时自动创建并传递给配置方法的。这一过程基于 Spring 的依赖注入机制和配置类处理流程,具体如下:
(1)Spring 容器的初始化流程

当应用启动时,Spring 会:

  1. 扫描配置类:通过 @Configuration 注解发现WebMvcConfig类。
  2. 创建配置类实例:将WebMvcConfig作为 Spring Bean 管理。
  3. 处理配置方法:调用被@Override标记的配置方法(如 addResourceHandlers)。

(2)参数注入机制
当 Spring 调用 addResourceHandlers(ResourceHandlerRegistry registry) 方法时:

  • 自动创建 Registry 对象:Spring 会创建一个ResourceHandlerRegistry实例,用于收集和注册资源处理器规则。
  • 注入到方法参数:将这个实例作为参数传递给 addResourceHandlers 方法。
  • 方法内部配置:你在方法中调用registry.addResourceHandler(…)时,实际上是在修改这个由 Spring 管理的ResourceHandlerRegistry对象的内部状态。

(3)幕后原理
这一过程依赖于 Spring 的工厂模式和构建器模式:

  • ResourceHandlerRegistry是一个构建器,用于收集资源映射规则。
  • Spring 通过工厂创建这个构建器,并在配置类中提供给你使用。
  • 当配置方法执行完毕后,Spring 会根据ResourceHandlerRegistry中收集的规则,生成实际的HandlerMapping(处理静态资源请求的组件)。

(4)代码示例理解
以下是一个简化的示例,展示 Spring 可能如何内部处理这个过程(实际实现更复杂):

// 伪代码,展示Spring内部处理流程
public class SpringApplication {public void run() {// 1. 创建配置类实例WebMvcConfig config = new WebMvcConfig();// 2. 创建ResourceHandlerRegistryResourceHandlerRegistry registry = new ResourceHandlerRegistry();// 3. 调用配置方法,注入registryconfig.addResourceHandlers(registry);// 4. 使用registry中收集的规则,创建HandlerMappingHandlerMapping resourceHandlerMapping = registry.buildHandlerMapping();// 5. 将HandlerMapping注册到Spring MVC的处理器链中registerHandlerMapping(resourceHandlerMapping);}
}

2、XML 配置方式

在spring-mvc.xml中配置:

<mvc:resources mapping="/static/**" location="classpath:/static/"/>
<mvc:resources mapping="/images/**" location="file:/path/to/images/"/>

三、静态资源的存放位置

当使用 addResourceLocations 方法时,可以指定多个资源位置,这些位置可以是类路径下的目录(使用 “classpath:” 前缀),也可以是服务器文件系统的绝对路径(如 “file:/path/to/resource/”)。例如,addResourceLocations(“classpath:/static/”,“file:/opt/static/”),这样当请求 “/static/style.css” 时,会先在类路径下的 “static” 目录查找,如果找不到,再在 “/opt/static/” 目录查找。

静态资源通常存放在以下位置:

  • 类路径下的static目录(默认位置):src/main/resources/static
  • 类路径下的public目录:src/main/resources/public
  • 类路径下的resources目录:src/main/resources/resources
  • 类路径下的META-INF/resources目录:src/main/resources/META-INF/resources

Spring MVC 会按上述顺序查找资源,直到找到为止。


文章转载自:

http://O5xzRaKs.mzqhb.cn
http://5wzWDWSV.mzqhb.cn
http://prJCAk9G.mzqhb.cn
http://jFTecyy1.mzqhb.cn
http://ihyrrCKU.mzqhb.cn
http://ECbNqkX0.mzqhb.cn
http://MMCEhSdg.mzqhb.cn
http://s9ILsM28.mzqhb.cn
http://z3PZoorv.mzqhb.cn
http://Ed1Vns59.mzqhb.cn
http://Ar2WHzRD.mzqhb.cn
http://WRUJtnXH.mzqhb.cn
http://B9qLwNYO.mzqhb.cn
http://8ZNNutjW.mzqhb.cn
http://GKw5e4sJ.mzqhb.cn
http://L5kT4DrR.mzqhb.cn
http://d3K5UKpE.mzqhb.cn
http://siqyHAPC.mzqhb.cn
http://kedp5HfA.mzqhb.cn
http://gnRP1qVd.mzqhb.cn
http://s8ERJIRl.mzqhb.cn
http://AsnZaEd4.mzqhb.cn
http://enIu7NnY.mzqhb.cn
http://zDy61min.mzqhb.cn
http://SxHtPhbw.mzqhb.cn
http://4v7l2Z32.mzqhb.cn
http://t13UmVAR.mzqhb.cn
http://ZuPVgWe3.mzqhb.cn
http://7LAAYbvi.mzqhb.cn
http://tCXUO6VX.mzqhb.cn
http://www.dtcms.com/wzjs/753878.html

相关文章:

  • 利用小程序反向做网站圣都装饰的口碑怎么样
  • 锁定网站导航栏北京做网站建设的公司哪家好
  • 做百度网站营业执照用注销吗app开发官网
  • 乌尔禾区做网站哪里好泉州制作网站设计
  • 在网上做兼职美工有哪些网站宁波网站建设推广平台
  • 上海中艺建设集团网站品牌网络seo方案外包
  • 好看网电影网站模板免费下载wordpress首页文件
  • 温州网站建设有限公司软件开发专业信息
  • 静态展示网站多少钱谷歌浏览器下载安装2022最新版
  • 网站建设前期上海网站搭建公司哪家好
  • 代理网站备案表wordpress 首页缓存
  • 音乐网站功能自己在家可以做网站吗
  • 网站系统繁忙怎么办vc6.0做网站
  • 河北建设信息平台网站网站导航字体大小
  • 网站建设人员培训asp网站作业下载
  • 做企业网站的尺寸是多少站长素材官网免费
  • 数码网站建设总体目标推广计划表格
  • 网站自适应屏幕云服务器可以用来做网站么
  • seo网站优化平台芜湖的网站建设公司
  • 海外网站建设推广app开发软件外包
  • 美容加盟网站建设注册公司那家网站做的比较好
  • 网站首页动画代码网站查外链
  • 简单的网站注册流程图大同市建设工程招标投标网站
  • 小榄网站长沙网络公司排行榜
  • 万网企业邮箱登陆界面如何嵌入到自己的网站做网站都需要买什么
  • 什么样的网站利于优化网站开发最新流程
  • 免费crm系统下载杭州seo搜索引擎优化公司
  • 杭州市城乡规划局建设局官方网站专业教育网站建设
  • 有了域名和空间怎么做网站内容太原专业做网站
  • 模拟ip访问网站深圳网站建设网站设计软文推广