《Web網(wǎng)站設(shè)計與開發(fā)教程》課件第8章_第1頁
《Web網(wǎng)站設(shè)計與開發(fā)教程》課件第8章_第2頁
《Web網(wǎng)站設(shè)計與開發(fā)教程》課件第8章_第3頁
《Web網(wǎng)站設(shè)計與開發(fā)教程》課件第8章_第4頁
《Web網(wǎng)站設(shè)計與開發(fā)教程》課件第8章_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8章JSP基本語法及基本技術(shù)8.1JSP技術(shù)概況 8.2JSP基本語法8.3JSP指令8.4JSP動作

【學(xué)習(xí)提示】Servlet使用out對象的println(

)方法輸出HTML代碼,這種方式不僅繁瑣、工作量大而且容易出錯。為此,Sun公司在Java語言基礎(chǔ)上開發(fā)出JSP,用于簡化Web開發(fā)人員的工作。JSP和Servlet的本質(zhì)是一樣的。JSP最終必須編譯成Servlet才能運行。JSP比較簡單,它的特點是在HTML頁面中嵌入Java代碼片段,或使用各種JSP標(biāo)簽,包括用戶自定義的標(biāo)簽,從而可以動態(tài)地提供頁面內(nèi)容。早期使用JSP頁面的用戶非常廣泛,一個Web應(yīng)用可以全部由JSP頁面組成,只輔以少量的JavaBean即可。自從JavaEE標(biāo)準(zhǔn)出現(xiàn)以后,人們逐漸認識到使用JSP充當(dāng)過多的角色是不合適的。因此,JSP如今發(fā)展成單一的表現(xiàn)層技術(shù),不再承擔(dān)業(yè)務(wù)邏輯組件及持久層組件的功能。本章主要講解JSP的基本語法、指令標(biāo)簽和動作標(biāo)簽的使用方法。

JSP(JavaServerPages)是由SunMicrosystems公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP技術(shù)類似于微軟公司的ASP(ActiveServerPage)技術(shù),是將小段的Java程序代碼(Scriptlet)和JSP標(biāo)簽插入HTML文件中,形成在服務(wù)器端運行的JSP文件(通常擴展名為.jsp)。8.1JSP技術(shù)概況作為基于Java的網(wǎng)站開發(fā)技術(shù),JSP應(yīng)用程序具有跨平臺等特性,因而在網(wǎng)站項目開發(fā)中得到廣泛應(yīng)用。下面代碼是一個最簡單的JSP程序,hello.jsp。

<html>

<head>

<title>FirstPage</title>

</head>

<body>

<H3><%="HelloWorld!"%></H3>

</body>

</html>其執(zhí)行結(jié)果為HTML文檔,如下:

<html>

<head>

<title>

FirstPage

</title>

</head>

<body>

<H3>HelloWorld!</H3>

</body>

</html>

JSP與JavaServlet一樣都是在服務(wù)器端執(zhí)行的,執(zhí)行的結(jié)果通常以HTML文件的形式由Web服務(wù)器返回給瀏覽器端。事實上,JSP與JavaServlet不僅功能相似,而且具有內(nèi)在的、緊密的關(guān)系。在JSP頁面被執(zhí)行的過程中,會被JSP編譯器(JSPcompiler)編譯為Servlet源代碼,進而被Java編譯器(Javacompiler)編譯為可在Java虛擬機中執(zhí)行的字節(jié)代碼并被執(zhí)行,如圖8-1所示。當(dāng)然,這兩個編譯的操作僅在對JSP頁面的第一次請求時自動發(fā)生,之后便不再重復(fù),除非開發(fā)人員提交了新的JSP代碼。

圖8-1JSP程序執(zhí)行過程針對本節(jié)前面的JSP程序?qū)嵗?,下面的代碼就是由JSP編譯器所生成的Servlet源代碼。

packageorg.apache.jsp;

