转自于:http://java.chinaitlab.com/ServletJsp/529740.html
我们都知道在jsp中include有两种形式,分别是
<%@ include file=” ”%>
<jsp:include page=” ”flush=”true”/>
<%@ include file=””%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。
//======date.jsp的源文件=====//
<%@ page language="java"contentType="text/html;charset=UTF-8"%>
<%@pageimport="java.util.Calendar"%>
<%
Calendar calendar = Calendar.getInstance();
String date_cn ="";
String dateStr = "";
switch(calendar.get(Calendar.DAY_OF_WEEK))
{
case 0:date_cn ="日"; break;
case 1:date_cn ="一"; break;
case 2:date_cn ="二"; break;
case 3:date_cn ="三"; break;
case 4:date_cn ="四"; break;
case 5:date_cn ="五"; break;
case 6:date_cn ="六"; break;
}
dateStr = (calendar.get(Calendar.YEAR)) + "年" +(calendar.get(Calendar.MONTH)+1) + "月" +calendar.get(Calendar.DATE) + "日(星期" + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======以下是test.jsp的源文件=============//
<%@ page language="java"contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>include的两种用法</title>
<jsp:include page="date.jsp"flush="true"/>
<%-- <%@ includefile="date.jsp"%> --%>
</head>
<body>
<table><tr><td>
有关jsp中include的两种用法.敬请关注。
</td></tr></table>
</body>
</html>
HTTP Status 500 ?
org.apache.jasper.JasperException: /date.jsp(0,0) Pagedirective: can't have multiple occurrences of contentType
以下还有一堆错误,但我们只要看这里就知道问题的所在了。状态码为http500服务器内部错误。再看下面的提示。在date.jsp页面中不能指定多个contentType.
<%@ page language=”java”contentType=”text/html;charset=gb2312”%>
这句代码。解决的办法是把date.jsp文件中的这句删掉。刷新后再请求test.jsp页面
请求test.jsp在页面显示如下
2003年12月10日 13:12:40
有关jsp中include的两种用法.敬请关注。
这时我们还不能发现什么。还是去查看tomcat下的临时文件吧。到那里去看看date.jsp文件的内容是否已被加入到了test.jsp文件中。
<注.此处的tomcat装在E盘根目录下>
目录
E:\tomcat\work\Standalone\localhost\test.
在这个目录下会看到
test_jsp.java和test_jsp.class两个文件。
以上就是我们用<%@ includefile=”date.jsp”%>这种形式得到的结果.
下面我们换用<jsp:include page=”dae.jsp”flush=”true”/>也就是将
<%@ includefile=”date.jsp”%>换成<jsp:includepage=”dae.jsp” flush=”true”/>,然后请求test.jsp.
2003? ê 12??10?? 13:30:13
有关jsp中include的两种用法.敬请关注。
<%@ page language=”java”contentType=”text/html;charset=gb2312”%>
这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个date_jsp.java文件和一个date_jsp.class文件.这两个文件得来的方式跟test_jsp.java和test_jsp.class文件得来的方式一样.再查看一下此时test_jsp.java文件的代码会发现.此时只新增加了一句代码:
JspRuntimeLibrary.include(request, response, "date.jsp", out,true);
它并没有把date.jsp文件的代码加入到test.jsp.
<jsp:includepage=”<%=pageSelectedAtRuntime%>”flush=”true” >
<jsp:param name=”fitstParamer”value=”firstValue”>
<jsp:param name=”lastParamer”value=”lastValue”>
</jsp:include>
(注意,include行为元素同jsp其它元素一样,没有行为体时要以”/”结束.就像下面这样.
<jsp:includepage=”<%=pageSelectedAtRuntime%>”flush=”true” />)
以下是对include 两种用法的区别
主要有两个方面的不同;
一:执行时间上:
<%@ include file=”relativeURI”%>是在翻译阶段执行
<jsp:include page=”relativeURI” flush=”true”/> 在请求处理阶段执行.
二:引入内容的不同:
<%@ includefile=”relativeURI”%>
引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.
<jsp:include page=”relativeURI” flush=”true”/>引入执行页面或servlet所生成的应答文本.
另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.更多有关URL是如何解释的请参考相关资料或书籍