1.为啥要使用
在开发jsp页面时,有很多网页使用的部分页面结构相同,这些相同的页面结构不仅添加时每个页面都要添加,而且如果要修改这些相同的地方都要修改,给开发及维护带来了工作量。
通过面向对象的问题思考问题:如果相同的部分抽离出来,使用继承的关系,基本的有父类定义,子类可以重写父类的变化的内容。父类可以有多个子类,子类只有一个父类,子类可以有很多子类,这样多层次的继承,可以解决以上问题。
对于页面也是一样,如果把相同的部分页面结构抽离成一个父页面,使用到这个页面的子页面就可以继承这个父页面,可以覆盖自己与主页面不同的页面内容,也可以自己定义让子页面的子页面覆写。添加时 只要引入父页面并修改针对自己的内容就行不再关心相同的页面结构。在要修改相同页面结构时只要修改父页面内容,其下面引用的子孙页面都会得到相应的更新。
2.寻找答案
下面介绍一下用的到这种技术:rapid中的一种功能 原理和上面说的差不多
3.使用rapid
我主要用在了jsp页面中,所以只介绍下在jsp中的使用 所需要引入的jar 包:
rapid-core-4.0.jar
<dependency>
<groupId>com.googlecode.rapid-framework</groupId>
<artifactId>rapid-core</artifactId>
<version>4.0.5</version>
</dependency>
因为这个功能主要在jsp页面中使用的,所以使用的标签库方式来实现的,因此先在jsp中引用标签库
<%@taglib uri=“http://www.rapid-framework.org.cn/rapid” prefix=“rapid” %>
主要页面:base.jsp child.jsp grandChildA.jsp grandChildB.jsp
先来看base.jsp即父页面 ,页面中使用了rapid:block定义了四个可以让子页面重写的内容块 head top content footer
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<rapid:block name="head">
<title>base head</title>
</rapid:block>
</head>
<body>
<rapid:block name="top">
base top
</rapid:block>
<rapid:block name="content">
base content
</rapid:block>
<rapid:block name="footer">
base footer
</rapid:block>
</body>
</html>
base.jsp生成后的页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>base head</title>
</head>
<body>
base top
base content
base footer
</body>
</html>
下面是child.jsp这里面使用include引用了base.jsp,这样代表了直接使用了base.jsp页面,又使用rapid:override重写了header和content,并在content创建了一个mychild内容块
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<rapid:override name="head">
<title>child head</title>
</rapid:override>
<rapid:override name="content">
child content
<rapid:block name="mychild">
child mychild
</rapid:block>
</rapid:override>
<%@include file="base.jsp" %>
注意:<%@include file=“base.jsp” %>应写在代码末尾:可能是在加载 base.jsp 文件是会先去查看本页面的 name ,如果本页面没有,则去找父页面的 name(本人猜测,具体还未查明,如有了解的小伙伴,请望告知)
child.jsp生成后的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<span style="white-space:pre"> </span><title>child head</title>
</head>
<body>
<span style="white-space:pre"> </span>base top
child content
<span style="white-space:pre"> </span>base footer
</body>
</html>
原文链接:https://blog.csdn.net/zghwaicsdn/article/details/40719259