importjavax.servlet.*;

importjavax.servlet.http.*;

importjavax.servlet.jsp.*;

publicfinalclasshello_jspextendsorg.apache.jasper.runtime.HttpJspBase

implementsorg.apache.jasper.runtime.JspSourceDependent{

privatestaticfinaljavax.servlet.jsp.JspFactory_jspxFactory=

javax.servlet.jsp.JspFactory.getDefaultFactory();

privatestaticjava.util.Map<java.lang.String,java.lang.Long>_jspx_dependants;

privatejavax.el.ExpressionFactory_el_expressionfactory;

privateorg.apache.tomcat.InstanceManager_jsp_instancemanager;

publicjava.util.Map<java.lang.String,java.lang.Long>getDependants(){

return_jspx_dependants;

}

publicvoid_jspInit(){

_el_expressionfactory=_jspxFactory.getJspApplicationContext(getServletConfig()

.getServletContext()).getExpressionFactory();

_jsp_instancemanager=org.apache.jasper.runtime.InstanceManagerFactory.

getInstanceManager

(getServletConfig());

}

publicvoid_jspDestroy(){

}

publicvoid_jspService(finaljavax.servlet.http.HttpServletRequestrequest,finaljavax.servlet.http.HttpServletResponseresponse)

throwsjava.io.IOException,javax.servlet.ServletException{

finaljavax.servlet.jsp.PageContextpageContext;

javax.servlet.http.HttpSessionsession=null;

finaljavax.servlet.ServletContextapplication;

finaljavax.servlet.ServletConfigconfig;

javax.servlet.jsp.JspWriterout=null;

finaljava.lang.Objectpage=this;

javax.servlet.jsp.JspWriter_jspx_out=null;

javax.servlet.jsp.PageContext_jspx_page_context=null;

try{

response.setContentType("text/html");

pageContext=_jspxFactory.getPageContext(this,request,response,

null,true,8192,true);

_jspx_page_context=pageContext;

application=pageContext.getServletContext();

config=pageContext.getServletConfig();

session=pageContext.getSession();

out=pageContext.getOut();

_jspx_out=out;

out.write("\r\n");

out.write("<html>\r\n");

out.write("<head>\r\n");

out.write("<title>\r\n");

out.write("FirstPage\r\n");

out.write("</title>\r\n");

out.write("</head>\r\n");

out.write("\t<body>\r\n");

out.write("\t\t\t<H3>");

out.print("HelloWorld!");

out.write("</H3>\r\n");

out.write("\t</body>\r\n");

out.write("</html>\r\n");

}catch(java.lang.Throwablet){

if(!(tinstanceofjavax.servlet.jsp.SkipPageException)){

out=_jspx_out;

if(out!=null&&out.getBufferSize()!=0)

try{out.clearBuffer();}catch(java.io.IOExceptione){}

if(_jspx_page_context!=null)_jspx_page_context.handlePageException(t);

elsethrownewServletException(t);

}

}finally{

_jspxFactory.releasePageContext(_jspx_page_context);

}

}

}借助Java和Servlet本身的優(yōu)點,JSP具有以下技術(shù)優(yōu)勢:

(1)跨平臺性。JSP技術(shù)支持多種操作系統(tǒng)和硬件平臺,可以在Windows、Linux、Unix中直接部署,代碼無需改動。

(2)可伸縮性。JSP可以在很小的系統(tǒng)中運行來支持小規(guī)模的Web服務(wù),也可以到多臺服務(wù)器中運行來支持集群和負載均衡機制。

(3)開發(fā)工具的多樣性和開放性。目前,已經(jīng)有了許多優(yōu)秀的開發(fā)工具支持JSP的開發(fā),而且其中有很多是開源產(chǎn)品。廣泛的技術(shù)支持為JSP的發(fā)展帶來了巨大的動力。

