如果jsp不使用继承方式开发,而是用标准的指令或动作元素去include,实在是太多重复代码。
rapid-framework是谷歌的一个项目,可以实现jsp网页的继承,也就是书写模板页。
但是在maven上的最新版本是4.0.5,最新维护时间是2011年,不知道是用的人实在不多,还是项目结束了,困惑中。。。所以关于jsp模板继承还没找到更简单的方式。
这个让我想到jstl标准标签库,也是最新维护时间2011年。是真的跟不上时代步伐,还是这些库已经达到预期功能,所以不再维护了。一直困惑中,本人的原因对于长时间不维护的项目不是太敢用,网上也没找到很好的答案(为什么不再维护了)。
下面是rapid的maven地址:不过按照maven的方式添加依赖,会自动添加很多jar库。
<!-- https://mvnrepository.com/artifact/com.googlecode.rapid-framework/rapid-core -->
<dependency>
<groupId>com.googlecode.rapid-framework</groupId>
<artifactId>rapid-core</artifactId>
<version>4.0.5</version>
</dependency>
经过测试,直接下载rapid-core.jar单个文件放在lib下也可。
模板页的写法:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %>
<!DOCTYPE HTML>
<html>
<head>
<rapid:block name="head"></rapid:block>
<link href="../css/common.css" rel="stylesheet">
</head>
<body>
<div>
<rapid:block name="body"></rapid:block>
</div>
<div>
<rapid:block name="foot"></rapid:block>
</div>
</body>
</html>
继承页面的写法:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %>
<rapid:override name="head">
<title>登录</title>
</rapid:override> <rapid:override name="body">
<p>controller传递的值:${userName}</p>
</rapid:override> <jsp:include page="../index.jsp" flush="true"></jsp:include>
注意:include动作元素要放在最后,不能放在前面,否则不能正常工作。