JSP页面无法访问resources目录下资源的问题求助
无法访问resources目录下静态资源的解决方案
尝试使用绝对路径、相对于resources目录的路径等多种方式,仍无法访问该目录下的资源,核心问题出在main.jsp的图片路径配置上:
main.jsp代码
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> Simple Title </title> <link href = "css/style.css" rel="stylesheet" type="text/css"> </head> <body> <header> <img class = "avatar" src = "images/skyrim-logo.png" alt = "avatar"> <!-- 此行存在问题 --> <span class = "header-info"> ... some info ... </span> </header> <div class="container"> <div class="container-header"> Enter point coordinates </div> </div> </body> </html>
项目结构

Target目录结构

问题原因
src/main/resources目录下的资源会被编译到WEB-INF/classes目录中,而WEB-INF下的内容默认无法直接通过浏览器URL访问,所以直接用相对路径images/skyrim-logo.png无法找到资源。
解决方法
方法1:调整静态资源存放位置(推荐)
将css、images等静态资源直接放到webapp目录下(与WEB-INF同级),然后修改jsp中的路径为:
<link href="${pageContext.request.contextPath}/css/style.css" rel="stylesheet" type="text/css"> <img class="avatar" src="${pageContext.request.contextPath}/images/skyrim-logo.png" alt="avatar">
${pageContext.request.contextPath}会自动获取项目的上下文根路径,避免因部署路径变化导致的路径错误。
方法2:配置静态资源映射(适用于必须放在resources目录的场景)
如果是Spring MVC项目,在XML配置文件中添加静态资源映射:
<mvc:resources mapping="/images/**" location="classpath:/images/"/> <mvc:resources mapping="/css/**" location="classpath:/css/"/>
如果是Spring Boot项目,添加配置类:
@Configuration public class WebResourceConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 映射images路径到resources下的images目录 registry.addResourceHandler("/images/**") .addResourceLocations("classpath:/images/"); // 映射css路径到resources下的css目录 registry.addResourceHandler("/css/**") .addResourceLocations("classpath:/css/"); } }
配置完成后,jsp中的路径同样使用${pageContext.request.contextPath}/images/skyrim-logo.png即可访问资源。
内容的提问来源于stack exchange,提问作者grxuau
相关产品推荐
相关产品推荐