(4)服務(wù)器端的可擴展性。JSP支持服務(wù)器端組件,可以使用成熟的JavaBean組件來實現(xiàn)復(fù)雜的商務(wù)功能。

依據(jù)JSP的語法規(guī)則,在Html代碼中嵌入Java程序的方式可以分為三類:程序片、表達式和聲明。下面進行詳細說明。8.2JSP基本語法8.2.1程序片

在“<%”和“%>”之間可以包含任何符合Java語言語法的程序片段。此標(biāo)簽中嵌入的代碼段在服務(wù)器端被執(zhí)行,真正實現(xiàn)動態(tài)網(wǎng)頁的功能。一個JSP頁面可以嵌入多個程序片,這些程序片被JSP引擎并按順序執(zhí)行。

下面例子中的程序片(ShowServerTime.jsp)負責(zé)顯示服務(wù)器的時間。

<%@pagelanguage="java"import="java.util.*,java.text.*"pageEncoding="UTF-8"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>服務(wù)器時間</title>

</head>

<body>

<%

Datenow=newDate();

DateFormatd1=DateFormat.getDateInstance();

Stringstr1=d1.format(now);

out.write("用Date方式顯示時間:"+now+"<br>");

out.write("用DateFormat.getDateInstance格式化時間后為:"+str1);

%>

</body>

</html>

上述代碼的運行結(jié)果如圖8-2所示。

圖8-2JSP顯示服務(wù)器時間8.2.2表達式

JSP表達式經(jīng)常被用到,在“<%=”和“%>”之間可包含任何一個有效的Java表達式。表達式在服務(wù)器端經(jīng)過計算后,將計算結(jié)果轉(zhuǎn)化成字符串插入到該表達式在JSP文件中的位置上。表達式后面不能加分號。

下面的例子(expression_test.jsp)使用表達式輸出100的平方根。

<html>

<head>

<title>表達式示例</title>

</head>

<body>

100的平方根為

<%=Math.sqrt(100)%>

</body>

</html>

expression_test.jsp的運行結(jié)果如圖8-3所示。

圖8-3JSP表達式示例8.2.3聲明

<%!intnumber=0;%>被稱為JSP聲明,用于聲明所生成servlet類的成員,即變量、方法和類都可以聲明。“<%!”和“%>”標(biāo)簽之間的所有內(nèi)容都會增加到類中,而且置于_jspService(

)方法之外。這意味著使用該標(biāo)簽可以聲明靜態(tài)變量和方法,成為頁面級別的共享變量,并可被訪問此網(wǎng)頁的所有用戶共享。

1.變量聲明

使用上述標(biāo)簽聲明變量的JSP文件(def_var.jsp)源碼如下:

<html>

<head>

<title>變量聲明示例</title>

</head>

<body>

<%!intnumber=0;%>

<!--上一行代碼聲明一個變量number-->

Thenumberofthispageis:

<%=++number%>

</body>

</html>

def_var.jsp文件運行后由Tomcat自動生成的servlet源文件如下:

publicfinalclassdef_005fvar_jspextendsorg.apache.jasper.runtime.HttpJspBase

implementsorg.apache.jasper.runtime.JspSourceDependent{

intnumber=0;

publicvoid_jspService(finaljavax.servlet.http.HttpServletRequestrequest,finaljavax.servlet.http.HttpServletResponseresponse)

out.print(++number);

}

其運行結(jié)果如圖8-4所示。

圖8-4JSP變量聲明示例

2.方法聲明

在“<%!”和“%>”之間聲明方法的JSP文件(def_met.jsp)源碼如下:

<html>

<head>

<title>方法聲明示例</title>

</head>

<body>

<!--下面的代碼聲明一個方法square()-->

<%!doublesquare(doublex){

doubleresult=Math.pow(x,2);

returnresult;}%>

<%!doublenumber=45;%>

Thesquareof<%=number%> is:

<%=square(number)%>

