前几篇博客介绍的,都是MVC架构中,Servlet、Listern、*.java的抽象、解耦、复用,那V的JSP如何处理抽象和解耦?
包含
JSP虽然不能像M和C使用抽象、继承,但是它有自己的方式:包含。通过包含,可以讲JSP抽象出几个独立的部分,然后再组合起来,根据展示的不同,组合的方式也不同,从而达到各个部分之间的解耦和复用。包含又分为静态包含和动态包含。
静态包含
静态包含使用的标签是:
<%@ include file="" %>
静态包含的意思是在编译前,将页面中使用到的JSP等合并为一个,然后再编译,因为编译前合并为了一个,所以各个部件之间不能有相同的变量名。
动态包含
动态包含使用的标签是:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><jsp:include page=""></span>
动态包含是在运行期间执行包含的文件,即各个部件之间分别编译,形成多个文件,因为分别编译,它们有各自的DOM结构,当然各个部件之间的变量名可以相同。
包含测试
JSP
主体内容content.jsp
<table border="1">
<tr>
<td>col1</td>
<td>col2</td>
</tr>
<tr>
<td>col1</td>
<td>col2</td>
</tr>
</table>
头部内容header.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<h1>Header Info</</h1>
尾部内容footer.jsp
<hr>
Copyright©1989-2013
</body>
</html>
静态包含
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ include file="/header.jsp" %>
<%@ include file="/content.jsp" %>
<%@ include file="/footer.jsp" %>
编译出的类文件
合并的HTML页
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<h1>Header Info</</h1>
<table border="1">
<tr>
<td>col1</td>
<td>col2</td>
</tr>
<tr>
<td>col1</td>
<td>col2</td>
</tr>
</table>
<hr>
Copyright©1989-2013
</body>
</html>
动态包含
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ include file="/header.jsp" %>
<jsp:include page="/content.jsp"></jsp:include>
<jsp:include page="/footer.jsp"></jsp:include>
编译出的类文件
生成的HTML页
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<h1>Header Info</</h1>
<table border="1">
<tr>
<td>col1</td>
<td>col2</td>
</tr>
<tr>
<td>col1</td>
<td>col2</td>
</tr>
</table>
<hr>
Copyright©1989-2013
</body>
</html>
可以看出二者生成的HTML页是相同的,那么什么时候用动态包含?什么时候用静态包含?我的理解是:当部件之间联系较大,比如要使用相同的DOM结构、数据需要引用时,使用动态包含;当部件之间关系不大,比如是一些HTML静态内容时,动态包含和静态包含都可以。
静态包含使用
我们拿常用的EL和JSTL为例,结合上面所说,它相当于无需编译的内容,我们使用静态包含。将jstl声明写成一个单独的jsp文件,然后引用,<%@ include file="/common.jsp" %>。
common.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
这样就可以达到common.jsp的复用。
更多博客,其访问《项目总结》。