![程序設計第2章jsp語法_第1頁](http://file4.renrendoc.com/view/d136e99226bd0f1b10b1f2f0cb23773a/d136e99226bd0f1b10b1f2f0cb23773a1.gif)
![程序設計第2章jsp語法_第2頁](http://file4.renrendoc.com/view/d136e99226bd0f1b10b1f2f0cb23773a/d136e99226bd0f1b10b1f2f0cb23773a2.gif)
![程序設計第2章jsp語法_第3頁](http://file4.renrendoc.com/view/d136e99226bd0f1b10b1f2f0cb23773a/d136e99226bd0f1b10b1f2f0cb23773a3.gif)
![程序設計第2章jsp語法_第4頁](http://file4.renrendoc.com/view/d136e99226bd0f1b10b1f2f0cb23773a/d136e99226bd0f1b10b1f2f0cb23773a4.gif)
![程序設計第2章jsp語法_第5頁](http://file4.renrendoc.com/view/d136e99226bd0f1b10b1f2f0cb23773a/d136e99226bd0f1b10b1f2f0cb23773a5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章JSP語法程志剛<!--JSP中的指令標識--><%@pagelanguage="java"contentType="text/html;charset=gb2312"%><%@pageimport="java.util.Date"%><!--HTML標記語言--><html><head><title>JSP頁面的基本構成</title></head><body><center><!--嵌入的Java代碼--><%Stringtoday=newDate().toLocaleString();%><!--JSP表達式-->
今天是:<%=today%><!--HTML標記語言--></center></body></html>2.1了解JSP的基本構成
在學習JSP語法之前,首先來初步了解一下JSP頁面的基本結構。請看下面的代碼:在上面的代碼中,并沒有包括JSP中的所有元素,但它仍然構成了一個動態(tài)的JSP程序。訪問包含了該代碼的JSP頁面后,將顯示用戶訪問該頁面的當前時間。暫且不對其功能實現(xiàn)進行講解,先來介紹該頁面的組成元素。3JSP頁面的基本結構JSP頁面三大部分5種元素組合而成:一、HTML腳本①
普通的HTML標記符二、JSP腳本②
成員變量和方法的聲明③
Java表達式④
Java程序片三、JSP標記⑤指令標記和動作標記
4各種元素的執(zhí)行1.把JSP頁面中普通的HTML標記符號,交給客戶的瀏覽器執(zhí)行顯示。2.JSP標記、數(shù)據(jù)和方法聲明、Java表達式、Java程序片由Tomcat服務器負責執(zhí)行,將需要顯示的結果發(fā)送給客戶的瀏覽器。2.2JSP腳本標識2.2.1
聲明標識(Declaration)2.2.2
JSP表達式(Expression)2.2.3腳本程序(Scriptlet)√√√2.2.1聲明標識(Declaration)
在JSP頁面中可以聲明變量或方法,其聲明格式為:
特別要注意,在“<%”與“!”之間不要有空格。聲明的語法與在Java語言中聲明變量和方法時是一樣的。
在頁面中通過聲明標識聲明的變量和方法,在整個頁面內都有效,它們將成為JSP頁面被轉換為Java類后類中的屬性和方法。并且它們會被多個線程即多個用戶共享。任何一個線程對聲明的變量或方法的修改都會改變它們原來的狀態(tài)。它們的生命周期從創(chuàng)建到服務器關閉后結束。<%!聲明變量或方法的代碼%>【例2-2】一個簡單的網站計數(shù)器2.2.2
腳本程序(Scriptlet)使用“<%”與“%>”標記起來的一段Java代碼。
在腳本程序中可以定義變量、調用方法和進行各種表達式運算,且每行語句后面要加入分號。在腳本程序中定義的變量在當前的整個頁面內都有效,但不會被其他的線程共享,當前用戶對該變量的操作不會影響到其他的用戶。當變量所在的頁面關閉后就會被銷毀。腳本程序使用格式如下:
腳本程序的使用比較靈活,它所實現(xiàn)的功能是JSP表達式無法實現(xiàn)的。<%Java程序片段%>2.2.3JSP表達式
表達式用于向頁面中輸出信息,其使用格式為:
特別要注意,“<%”與“=”之間不要有空格。
JSP表達式在頁面被轉換為Servlet后,轉換為了out.print()方法。所以JSP表達式與JSP頁面中嵌入到小腳本程序中的out.print()方法實現(xiàn)的功能相同。如果通過JSP表達式輸出一個對象,則該對象的toString()方法會被自動調用,表達式將輸出toString()方法返回的內容。<%=變量或可以返回值的方法或Java表達式%>JSP表達式可以應用到以下幾種情況。
(1)向頁面輸出內容,例如下面的代碼:3.3.1
JSP表達式
(2)生成動態(tài)的鏈接地址,例如下面的代碼:<%Stringname="";%>用戶名:<%=name%>(3)動態(tài)指定Form表單處理頁面,例如下面的代碼:運行該段代碼將顯示:用戶名:<%Stringpath="e.jsp";%><ahref="<%=path%>">鏈接到.jsp</a>運行該段代碼將生成下面的HTML代碼:<ahref="e.jsp">鏈接到e.jsp</a><%Stringname="logon.jsp";%><formaction="<%=name%>"></form>運行該段代碼將生成下面的HTML代碼:<formaction="logon.jsp"></form>(4)為通過循環(huán)語句生成的元素命名,例如下面的代碼:<%for(inti=1;i<3;i++){%> file<%=i%>:<inputtype="text"name="<%="file"+i%>"><br><%}%>運行該段代碼將生成下面的HTML代碼:file1:<inputtype="text"name="file1"><br>file2:<inputtype="text"name="file2"><br>3.3.1JSP表達式2.3JSP的注釋
在JSP頁面中可以應用多種注釋,如HTML中的注釋、Java中的注釋和在嚴格意義上說屬于JSP頁面自己的注釋:帶有JSP表達式和隱藏的注釋。在JSP規(guī)范中,它們都屬于JSP中的注釋,并且它們的語法規(guī)則和運行的效果有所不同。下面將介紹JSP中的各種注釋。HTML中的注釋帶有JSP表達式的注釋隱藏注釋腳本程序(Scriptlet)中的注釋√√√√2.3.1HTML中的注釋JSP文件是由HTML標記和嵌入的Java程序片段組成的,所以在HTML中的注釋同樣可以在JSP文件中使用。
注釋格式如下:<!--注釋內容-->【p18】HTML注釋的應用2.3.3隱藏注釋
在前面已經介紹了如何應用HTML中的注釋,這種注釋雖然在客戶端瀏覽頁面時不會看見,但它卻存在于源代碼中,可通過在客戶端查看源代碼看到被注釋的內容。所以嚴格來說,這種注釋并不安全。下面將介紹一種隱藏注釋,注釋格式如下:<%--注釋內容--%>
使用該方法注釋的內容,不僅在客戶端瀏覽時看不到,而且即使是通過在客戶端查看HTML源代碼,也不會看到,所以安全性較高?!緋18】隱藏注釋的應用2.3.4腳本程序(Scriptlet)中的注釋
在腳本程序中所包含的是一段Java代碼,所以在腳本程序中的注釋和在Java中的注釋是相同的。腳本程序中包括下面3種注釋方法。//注釋內容1.單行注釋單行注釋的格式如下:2.多行注釋/*
注釋內容1
注釋內容2…*/2.3.4腳本程序(Scriptlet)中的注釋
該種注釋會被Javadoc文檔工具生成文檔時所讀取,文檔是對代碼結構和功能的描述。注釋格式如下:/**
提示信息1
提示信息2…*/
該注釋方法與前面介紹的多行注釋很相似,但細心的讀者會發(fā)現(xiàn)它是以“/**”符號作為注釋的開始標記,而不是“/*”。與多行注釋一樣,被“/**”和“/*”符號注釋的所有內容,服務器都不會做任何處理。3.提示文檔注釋2.3.4腳本程序(Scriptlet)中的注釋
在Eclipse開發(fā)工具中向創(chuàng)建的JSP文件輸入下面代碼,然后將鼠標指針移動到指定的代碼上,將會出現(xiàn)提示信息。<%!inti=0;/**@作者:YXQ@功能:該方法用來實現(xiàn)一個簡單的計數(shù)器*/synchronizedvoidadd(){ i++;}%><%add();%>當前訪問次數(shù):<%=i%>2.3.4腳本程序(Scriptlet)中的注釋
將鼠標指針移動到<%add();%>代碼上,將出現(xiàn)下圖如圖所示的提示信息。2.4JSP的指令標識(1)
指令標識在客戶端是不可見的,它是被服務器解釋并被執(zhí)行的。通過指令標識可以使服務器按照指令的設置來執(zhí)行動作和設置在整個JSP頁面范圍內有效的屬性。在一個指令中可以設置多個屬性,這些屬性的設置可以影響到整個頁面。
在JSP中主要包含3種指令,分別是page指令(頁面指令)、include指令和taglib指令。2.4JSP的指令標識(2)<%@指令名稱屬性1="屬性值"屬性2="屬性值"…%>
下面將分別介紹JSP的3種指令格式。使用page指令使用include指令使用taglib指令
指令通常以“<%@”標記開始,以“%>”標記結束,以上3種指令的通用格式如下:2.4.1使用page指令(1)page指令即頁面指令,可以定義在整個JSP頁面范圍內有效的屬性,其使用格式如下:<%@pageattribute1="value1"attribute2="value2"…%>page指令可以放在JSP頁面中的任意行,但為了利于程序代碼的閱讀,習慣上放在文件的開始部分。Page指令具有多種屬性,通過這些屬性的設置可以影響到當前的JSP頁面。例如,在頁面中正確設置當前頁面響應的MIME類型為text/html,如果MIME類型設置不正確,則當服務器將數(shù)據(jù)傳輸給客戶端進行顯示時,客戶端將無法識別傳送來的數(shù)據(jù),從而不能正確地顯示內容。2.4.1使用page指令(2)
Page指令中除import屬性外,其他屬性只能在指令中出現(xiàn)一次。Page指令具有的屬性如下:<%@page[language="java"][contentType="mimeType;charset=CHARSET"][import="{package.class|pageage.*},…"][extends="package.class"][session="true|false"][buffer="none|8kb|sizekb][autoFlush="true|false"][isThreadSafe="true|false"][info="text"][errorPage="relativeURL"][isErrorPage="true|false"][isELIgnored="true|false"][pageEncoding="CHARSET"]%>雖然Page指令具有如此多的屬性,但在實際編程過程中,并不是每個屬性都必須一一列出,其中很多屬性可以忽略,此時Page指令將使用這些屬性的默認值來設置JSP頁面2.4.1使用page指令(3)language屬性:設置當前頁面中編寫JSP腳本使用的語言,默認值為java,例如:<%@pagelanguage="java"%>
上述代碼設置了當前頁面中使用Java語言來編寫JSP腳本,目前只能設置為Java。contentType屬性:設置頁面響應的MIME類型,通常被設置為text/html,例如:<%@pagecontentType="text/html"%>
如果該屬性設置不正確,如設置為text/css,那么客戶端瀏覽器在顯示HTML樣式時,不能對HTML標識進行解釋,而直接顯示HTML代碼。2.4.1使用page指令(4)
在該屬性中還可以設置JSP字符的編碼,例如:<%@pagecontentType="text/html;charset=gb2312"%>
默認的編碼為ISO-8859-1。
import屬性:import屬性類似于Java中的import語句,用來向JSP文件中導入需要用到的包。在Page指令中可多次使用該屬性來導入多個包。例如:<%@pageimport="java.util.*"%><%@pageimport="java.text.*"%>
或者通過逗號間隔,來導入多個包。<%@pageimport="java.util.*,java.text.*"%>2.4.1使用page指令(5)
在JSP中已經默認導入了以下包:java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*
所以,即使沒有通過import屬性進行導入,在JSP頁面中也可以調用上述包中的類。若要在頁面中使用編寫的JavaBean,也可通過import屬性來導入。還可以通過<jsp:useBean>動作標識來創(chuàng)建一個JavaBean實例進行調用。2.4.1使用page指令(6)extends屬性:extends屬性用于指定將一個JSP頁面轉換為Servlet后繼承的類。在JSP中通常不會設置該屬性,JSP容器會提供繼承的父類。并且如果設置了該屬性,一些改動會影響JSP的編譯能力。
session屬性:該屬性默認值為true,表示當前頁面支持session,設為false表示不支持session。
buffer屬性:該屬性用來設置out對象(JspWriter類對象)使用的緩沖區(qū)的大小。若設置為none,表示不使用緩存,而直接通過PrintWriter對象進行輸出;如果將該屬性指定為數(shù)值,則輸出緩沖區(qū)的大小不應小于該值,默認值為8KB(因不同的服務器而不同,但大多數(shù)情況下都為8KB)。2.4.1使用page指令(7)autoFlush屬性:該屬性默認值為true,表示當緩沖區(qū)已滿時,自動將其中的內容輸出到客戶端。如果設為false,則當緩沖區(qū)中的內容超出其設置的大小時,會產生“JSPBufferoverflow”溢出異常。注意:若buffer屬性設為none,則autoFlush不能設為false。isThreadSafe屬性:該屬性默認值為true,表示當前JSP頁面被轉換為Servlet后,會以多線程的方式來處理來自多個用戶的請求;如果設為false,則轉換后的Servlet會實現(xiàn)SigleThreadModel接口,該Servlet將以單線程的方式來處理用戶請求,即其他請求必須等待直到前一個請求處理結束。2.4.1使用page指令(8)info屬性:該屬性可設置為任意字符串,如當前頁面的作者或其他有關的頁面信息。可通過Servlet.getServletInfo()方法來獲取設置的字符串。例如:訪問頁面后,將顯示:Thisisindex.jsp!<%@pageinfo="Thisisindex.jsp!"%><%=this.getServletInfo()%>
errorPage屬性:該屬性用來指定一個當前頁面出現(xiàn)異常時所要調用的頁面。如果屬性值是以“/”開頭的路徑,則將在當前應用程序的根目錄下查找文件;否則,將在當前頁面的目錄下查找文件。2.4.1使用page指令(9)isErrorPage屬性:將該屬性值設為true,此時在當前頁面中可以使用exception異常對象。若在其他頁面中通過errorPage屬性指定了該頁面,則當前者出現(xiàn)異常時,會跳轉到該頁面,并可在該頁面中通過exception對象輸出錯誤信息。相反,如果將該屬性設置為false,則在當前頁面中不能使用exception對象。該屬性默認值為false。
isELIgnored屬性:通過該屬性的設置,可以使JSP容器忽略表達式語言“${}”。其值只能為true或false。設為true,則忽略表達式語言。pageEncoding屬性:該屬性用來設置JSP頁面字符的編碼。默認值為ISO-8859-1。2.4.2使用include指令(1)
該指令用于在當前的JSP頁面中,在當前使用該指令的位置嵌入其他的文件,如果被包含的文件中有可執(zhí)行的代碼,則顯示代碼執(zhí)行后的結果。該指令的使用格式如下:file屬性:該屬性指定被包含的文件,該屬性不支持任何表達式,也不允許通過如下的方式來傳遞參數(shù)。<%@includefile="文件的絕對路徑或相對路徑"%>
如果該屬性值以“/”開頭,那么指定的是一個絕對路徑,將在當前應用的根目錄下查找文件;如果是以文件名稱或文件夾名開頭,那么指定的是一個相對路徑,將在當前頁面的目錄下查找文件。<%@includefile="e.jsp?name=yxq"%>2.4.2使用include指令(2)
使用include指令引用外部文件,可以減少代碼的冗余。例如,有兩個JSP頁面都需要應用下圖所示的網頁模板進行布局。
其中,這兩個頁面中的LOGO圖片區(qū)、側欄和頁尾的內容都不會發(fā)生變化。如果通過基本JSP語句來編寫這兩個頁面,會導致編寫的JSP文件出現(xiàn)大量的冗余代碼,不僅降低了開發(fā)進程而且會給程序的維護帶來很大的困難。為了解決該問題,可以將這個復雜的頁面分成若干個獨立的部分,將相同的部分在單獨的JSP文件中進行編寫。LOGO圖片區(qū):top.jsp側欄
left.jsp內容顯示區(qū):main.jsp頁尾:end.jsp2.4.2使用include指令(3)
這樣在多個頁面中應用上述的頁面模板時,就可通過include指令在相應的位置上引入這些文件,從而只需對內容顯示區(qū)進行編碼即可。類似的頁面代碼如下:<%@pagecontentType="text/html;charset=gb2312"%><table> <tr><tdcolspan="2"><%@includefile="top.jsp“%></td></tr> <tr> <td><%@includefile="side.jsp"%></td> <td>在這里對內容顯示區(qū)進行編碼</td> </tr> <tr><tdcolspan="2"><%@includefile="end.jsp"%></td></tr></table>2.5動作標識
在JSP中提供了一系列的使用XML語法寫成的動作標識,這些標識可用來實現(xiàn)特殊的功能,例如請求的轉發(fā)、在當前頁中包含其他文件、在頁面中創(chuàng)建一個JavaBean實例等。
動作標識是在請求處理階段按照在頁面中出現(xiàn)的順序被執(zhí)行的,動作標識通用的使用格式如下:<動作標識名稱屬性1="值1"屬性2="值2"…/>或<動作標識名稱屬性1="值1"屬性2="值2"…> <子動作屬性1="值1"屬性2="值2"…/></動作標識名稱>動作標識<jsp:include><jsp:param><jsp:forward><jsp:useBean><jsp:setProperty><jsp:getProperty><jsp:fallback><jsp:plugin>√√√√√√√√<jsp:include>
<jsp:include>動作標識用于向當前的頁面中包含其他的文件,這個文件可以是動態(tài)文件也可以是靜態(tài)文件。該標識的使用格式如下:<jsp:includepage="被包含文件的路徑"flush="true|false"/>
page屬性:該屬性指定了被包含文件的路徑,其值可以是一個代表了相對路徑的表達式。當路徑是以“/”開頭時,則按照當前應用的路徑查找這個文件;如果路徑是以文件名或目錄名稱開頭,那么將按照當前的路徑來查找被包含的文件。
或者向被包含的動態(tài)頁面中傳遞參數(shù):<jsp:includepage="被包含文件的路徑"flush="true|false"> <jsp:paramname="參數(shù)名稱"valude="參數(shù)值"/></jsp:include><jsp:include>flush屬性:表示當輸出緩沖區(qū)滿時,是否清空緩沖區(qū)。該屬性值為boolean型,默認值為false,通常情況下設為true。
<jsp:param>子標識可向被包含的動態(tài)頁面?zhèn)鬟f參數(shù)。
<jsp:include>標識對包含的動態(tài)文件和靜態(tài)文件的處理方式是不同的。如果被包含的是靜態(tài)的文件,則頁面執(zhí)行后,在使用了該標識的位置處將會輸出這個文件的內容。如果<jsp:include>標識包含的是一個動態(tài)的文件,那么JSP編譯器將編譯并執(zhí)行這個文件。不能通過文件的名稱來判斷該文件是靜態(tài)的還是動態(tài)的,<jsp:include>標識會識別出文件的類型。<jsp:include><jsp:include>動作標識與include指令都可用來包含文件,下面來介紹它們之間存在的差異。1.屬性
include指令通過file屬性來指定被包含的頁面,include指令將file屬性值看作一個實際存在的文件的路徑,所以該屬性不支持任何表達式。若在file屬性值中應用JSP表達式,則會拋出異常,如下面的代碼:<%Stringpath="logon.jsp";%><%@includefile="<%=path%>"%>該用法將拋出下面的異常:File"/<%=path%>"notfound<jsp:include><jsp:include>動作標識通過page屬性來指定被包含的頁面,該屬性支持JSP表達式。2.處理方式
使用include指令被包含的文件,它的內容會原封不動地插入到包含頁中使用該指令的位置,然后JSP編譯器再對這個合成的文件進行翻譯。所以在一個JSP頁面中使用include指令來包含另外一個JSP頁面,最終編譯后的文件只有一個。
使用<jsp:include>動作標識包含文件時,當該標識被執(zhí)行時,程序會將請求轉發(fā)到(注意是轉發(fā),而不是請求重定向)被包含的頁面,并將執(zhí)行結果輸出到瀏覽器中,然后返回包含頁繼續(xù)執(zhí)行后面的代碼。因為服務器執(zhí)行的是兩個文件,所以JSP編譯器會分別對這兩個文件進行編譯。<jsp:include>3.包含方式
使用include指令包含文件,最終服務器執(zhí)行的是將兩個文件合成后由JSP編譯器編譯成的一個Class文件,所以被包含文件的內容應是固定不變的,若改變了被包含的文件,則主文件的代碼就發(fā)生了改變,因此服務器會重新編譯主文件。include指令的這種包含過程稱為靜態(tài)包含。
使用<jsp:include>動作標識通常是來包含那些經常需要改動的文件。此時服務器執(zhí)行的是兩個文件,被包含文件的改動不會影響到主文件,因此服務器不會對主文件重新編譯,而只需重新編譯被包含的文件即可。而對被包含文件的編譯是在執(zhí)行時才進行的,也就是說,只有當<jsp:include>動作標識被執(zhí)行時,使用該識包含的目標文件才會被編譯,否則被包含的文件不會被編譯,所以這種包含過程稱為動態(tài)包含。<jsp:include>4.對被包含文件的約定使用include指令包含文件時,對被包含文件有約定。【例2-10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力行業(yè)安全風險監(jiān)控與應急響應
- 環(huán)??萍寂c教育的深度融合
- 2025年度虛擬現(xiàn)實技術研發(fā)與應用合同范本
- 2025年度環(huán)氧地坪施工與防滑性能提升合同
- 2025年度國際貿易裝船貨物質量與風險控制合同
- 電力場所消防安全管理體系建設
- 2025年度醫(yī)藥研發(fā)項目保密協(xié)議書(全新版)
- 2025年度教育貸款合同模板(含獎學金資助)
- 給員工的發(fā)言稿集錦15篇
- 2025年度水利工程建設項目施工合同質量驗收及保修期限
- 2024年英語高考全國各地完形填空試題及解析
- 2024至2030年中國餐飲管理及無線自助點單系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2024年燃氣輪機值班員技能鑒定理論知識考試題庫-下(多選、判斷題)
- 2024年服裝門店批發(fā)管理系統(tǒng)軟件項目可行性研究報告
- 交通法規(guī)課件
- (優(yōu)化版)高中地理新課程標準【2024年修訂版】
- 《Python程序設計》課件-1:Python簡介與應用領域
- 各類心理量表大全
- 體育概論(第二版)課件第三章體育目的
- DB11T 1481-2024生產經營單位生產安全事故應急預案評審規(guī)范
- 《氓》教學設計 2023-2024學年統(tǒng)編版高中語文選擇性必修下冊
評論
0/150
提交評論