




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年江淮十校英語試題及答案
- 2025年建設(shè)史考試題及答案
- 2025年月嫂考試題及答案養(yǎng)老
- 2025年酒店文員面試試題及答案
- 2025年二建自考試題及答案
- 保健按摩師中級練習(xí)測試題附答案
- 2025年三峽酈道元試題集及答案
- 鞍山職業(yè)學(xué)前教育復(fù)習(xí)測試卷
- 工業(yè)機器人練習(xí)試題附答案
- 2025年獨具匠心的試題及答案
- 復(fù)方雷尼替丁
- 2023年青島港灣職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)模擬試題及答案解析
- 五金采購合同及價格清單
- 25噸汽車吊吊裝施工方案
- DB63T 2105-2023 蒸發(fā)量觀測 全自動水面蒸發(fā)器比測規(guī)程
- GB/T 27740-2011流延聚丙烯(CPP)薄膜
- GB/T 22465-2008紅花籽油
- 體育賽事管理
- A類業(yè)余無線電操作技術(shù)能力驗證題目題庫1
- 卡通小學(xué)生校園用電安全教育參考課件
- 航線維修工具丟失的風(fēng)險管理項目課件
評論
0/150
提交評論