<!--上一行代碼使用聲明的方法square()-->

</body>

</html>

def_met.jsp的運行結(jié)果如圖8-5所示。

圖8-5JSP方法聲明示例在“<%!”和“%>”之間聲明的方法在整個JSP頁面內(nèi)有效,但在該方法內(nèi)定義的變量只在該方法內(nèi)有效。這些方法將在Java程序片中被調(diào)用時,則方法內(nèi)定義的變量被分配內(nèi)存,調(diào)用完畢即可釋放所占用的內(nèi)存。當(dāng)多個客戶同時請求一個JSP頁面,并調(diào)用方法操作成員變量時,可以在方法前增加“synchronized”實現(xiàn)同步。

3.類聲明

在“<%!”和“%>”之間還可以聲明類,該類在JSP頁面內(nèi)有效。即JSP頁面中的Java程序片可以調(diào)用該類創(chuàng)建對象。現(xiàn)舉例如下:

def_class.jsp

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<html>

<head>

<title>聲明類</title>

</head>

<body>

<p>請輸入一個數(shù):</p>

<br>

<form

name="form"method="post"action="def_class.jsp">

<inputtype="text"name="number"value="1">

<inputtype="submit"name="submit"value="送出"></form>

<!--下面的代碼聲明一個類SquareRoot-->

<%!publicclassSquareRoot

{doublenumber;

SquareRoot(doublenumber)

{this.number=number;

}

doublecompute()

{returnMath.sqrt(number);

}

}

%>

<%Stringstr=request.getParameter("number");

doublei;

if(str!=null)

{i=Double.valueOf(str).doubleValue();

}

else

{i=1;

}

SquareRootsquareRoot=newSquareRoot(i);//由類SquareRoot生成對象squareRoot

%>

<p><%=i%>的平方根是:

<br>

<%=squareRpute()%></p>

<!—調(diào)用對象squareRoot的compute()方法-->

</body>

</html>

在上述例子中定義了一個SquareRoot類負責(zé)求平方根,當(dāng)客戶向服務(wù)器提交一個實數(shù)后,由該類生成的對象負責(zé)計算平方根。def_class.jsp的運行結(jié)果如圖8-6所示,在文本框中輸入99,單擊“送出”按鈕,運行結(jié)果如圖8-7所示。

圖8-6JSP類聲明示例

圖8-7def_class計算99的平方根8.2.4JSP中的注釋

注釋可以增強JSP文件的可讀性,JSP中的注釋可分為兩種:

(1)

HTML注釋:在

<!--

-->

之間加入注釋內(nèi)容。即:

<!--注釋內(nèi)容-->

JSP引擎把HTML注釋交給客戶,客戶端通過瀏覽器查看JSP的源文件時,能夠看到HTML注釋。

(2)

JSP注釋:在<%--

--%>之間加入注釋內(nèi)容。即:

<%--注釋內(nèi)容--%>

JSP引擎忽略JSP注釋,即在編譯JSP頁面時忽略該注釋,客戶端無法看到相應(yīng)的注釋內(nèi)容。

JSP指令主要用來提供整個JSP頁面的相關(guān)信息并指定JSP頁面的相關(guān)屬性。它們是通知JSP引擎的消息,不直接生成輸出。其語法格式如下:

<%@指令名屬性名=“屬性值”%>

常見的編譯指令有如下三個:

page:該指令是針對當(dāng)前頁面的指令,用于定義頁面的全局屬性。

include:用于指定包含另一個靜態(tài)文件。

taglib:用于定義和訪問自定義標(biāo)簽。8.3JSP指令8.3.1page指令

Page指令通常位于JSP頁面的頂端,一個JSP頁面可以使用多條JSP指令。其語法格式如下:

<%@page屬性1=“值1”屬性2=“值2”…%>

