如何复用支持HTML插入的JSP文件作为模板批量创建页面
JSP模板复用插入自定义正文的实现方案
以下是三种不同复杂度的实现方案,可根据项目场景选择:
方案1:JSP标签文件(原生无依赖,最推荐)
JSP 2.0及以上版本原生支持标签文件功能,无需引入额外依赖即可实现模板继承,是目前最优的原生解决方案:
- 第一步:在项目
WEB-INF目录下新建tags文件夹,将你的基础模板保存为baseLayout.tag,示例内容如下:
<%@ tag language="java" pageEncoding="UTF-8" %> <!-- 定义必填的正文片段属性 --> <%@ attribute name="bodyContent" fragment="true" required="true" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- 通用样式、公共meta标签统一放在这里 --> </head> <body> <!-- 公共页头区域 --> <header> 站点导航、logo、登录入口等公共内容 </header> <!-- 自定义正文插入位置 --> <main> <jsp:invoke fragment="bodyContent"/> </main> <!-- 公共页脚区域 --> <footer> 版权信息、备案号、站点地图等公共内容 </footer> </body> </html>
- 第二步:在业务JSP文件中直接引用模板,插入自定义正文即可,示例
article.jsp代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- 引入自定义标签目录 --> <%@ taglib prefix="t" tagdir="/WEB-INF/tags" %> <t:baseLayout> <jsp:attribute name="bodyContent"> <!-- 这里写入当前页面专属的正文内容 --> <h1>文章标题</h1> <p>这是当前页面独有的正文内容,会自动插入到模板的正文区域</p> </jsp:attribute> </t:baseLayout>
你还可以通过新增attribute标签扩展自定义参数,比如页面标题、专属CSS引入等,灵活性很高。
方案2:拆分引入公共头尾(适合简单/老旧项目)
如果你的项目是不支持标签文件的老版本JSP,可以把模板拆成头尾两个单独文件分别引入:
- 第一步:把原模板的页头代码保存为
/WEB-INF/common/header.jsp,页脚代码保存为/WEB-INF/common/footer.jsp - 第二步:业务JSP中分别引入头尾,中间写入正文即可:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- 引入公共页头 --> <jsp:include page="/WEB-INF/common/header.jsp"/> <!-- 这里写入当前页面的正文内容 --> <h1>产品列表</h1> <div class="product-list"> 产品卡片等业务内容 </div> <!-- 引入公共页脚 --> <jsp:include page="/WEB-INF/common/footer.jsp"/>
该方案实现简单,但扩展性较差,每个页面都需要手动引入两次公共文件。
方案3:布局框架(适合中大型项目)
如果项目规模较大,页面结构复杂,可以选择成熟的布局框架实现更灵活的模板管理:
- Apache Tiles:专门针对JSP生态的布局管理框架,支持嵌套模板、多区块自定义,非常适合页面结构统一的站点使用
- 若项目使用Spring MVC等框架,也可以考虑切换为Thymeleaf等支持布局功能的模板引擎,开发效率更高
内容的提问来源于stack exchange,提问作者Максим Ахмеров
相关产品推荐
相关产品推荐

