我们都知道在JSP中include有两种形式分别是
<%@ include file= %>
<jsp:include page= flush=true/>
前者是指令元素后者是动作元素具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题下面一起来看看吧
通常当应用程序中所有的页面的某些部分(例如标题页脚和导航栏)都相同的时候我们就可以考虑用include具体在哪些时候 用<%@ include file= %>哪些时候用< jsp:include page= flush=true/>这种形式首先要明白的是它们之间的区别只有了解了它们用法的不同才 理解该在何时去用以及如何选择
<%@ include file= %>jsp的include指令元素读入指定页面的内容并把这些内容和原来的页面融合到一起(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的
这里对翻译阶段进行一下说明:我们知道jsp页面不能原封不动地被传送给浏览器所有的jsp元素都必须首先由服务器进行处理这是通过将jsp页面转达化成servlet然后执行这个servlet来完成的服务器需要一个jsp容器来处理jsp页面jsp容器通常以servlet的形式来实现这个servlet经过配置可以处理对jsp页面的所有请求
Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类?JSP Page implementation class)并编译这个servlet这两步就构成了翻译阶段
由此我们就会知道jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中合成一个文件后被jsp容器将它转化成servlet可以看到这时会产生一个临时class文件和一个java文件下面举个例子
服务器用tomcat引入页面的jsp文件叫testjsp被引入的页面叫datejsp这个jsp文件里存放的是一个有关时间的jsp代码当前的上下文根设为test
datejsp的源文件
<%@ page language=java contentType=text/html;charset=gb%><%javautilDate date=new javautilDate();String date_cn =;String dateStr = ;switch(dategetDay()){case :date_cn =日; break;case :date_cn =一; break;case :date_cn =二; break;case :date_cn =三; break;case :date_cn =四; break;case :date_cn =五; break;case :date_cn =六; break;}dateStr = (+dategetYear()) + 年 + (dategetMonth()+) + 月 + date
getDate() + 日(星期 + date_cn + );%>documentwrite(<%=dateStr%>);
以下是testjsp的源文件
<%@ page language=java contentType=text/html;charset=gb%>
<html>
<head>
<title>include的两种用法</title>
<jsp:include page=datejsp flush=true/>
<%@ include file=datejsp %>
//我们在这里用include的两种不同形式来引入datejsp这个文件
<head>
<body>
<table><tr><td>
有关jsp中include的两种用法敬请关注
</td></tr></table>
</body>
</html>
在testjsp 文件中我们只输出了一行文本 有关jsp中include的两种用法敬请关注现在让我们先 用<%@ include file=datejsp %>这种形式引入datejsp这个文件你想会出现什么问题了吗?此时出现 了错误提示
HTTP Status ?
orgapachejasperJasperException: /datejsp() Page directive:
cant have multiple occurrences of contentType