Page指令的常用屬性如下表8-1所示。表8-1page指令的常用屬性上述屬性中除import可以指定多個屬性值外,其他屬性均只能指定一個值。示例如下:

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@import="java.sql.*,java.lang.*"%>

page指令中的info屬性及顯示舉例(page_info.jsp)如下:

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@pageinfo="測試page指令的info屬性"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>MyJSP'page_info.jsp'startingpage</title>

</head>

<body>

<%=getServletInfo()%><br>

</body>

</html>上述代碼中設(shè)置page指令的info屬性值為“測試page指令的info屬性”,其運行效果如下圖8-8所示。

圖8-8測試page指令的info屬性

errorPage屬性的實質(zhì)是JSP的異常處理機制,JSP腳本不要求強制處理異常。如果JSP頁面在運行中拋出未處理的異常,系統(tǒng)將自動跳轉(zhuǎn)到errorPage屬性指定的頁面;如果errorPage沒有指定錯誤頁面,系統(tǒng)則直接把異常信息呈現(xiàn)給客戶端瀏覽器。

下面的示例(errorPage_test.jsp)設(shè)置了page指令的errorPage屬性,指定了當(dāng)前頁面發(fā)生異常時的處理頁面。具體代碼如下:

<%@pagelanguage="java"pageEncoding="UTF-8"errorPage="error.jsp"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>MyJSP'errorPage_test.jsp'startingpage</title>

</head>

<body>

<%

int[]ints=newint[]{1,2,3,4};

out.write(ints[4]);

%>

</body>

</html>在上述代碼中指定errorPage_test.jsp頁面的錯誤處理頁面是error.jsp。error.jsp頁面中將page指令的isErrorPage屬性設(shè)為“true”,具體代碼如下:

<%@pagelanguage="java"pageEncoding="UTF-8"isErrorPage="true"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>錯誤提示頁面</title>

</head>

<body>

系統(tǒng)出現(xiàn)異常<br>

</body>

</html>

在瀏覽器中errorPage_test.jsp的運行結(jié)果如圖8-9所示;如果去除errorPage屬性,其運行結(jié)果如圖8-10所示。

圖8-9設(shè)置errorPage屬性的運行結(jié)果

圖8-10沒有設(shè)置errorPage屬性的運行結(jié)果8.3.2include指令

include指令用來在JSP頁面出現(xiàn)該指令的位置處,靜態(tài)插入一個文件(如JSP文件、HTML文件和txt文件等),不能插入用

<%=

%>

表達式代表的文件。被插入的文件必須是可訪問和可使用的,即該文件必須和當(dāng)前JSP頁面在同一Web服務(wù)目錄中。而靜態(tài)插入是指當(dāng)前JSP頁面和插入的部分合并成一個新的JSP頁面,然后JSP引擎再將這個新的JSP頁面轉(zhuǎn)譯成Java類文件。因此,插入文件后,必須保證新合并的JSP頁面符合JSP語法規(guī)則,即能夠成為一個JSP頁面文件。例如,最好不要在被插入的文件中出現(xiàn)

<html>、</html>、<body>

</body>

等結(jié)構(gòu)化標(biāo)簽。

include指令的語法格式如下:

<%@includefile="被插入文件URL"%>

下面的示例(static_include.jsp)采用include指令插入Register.html文件,具體代碼如下:

<%@pagelanguage="java"pageEncoding="UTF-8"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>MyJSP'static_include.jsp'startingpage</title>

</head>

<body><divalign="center">

注冊信息表<br>

<%@includefile="Register.html"%>

</div></body>

</html>

被插入頁面Register.html的代碼如下:

<formmethod="get"name="register">用戶名:<inputtype="text"maxlength="16"size="10"name="name">

<p>密碼:<inputtype="password"size="12"name="password"></p>

<p>密碼確認:<inputtype="password"size="12"name="password1"></p>

<p><inputtype="submit"name="button1"value="注冊">

<inputtype="reset"value="重置"name="button2"></p>

</form>

