如何在Maven/Spring项目的commons包中共享JSP视图?
在Maven/Spring多子项目中复用commons包的JSP视图
完全不用把共享JSP复制到每个子项目的WEB-INF目录,直接把错误页这类通用视图放进commons包,就能让所有子项目复用,具体实现步骤和注意事项如下:
1. 调整commons包的目录结构
把共享JSP放在commons包的src/main/resources/META-INF/resources/WEB-INF/jsp/路径下,比如把错误页命名为error.jsp放在这里。Maven打包时,这些文件会被打包进JAR包的META-INF/resources目录下,而Servlet容器会自动扫描这个路径加载Web资源。
2. 配置子项目的Spring MVC视图解析器
在每个子项目的Spring配置里,让视图解析器能匹配到commons包中的JSP:
- 若用XML配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
Servlet容器会同时扫描子项目本地WEB-INF和commons包JAR里的META-INF/resources/WEB-INF路径,所以直接用/WEB-INF/jsp/作前缀就能匹配到commons包里的JSP。
- 若用properties配置:
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
3. 确认commons包的依赖范围
在子项目的pom.xml里,commons包的依赖范围保持默认的compile即可,这样打包时commons包会被包含到子项目的WEB-INF/lib中,容器才能找到里面的JSP资源。
关键注意事项
- 避免文件名冲突:如果子项目本地有和commons包同名的JSP,子项目的本地文件会优先被加载。可以给共享JSP单独建子目录(比如
/WEB-INF/jsp/common/error.jsp),然后在视图解析器前缀里加上这个子目录,或者确保共享JSP命名唯一。 - 版本要求:这种方式需要Servlet 3.0及以上版本,Spring Boot项目默认满足,传统Spring MVC项目要确认
web.xml里声明的Servlet版本≥3.0。 - 开发阶段热更新:修改commons包中的JSP后,需要重新打包commons包并更新子项目依赖,才能看到修改效果,可结合Maven的
install命令和IDE自动同步优化流程。
内容的提问来源于stack exchange,提问作者Nathan S
相关产品推荐
相关产品推荐

