天天看點

《Servlet和JSP學習指南》一3.4 指令

指令(directive)是第一種jsp句法元素,其訓示jsp轉換器應該如何将某個jsp頁面轉換成servlet的指令。jsp 2.2中定義了幾個指令,但最重要的是這兩個:page和include,這些在本章中都會讨論到。其他章節中還會講到的其他指令有:taglib、tag、attribute及variable。

利用page指令可以就目前jsp頁面的某些方面對jsp轉換器提出訓示。例如,可以告訴jsp轉換器隐式對象out應該使用多大容量的緩存區,要使用哪種内容類型,要導入哪些java類型等。

page指令的文法如下:

《Servlet和JSP學習指南》一3.4 指令

@和page之間的空格是可選的,attribute1、attribute2等都是page指令的屬性。下面是page指令的屬性清單:

import。指定要導入的一種或多種java類型,供本頁的java代碼所用。例如,import="java.util.list"導入list接口。利用通配符還可以導入整個包,如import= "java.util."。導入多種類型時,兩種類型之間要用一個逗号隔開,如import="java.util.arraylist,java.util.calendar,java.io.printwriter"。下面這些包中的所有類型都是隐式導入的:java.lang、javax.servlet、javax.servlet.http、javax.servlet.jsp。

session。值為true時,表示這個頁面參與session管理;值為false時,表示不參與session管理。預設值為true,意味着如果之前還沒有javax.servlet.http.httpsession執行個體,那麼調用jsp頁面将始終會建立一個。

buffer。指定隐式對象out的緩沖區大小,以千位元組為機關。強制以kb作為字尾。緩沖區的預設容量大于或等于8 kb,具體取決于jsp容器。這個屬性值還可以為none,表示不使用緩存,但這樣會導緻輸出的内容直接被寫入相應的printwriter。

autoflush。預設值為true,表示當緩沖區滿時,被緩存的輸出應該自動重新整理。值為false時,表示隻有在調用隐式對象response的flush方法時,才進行重新整理緩沖區。是以,當緩沖區溢出時會抛出一個異常。

isthreadsafe。表示頁面中實作的線程安全級别。建議jsp的作者不要使用這個屬性,因為它會産生一個包含不建議使用的代碼的servlet。

info。指定所生成servlet的getservletinfo方法傳回值。

errorpage。表示負責處理該頁面可能出現的錯誤的頁面。

iserrorpage。表明這個頁面是否負責處理錯誤。

contenttype。指定該頁面隐式對象response的内容類型,其預設值為text/html。

pageencoding。指定該頁面的字元編碼,其預設值為iso-8859-1。

iselignored。表明是否忽略el表達式。el是expression language的縮寫,将在第4章中讨論。

language。指定該頁面使用的腳本語言,其預設值為java,這是jsp 2.2中唯一有效的值。

extends。指定這個jsp頁面的實作類必須擴充的超類。該屬性很少使用,使用時應該特别小心。

deferredsyntaxallowedasliteral。指明是否允許用字元序列#{作為該頁面和編譯單元的string字面值,其預設值為false。#{很重要,因為它在expression language中是一個特殊的字元序列(詳情檢視第4章的相關内容)。

trimdirectivewhitespaces。表明是否從輸出内容中删除隻包含空格的模闆文本,其預設值為false,也就是說,不删除空格。

page指令可以出現在頁面中的任何位置。隻是當它包含contenttype或者pageencoding屬性時,它就必須放在所有的模闆資料之前,并且是在利用java代碼發送任何内容之前。這是因為,必須在發送任何内容之前設定内容類型和字元編碼。

page指令也可以多次出現。但是,在多個page指令中多次出現的同一個屬性,它的值必須一緻,隻有import屬性例外。放在多個page指令中的import屬性,其效果可以累積。例如,下面的page指令将會同時導入java.util.arraylist和java.io.file。

《Servlet和JSP學習指南》一3.4 指令

其結果與下面這行代碼的相同:

《Servlet和JSP學習指南》一3.4 指令

下面再舉個例子。這個page指令将session屬性值設為false,并将頁面的緩沖區容量設為16 kb:

《Servlet和JSP學習指南》一3.4 指令

利用include指令可以将另一個檔案的内容放到目前的jsp頁面中。在一個jsp頁面中可以使用多個include指令。如果某部分特殊的内容需要被其他頁面所用,或者被處于不同位置的某個頁面所用,那麼将這部分内容做成一個include檔案是很有幫助的。

include指令的文法如下:

《Servlet和JSP學習指南》一3.4 指令

此處@和include之間的空格是可選的,并且url是表示一個include檔案的相對路徑。如果url以一個正斜線(/)開頭,那麼其在伺服器中就會被解讀成是一條絕對路徑。如果不是以正斜線開頭,則被解讀為是相對于目前jsp頁面的路徑。

jsp轉換器轉換include指令時,用include檔案的内容替換指令。換句話說,如果已經寫好如代碼清單3-4所示copyright.jspf檔案。

f

《Servlet和JSP學習指南》一3.4 指令

同時,又有如代碼清單3-5所示的main.jsp頁面。

《Servlet和JSP學習指南》一3.4 指令

那麼,在main.jsp頁面中使用include指令時,其結果與編寫以下jsp頁面将是一樣的。

《Servlet和JSP學習指南》一3.4 指令

為了讓上述include指令生效,copyright.jspf檔案必須與所包含的頁面放在同一個目錄下。

按照規範,include檔案的擴充名應為jspf,表示為jsp fragment。如今,jsp fragment也稱作jsp segment,隻是為了保持一緻,仍然用jspf作為擴充名。

注意,也可以包含靜态的html檔案。

本章稍後将講到的include action,與include指令類似。這兩者之間的細微差别将在3.6節中解釋,要了解這兩者之間的差别,這一點很重要。