You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于注解的Spring Web MVC项目中如何在JSP中显示图片?

全注解Spring MVC项目中配置静态资源(图片显示)的解决方案

嘿,我来帮你搞定NetBeans里全注解Spring项目的图片显示问题!既然你用WebApplicationInitializer来配置DispatcherServlet,那静态资源的配置也得用纯注解方式,不能依赖XML的<mvc:resources>标签。下面是一步步的实现方法:

1. 创建/修改Spring MVC配置类

首先你需要一个带@EnableWebMvc注解的配置类,实现WebMvcConfigurer接口,重写addResourceHandlers方法来映射静态资源路径——这个方法就是XML配置里<mvc:resources>的注解等价写法。

假设你的图片放在src/main/resources/static/images/目录下(Maven项目标准结构),配置类代码如下:

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 WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 配置前端访问路径 -> 对应资源的实际存储路径
        registry.addResourceHandler("/images/**")  // 前端通过http://xxx/images/xxx.jpg访问
                .addResourceLocations("classpath:/static/images/");  // 资源实际在项目里的位置
    }
}

如果你的项目是传统非Maven的Web项目(NetBeans里的Web Application项目),图片放在web/images/目录下,那addResourceLocations改成"/images/"即可:

registry.addResourceHandler("/images/**")
        .addResourceLocations("/images/");

2. 在AppInit中注册配置类

接下来要确保你的配置类被加载到Spring容器里,在你现有的AppInit类里,把配置类注册到AnnotationConfigWebApplicationContext中:

public class AppInit implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        // 注册你的WebMvcConfig配置类,其他业务配置类也可以在这里添加
        ctx.register(WebMvcConfig.class);
        ctx.setServletContext(container);

        // 配置DispatcherServlet
        ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(ctx));
        dispatcher.setLoadOnStartup(1);
        // 这里映射路径用"/"就好,不要用"/*",否则会拦截所有请求导致静态资源处理失效
        dispatcher.addMapping("/");
    }
}

3. 正确引用图片

配置完成后,在前端页面里引用图片时,要使用正确的路径:

  • 如果你用JSP:
<img src="${pageContext.request.contextPath}/images/your-image.jpg" alt="示例图片" />
  • 如果你用Thymeleaf:
<img th:src="@{/images/your-image.jpg}" alt="示例图片" />

常见坑点提醒

  • 别漏加@EnableWebMvc注解,否则WebMvcConfigurer的配置不会生效
  • DispatcherServlet的映射路径别写成/*,用/就足够,/*会覆盖容器默认的静态资源处理逻辑
  • 在NetBeans里,要确认你的资源目录被正确识别:Maven项目的src/main/resources要标记为Resources Root,传统Web项目的web目录要标记为Web Root,不然资源不会被打包到部署文件里

内容的提问来源于stack exchange,提问作者turing042

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:23:24