定义
在Web开发中,静态资源指的是那些在服务器端不需要动态生成,可以直接提供给客户端的资源,如HTML、CSS、JavaScript、图片、字体等文件。这些资源通常都是一些静态的文件,不需要依赖后端程序的计算和处理,客户端可以直接访问和使用这些资源。
在Spring Boot中,静态资源通常被放置在“classpath:/static/”或“classpath:/public/”或“classpath:/resources/”目录下。Spring Boot提供了一些默认的静态资源处理路径,例如:
/webjars/**: 对应Maven仓库中的WebJars资源
/META-INF/resources/**: 对应JAR包中的资源
/resources/, /static/, /public/**: 对应应用程序中的资源
Spring Boot的静态资源处理器会自动搜索并处理这些目录下的静态资源文件,然后将它们暴露给Web应用程序的客户端。可以通过在控制器中使用@RequestMapping注解来映射到静态资源文件,例如:
@Controller
public class MyController {
@RequestMapping("/myresource")
public String myResource() {
return "index.html";
}
}
当访问“/myresource”路径时,Spring Boot会将该路径映射到“
classpath:/static/index.html”文件,然后将其返回给客户端。
修改静态资源路径
在spring boot 中可以通过配置类,修改默认静态资源指定的目录
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//必须加"/",不然映射不到
String staticFolderPath = "D:/test/";
//通过/static/ 进行访问静态资源
registry.addResourceHandler(String.format("/%s/**", "static"))
.addResourceLocations("file:" + staticFolderPath);
}
}
程序把“D:/test”目录作为静态资源的目录,static作为访问地址。这样我们就可以通过"http://ip:port/static/.."访问D:/test目录下的资源了。
注意:目录后必须加上“/”否则不能正确访问
配置多个静态资源路径
如果需要配置多个静态资源路径,可以通过以下方式进行配置:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");
}
}
这将把静态资源分别放置在“/static”和“/assets”目录下。
访问静态资源原理
在Spring Boot中,静态资源的处理是通过
ResourceHttpRequestHandler来实现的。
ResourceHttpRequestHandler是一个处理静态资源请求的处理器,它可以将请求映射到本地文件系统或类路径资源。当Spring Boot应用接收到静态资源请求时,DispatcherServlet会将请求转发到
ResourceHttpRequestHandler进行处理。
ResourceHttpRequestHandler会使用ResourceResolver来解析请求的资源路径,并使用ResourceLoader来加载资源。如果找到了请求的资源,
ResourceHttpRequestHandler会使用HttpServletResponse将该资源返回给客户端。如果请求的资源不存在,
ResourceHttpRequestHandler会返回一个404错误响应。