jsp中include的两种⽤法
JSP中的include的两种⽤法
1.两种⽤法
<%@ include file=” ”%>
<jsp:include page=” ” flush=”true”/>
2.⽤法区别
(1)执⾏时间上区别
<%@ include file=”relativeURI”%>                  是在翻译阶段执⾏
<jsp:include page=”relativeURI” flush=”true” />  在请求处理阶段执⾏.
(2)引⼊内容的不同
<%@ include file=” ”%>
jsp的include指令元素读⼊指定页⾯的内容。并把这些内容和本来的页⾯融合到⼀起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进⾏的。
<jsp:include page=”relativeURI” flush=”true” />引⼊执⾏页⾯或servlet所天⽣的应答⽂本.
3.如何使include页⾯携带⼊参
<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>
4. 说明:翻译阶段
翻译阶段:
jsp页⾯不能原封不动地被传送给浏览器,全部的jsp元素都必须⾸先由服务器进⾏处理。这是通过将jsp页⾯转达化成servlet,然后执⾏这个servlet来结束的。服务器需要⼀个jsp容器来处理jsp页⾯。jsp
容器平常以servlet的情势来实现,这个servlet经过配置,可以处理对jsp页⾯的全部请求。
Jsp容器重视将jsp页⾯转化成servlet(称为jsp页⾯实现类—JSP Page implementation class),并编译这个servlet。这两步就组成了翻译阶段.
请求处理阶段:
Jsp容器除了上⾯提到的重视将jsp页⾯转化成servlet外,还重视调⽤jsp页⾯实现类以处理每个请求并产⽣应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执⾏类⽂档.
5.⽰例
服务器⽤tomcat,引⼊页⾯的jsp⽂档叫test.jsp。被引⼊的页⾯叫date.jsp.这个jsp⽂档⾥存放的是⼀个有关时间的jsp代码,当前的上下⽂根设为test
//======date.jsp的源⽂档=====//
<%@ page language=”java” contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String date_cn ="";
String dateStr = "";
Day())
{
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 = (Year()) + "年" + (Month()+1) + "⽉" + Date() + "⽇(星期" + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======以下是test.jsp的源⽂档=============//
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<html>
<head>
<title>include的两种⽤法</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%--@ include file=”date.jsp” %-->
<head>
<body>
<table><tr><td></td></tr></table>
</body>
</html>
先⽤<%@ include file=”date.jsp” %>这种情势引⼊date.jsp这个⽂档。此时出现了错误提⽰:
HTTP Status 500 –
org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can't have multiple occurrences of contentType
状况码为http 500服务器内部错误。再看下⾯的提⽰。在date.jsp页⾯中不能指定多个contentType.
原因就在这⾥了。是由于在翻译阶段,date.jsp⽂档的代码被原封不动地参加到了test.jsp页⾯从⽽合成⼀个⽂档。合成后的⽂档中就会雷同的:
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
这句代码。解决的办法是把date.jsp⽂档中的这句删掉。刷新后再请求test.jsp页⾯,正常。
查看tomcat下的临时⽂档,..\tomcat\work\Standalone\localhost\test⽬录下会看到test_jsp.java和test_jsp.class两个⽂档,
jsp帮助文档这⾥的java⽂档就是jsp容器将jsp转化成了servlet⽽得到的test_jsp.java这个⽂档。
相对应的test_jsp.class这个⽂档就是编译test_jsp.java这个servlet⽂档产⽣的类⽂档了。打开所产⽣的servlet⽂档(test_jsp.java)。此时我们会发觉,在test.jsp⽂档被转化成servlet⽂档时,在输出的<haed>中间参加了⼀些不是test.jsp页⾯⾥⾯的代码,新参加的内容就是date.jsp ⾥⾯的代码.
将<%@ include file=”date.jsp”%>换成<jsp:include page=”dae.jsp” flush=”true”/>,然后请求test.jsp.此时会在页⾯上看见.我们所引⼊date.jsp 输出的⽇期中中⽂出现了乱码.
所以在我们作include⾏动元素引⼊页⾯时,实际只是引⽤了date.jsp这个⽂档被转化并被编译后产⽣的
servlet类⽂档.既如此,date.jsp就是作为⼀个单独的⽂档在执⾏后才被test.jsp⽂档运⾏时调⽤.由于date.jsp⽂档中⽆指定字符编码.所以出现了乱码.解决办法是在date.jsp⽂档中重新把刚才去掉的
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
再查看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.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。