Java1.8+JSF+Spring MVC+Weblogic项目遇StackOverflowError且图片加载失败
解决Weblogic 12.2.1.4中JSF图片加载引发的StackOverflowError问题
问题描述
基于Java 1.8、JSF、Spring MVC和Weblogic 12.2.1.4的Web项目,编译发布均正常,但页面导航时抛出java.lang.StackOverflowError。错误日志指向类加载器getResources方法递归调用导致栈溢出,最终定位问题为Weblogic无法正确加载页面中的图片,图片引用代码如下:
<img style="width:80px;" src="#{facesContext.externalContext.requestContextPath}/resources/images/project/project.gif" />
解决方案
使用JSF原生资源标签加载图片
放弃手动拼接路径的方式,改用JSF的<h:graphicImage>标签,利用其自带的资源加载机制规避类加载器冲突:<h:graphicImage style="width:80px;" name="images/project/project.gif" library="project" />需确保资源目录结构为
WebContent/resources/project/images/project/project.gif,符合JSF资源库的规范要求。调整Weblogic资源加载配置
在项目的weblogic.xml中添加如下配置,明确静态资源处理规则,避免类加载器递归调用:<container-descriptor> <prefer-web-inf-classes>false</prefer-web-inf-classes> <resource-reload-check-secs>0</resource-reload-check-secs> </container-descriptor> <context-root>/你的项目根路径</context-root>校验资源路径与文件存在性
确认图片文件确实存在于WEB-INF/resources/images/project/目录下,文件名及路径大小写需与代码完全匹配(Weblogic对路径大小写敏感)。放行Spring MVC静态资源拦截
若Spring MVC配置了全局请求拦截,需在spring-servlet.xml中添加静态资源放行规则:<mvc:resources mapping="/resources/**" location="/resources/" />
内容的提问来源于stack exchange,提问作者Homselan
相关产品推荐
相关产品推荐

