基于注解的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
相关产品推荐
相关产品推荐

