SpringMVC资源处理器
- 自定义ServletConfig类,这种方式使得Spring MVC的配置更加灵活和方便,特别是当你想避免使用传统的
web.xml
文件时。 - Spring的配置文件我们定义了Spring[]{"/"}
- 表示spring会拦截所有访问请求
- 但是我们的前端页面不需要被拦截,因此我们需要自定义一个资源处理器
- 添加SpringMVCConfig配置类的包扫描
- 自定义一个SpringMvcSupport类处理访问的资源
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins");
}
}
再mvc中我们需要自定义资源处理器。这段代码定义了一个名为SpringMvcSupport
的配置类,它继承WebMvcConfigurationSupport
。WebMvcConfigurationSupport
是Spring MVC中用于提供自定义配置的基类,允许你覆盖默认的Spring MVC配置。SpringMvcSupport
类通过覆盖addResourceHandlers
方法来配置静态资源的处理。
addResourceHandlers
方法用于向Spring MVC中添加资源处理器,这些处理器定义了哪些URL路径被映射到哪些资源位置。这对于将静态资源(如HTML、CSS、JavaScript文件、图片等)提供给客户端是非常有用的。
具体来说,这段代码配置了以下静态资源的映射:
-
/pages/**
路径下的请求被映射到/pages/
目录下的资源。这意味着,如果你的应用部署在服务器上,并且/pages/
目录下有一个名为index.html
的文件,那么通过访问http://yourserver.com/pages/index.html
,你就可以看到这个页面。 -
/css/**
路径下的请求被映射到/css/
目录下的资源。这允许你通过URL如http://yourserver.com/css/style.css
来访问style.css
文件。 -
/js/**
路径下的请求被映射到/js/
目录下的资源。这允许你通过URL如http://yourserver.com/js/script.js
来访问script.js
文件。 -
/plugins/**
路径下的请求被映射到/plugins/
目录下的资源。这允许你通过URL如http://yourserver.com/plugins/someplugin.js
来访问插件或其他资源。
注意,这些路径和位置都是相对于Servlet容器的根目录(通常是应用的部署目录)的。但是,在实际部署时,这些资源文件通常会放在应用的WEB-INF
目录之外,以确保它们可以直接通过Web服务器访问,而无需经过Servlet容器处理。
与SpringBoot比较
在Spring Boot应用中,这些资源文件通常放在src/main/resources/static
、src/main/resources/public
、src/main/resources/META-INF/resources
或src/main/webapp
(对于打包为WAR的情况)等目录中,Spring Boot会自动为它们配置资源映射。
此外,使用Spring Boot,并且只是想要简单地添加静态资源映射,通常不需要继承WebMvcConfigurationSupport
并覆盖addResourceHandlers
方法。Spring Boot提供了自动配置,你可以通过简单的目录结构来管理静态资源。
然而,如果你需要更复杂的配置(比如添加资源处理器或修改默认的静态资源路径),那么继承WebMvcConfigurationSupport
是一个可行的选择。但请注意,这样做会禁用Spring Boot的自动配置,因此你可能需要手动配置其他Spring MVC特性。