JSP文件static_include的運行結(jié)果如圖8-11所示。

圖8-11include指令運用示例注意:使用inlude指令插入含有中文的靜態(tài)文件時,必須確保JSP文件和被插入文件的編碼方式一致,可以采用UTF-8、gbk和gb2312等方式;JSP文件可以采用page指令的pageEncoding屬性設(shè)置編碼方式;html文件在存儲的時候要選擇其編碼方式。8.3.3taglib指令

在JSP中taglib指令用來聲明此JSP文件使用的自定義標(biāo)簽,同時引用標(biāo)簽庫,并指定標(biāo)簽的前綴。語法格式如下:

<%@tagliburi="標(biāo)簽庫的URI"prefix="標(biāo)簽前綴"%>

taglib指令有兩個屬性值:

●uri:指明標(biāo)簽庫文件的存放位置。

●prefix:指明該自定義標(biāo)簽使用時的前綴。

舉例:在MyEclipse中建立名為Chapter8的Web工程中,新建一包,包名為mytag。

(1)在mytag下,新建一Java類,內(nèi)容如下:

packagemytag;

importjava.io.IOException;

importjavax.servlet.jsp.*;

importjavax.servlet.jsp.tagext.*;

publicclassHelloWorldTagextendsTagSupport{

publicintdoStartTag()throwsJspTagException{

returnEVAL_BODY_INCLUDE;

}

publicintdoEndTag()throwsJspTagException{

try{

pageContext.getOut().write("HelloWorld");

}catch(IOExceptionex){

thrownewJspTagException("Error!");

}

returnEVAL_PAGE;

}

}

(2)在WEB-INF下新建一目錄,目錄名為tlds,再在tlds下面新建一tld文件,命名為hello.tld,內(nèi)容如下:

<?xmlversion="1.0"encoding="ISO-8859-1"?>

<!DOCTYPEtaglib

PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.1//EN"

"/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<tlibversion>1.0</tlibversion>

<jspversion>1.1</jspversion>

<shortname>myTag</shortname>

<tag>

<name>hello</name>

<tagclass>mytag.HelloWorldTag</tagclass>

<bodycontent>empty</bodycontent>

</tag>

</taglib>

(3)在WebRoot中創(chuàng)建taglib_test.jsp頁面,代碼如下:

<%@pagelanguage="java"%>

<%@tagliburi="/WEB-INF/tlds/hello.tld"prefix="mytag"%>

<html>

<body>

<mytag:hello></mytag:hello>

</body>

</html>

上述代碼的運行效果如圖8-12所示。

圖8-12taglib指令示例

JSP動作標(biāo)簽在JSP頁面運行時執(zhí)行服務(wù)器端的任務(wù)(如包含一個文件、頁面跳轉(zhuǎn)、傳遞參數(shù)等),不需要我們編寫Java代碼。而上一節(jié)提到的JSP指令標(biāo)簽則在將JSP編譯成Servlet時起作用。我們可以形象地將JSP動作標(biāo)簽看成動態(tài)的,JSP指令標(biāo)簽看成靜態(tài)的。

常用的JSP動作標(biāo)簽如下表8-2所示。8.4JSP動作表8-2JSP動作標(biāo)簽列表

下面對前四個動作標(biāo)簽進行詳細講解,后面三個標(biāo)簽將在第十章JavaBean技術(shù)中進行詳述。8.4.1include動作

include動作標(biāo)簽用來在JSP頁面中動態(tài)包含一個文件。所謂動態(tài),即包含頁面程序與被包含頁面的程序是彼此獨立的,互不影響,僅僅在JSP引擎運行包含頁面時執(zhí)行到<jsp:include>標(biāo)簽,JSP引擎才會插入被包含頁面的body內(nèi)容。

include動作標(biāo)簽的語法格式如下:

<jsp:includepage="{靜態(tài)URL|<%=表達式%>"flush="true|false"}/>

