北大青鳥(niǎo)課程講解之:JSP中的include的兩種用法

通州北大青鳥(niǎo)學(xué)校學(xué)術(shù)部專家介紹北大青鳥(niǎo)課程:我們都知道在jsp中include有兩種形式,分別是
<%@ include file=” ”%>
<jsp:include page=” ” flush=”true”/>

前者是指令元素、后者是行為元素。具體它們將在何處用?如何用及它們有什么區(qū)別?下面,通州北大青鳥(niǎo)學(xué)校學(xué)術(shù)部老師為大家講解:

通常當(dāng)應(yīng)用程序中所有的頁(yè)面的某些部分(例如標(biāo)題、頁(yè)腳和導(dǎo)航欄)都相同的時(shí)候,我們就可以考慮用include。具體在哪些時(shí)候 用<%@ include file=” ”%>,哪些時(shí)候用< jsp:include page=” ” flush=”true”/>.這種形式。首先要明白的是它們之間的區(qū)別。只有了解了它們用法的不同才 理解該在何時(shí)去用以及如何選擇。(北大青鳥(niǎo)課程)

通州北大青鳥(niǎo)學(xué)校老師介紹:<%@ include file=” ”%>,jsp的include指令元素讀入指定頁(yè)面的內(nèi)容。并把這些內(nèi)容和原來(lái)的頁(yè)面融合到一起。(這個(gè)過(guò)程是在翻譯階段:也就是jsp被轉(zhuǎn)化成servlet的階段進(jìn)行的。

這里對(duì)翻譯階段進(jìn)行一下說(shuō)明:我們知道,jsp頁(yè)面不能原封不動(dòng)地被傳送給瀏覽器,所有的jsp元素都必須首先由服務(wù)器進(jìn)行處理。這是通過(guò)將jsp頁(yè)面轉(zhuǎn)達(dá)化成servlet,然后執(zhí)行這個(gè)servlet來(lái)完成的。服務(wù)器需要一個(gè)jsp容器來(lái)處理jsp頁(yè)面。jsp容器通常以servlet的形式來(lái)實(shí)現(xiàn),這個(gè)servlet經(jīng)過(guò)配置,可以處理對(duì)jsp頁(yè)面的所有請(qǐng)求。(北大青鳥(niǎo)課程

Jsp容器負(fù)責(zé)將jsp頁(yè)面轉(zhuǎn)化成servlet(稱為jsp頁(yè)面實(shí)現(xiàn)類(lèi)?JSP Page implementation class),并編譯這個(gè)servlet。這兩步就構(gòu)成了翻譯階段。(北大青鳥(niǎo)課程)

由此我們就會(huì)知道:jsp頁(yè)面是把include指令元素所指定的頁(yè)面的實(shí)際內(nèi)容(也就是代碼段)加入到引入它的jsp頁(yè)面中,合成一個(gè)文件后被jsp容器將它轉(zhuǎn)化成servlet?梢钥吹竭@時(shí)會(huì)產(chǎn)生一個(gè)臨時(shí)class文件和一個(gè)java文件。下面舉個(gè)例子。(北大青鳥(niǎo)課程)

服務(wù)器用tomcat,引入頁(yè)面的jsp文件叫test.jsp。被引入的頁(yè)面叫date.jsp.這個(gè)jsp文件里存放的是一個(gè)有關(guān)時(shí)間的jsp代碼,當(dāng)前的上下文根設(shè)為test
//======date.jsp的源文件=====//
<%@ page language=”java” contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String date_cn ="";
String dateStr = "";
switch(date.getDay())
{
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 = (1900+date.getYear()) + "年" + (date.getMonth()+1) + "月" + date.getDate() + "日(星期" + date_cn + ")";(北大青鳥(niǎo)課程)
%>
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” %-->
//我們?cè)谶@里用include的兩種不同形式來(lái)引入date.jsp這個(gè)文件.
<head>
<body>
<table><tr><td>
有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注。
</td></tr></table>
</body>
</html>
北大青鳥(niǎo)課程
test.jsp 文件中,我們只輸出了一行文本“ 有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注!,現(xiàn)在讓我們先 用<%@ include file=”date.jsp” %>這種形式引入date.jsp這個(gè)文件。你想會(huì)出現(xiàn)什么問(wèn)題了嗎?此時(shí)出現(xiàn) 了錯(cuò)誤提示:
HTTP Status 500 ?
org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can't have multiple occurrences of contentType

以下還有一堆錯(cuò)誤,但我們只要看這里就知道問(wèn)題的所在了。狀態(tài)碼為http 500服務(wù)器內(nèi)部錯(cuò)誤。再看下面的提示。在date.jsp頁(yè)面中不能指定多個(gè)contentType.原因就在這里了。是因?yàn)樵诜g階段,date.jsp文件的代碼被原封不動(dòng)地加入到了test.jsp頁(yè)面從而合成一個(gè)文件。合成后的文件中就會(huì)相同的:
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
這句代碼。解決的辦法是把date.jsp文件中的這句刪掉。刷新后再請(qǐng)求test.jsp頁(yè)面。(北大青鳥(niǎo)課程)

以上內(nèi)容由北大青鳥(niǎo)學(xué)校學(xué)術(shù)部老師提供

北大青鳥(niǎo)網(wǎng)上報(bào)名
北大青鳥(niǎo)招生簡(jiǎn)章