或者

<jsp:includepage="{靜態(tài)URL|<%=表達式%>"flush="true|false"}>

<jsp:paramname="參數(shù)名"value="{參數(shù)值|<%=表達式%>}"/>

</jsp:include>

page屬性表示被包含文件的存放位置,flush屬性用于指定輸出緩存是否轉(zhuǎn)移到被包含文件中。如果指定為true,則包含在被插入文件中;如果指定為false,則包含在原文件中。JSP1.1版本的文件只能設(shè)置為false。第二種語法格式中,可以在被包含文件中加入額外的請求參數(shù)。傳遞到被包含頁面的參數(shù)的值可以通過HttpServletRequest類的getParameter()方法獲得。

下面的示例(include_action.jsp)使用include動作標(biāo)簽插入指定JSP頁面,具體代碼如下:

<%@pagelanguage="java"pageEncoding="UTF-8"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>include動作標(biāo)簽</title>

</head>

<body>

<fontcolor="#0000ff"size="5"><strong>下面的內(nèi)容使用include動作標(biāo)簽包含ShowServer

Time.jsp文件</strong></font><br>

<jsp:includepage="ShowServerTime.jsp"></jsp:include>

</body>

</html>

上述代碼執(zhí)行效果如圖8-13所示。

圖8-13include動作標(biāo)簽運行結(jié)果從運行結(jié)果上看,include動作標(biāo)簽和include指令沒有什么不同。但查看include_action.jsp生成的Servlet源代碼,可以發(fā)現(xiàn)不同之處:

out.write("<body>\n");

out.write("<fontcolor=\"#0000ff\"size=\"5\"><strong>下面的內(nèi)容使用include動作標(biāo)簽包含ShowServerTime.jsp文件</strong></font><br>\r\n");

out.write("");

org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response,"ShowServerTime.jsp",out,false);

out.write("\r\n");

上述代碼片段中黑體字代碼顯示了include動作標(biāo)簽的原理:使用一個include方法來插入被包含頁面的內(nèi)容,而不是將目標(biāo)頁面完全融入本頁面中。

因此,靜態(tài)包含和動態(tài)包含的區(qū)別如下:

(1)靜態(tài)包含是將被包含頁面的代碼完全導(dǎo)入,兩個頁面融合成一個整體Servlet;而動態(tài)包含則在Servlet中使用include方法來引入被包含頁面的內(nèi)容。

(2)靜態(tài)包含時被包含頁面的編譯指令會起作用;而動態(tài)包含時被包含頁面的編譯指令則失去作用,只是插入頁面的body內(nèi)容。

(3)動態(tài)包含還可以向被包含頁面?zhèn)鬟f參數(shù)。

第二種語法格式的示例(include_param.jsp)如下:

<%@pagelanguage="java"pageEncoding="UTF-8"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>include動作與param動作嵌套使用</title>

</head>

<body>

使用param動作標(biāo)簽向show_paramvalue.jsp傳遞參數(shù)<br>

<jsp:includepage="show_paramvalue.jsp">

<jsp:paramname="number"value="1000"/>

</jsp:include>

</body>

</html>

被包含頁面show_paramvalue.jsp的代碼如下:

<%@pagelanguage="java"pageEncoding="UTF-8"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>接收參數(shù)頁面</title>

</head>

<body>

由inlude動作標(biāo)簽嵌套Param動作標(biāo)簽傳遞過來的參數(shù)值為:

<%=request.getParameter("number")%>

</body>

</html>

include_param.jsp頁面的運行結(jié)果如下圖8-14所示。

圖8-14傳遞參數(shù)的include動作標(biāo)簽8.4.2forward動作

forward動作可以把請求轉(zhuǎn)發(fā)到同一Web應(yīng)用中的其他頁面,既可以是靜態(tài)的HTML頁面,也可以是JSP頁面,或一個Servl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論