JSP系列二:JSP指令元素:page指令,include指令,taglib指令

來源:互聯網
上載者:User

JSP指令元素:page指令,include指令,taglib指令

一,指令元素(directive elements):控制所產生的servlet結構。

 JSP指令用於“轉換階段”提供整個JSP頁面的相關資訊,影響由JSP頁面產生的Servlet的整體結構。
 指令不會產生任何的輸出到當前的輸出資料流中。
 
 1,指令元素文法:
  <%@ directive {attr="value"}* %>
   說明:
  <和% 以及和@,%和>之間不能有任何的空格。
  屬性值兩邊的雙引號可以替換為單引號。引號標記不能完全省略。
  在屬性中使用引號使用/進行轉義。
 2,指令的xml文法:
  <jsp:directive.directiveType attr="value1" attr="value2" ... />
 
  在編寫XML相容的jsp頁面時,只要不在同一頁面中混用xml文法和標準文法,就可以使用指令的xml相容模式。
 
 3,指令的三種類型:
  page,include,taglib。

二,page指令 : 用於設定JSP頁面的屬性,這些屬性將用於和JSP容器通訊,控制所產生的servlet結構。

 page指令作用整個JSP頁面,可以將怕個指令放在文檔中任何地方。
 
     a,page指令的文法:
  <%@ page attr="value1" attr="value2" ... %>
  
  xml文法格式的page指令:
   <jsp:directive.page attr="value1" attr="value2" ... />
 
     b,page指令的13個屬性
 
 1,import屬性:page指令中唯一容許在同一文檔出現多次的屬性。屬性的值可以以逗號隔開。
  指定jsp頁面轉換成servlet應該輸入的包。對於沒有明確指定包的類,將根據jsp頁面所在的包(產生的servlet的目錄)決定類的包的位置。
  這意味著,將在jsp頁面所在的包來尋找該類。

  一定要將工具 + 生產力類和bean包放在指定的包中。不要依賴於自動匯入。

 2,language屬性:
  用於指定在指令碼元素中使用的指令碼語言,預設java。在jsp2.0規範中,只能是java。 
 
 3,contentType和pageEncodeing屬性:
  contentType屬性設定發送到用戶端文檔的響應前序的MIME類型和字元編碼。多個使用;號分開。
  pageEncodeing屬性只用於更改字元編碼。
  
  servlet預設MIME是text/plain,jsp預設MIME是text/html。
  
 3,session屬性:控制頁面是否參與會話

  預設true。如果存在已有會話,則預定義session變數,綁定到已有會話中。否則建立新會話將其綁定到session。
  對於高流量網站,設定false可以節省大量伺服器記憶體。
  設定false表示不自動建立新會話,在jsp頁面轉換為servlet時,這時對變數session的訪問導致錯誤。
  設定為false並不是禁用會話跟蹤,它只是阻止jsp頁面為不擁有會話的使用者建立新會話。

  * 對於不需要會話跟蹤的頁面那就設定為false;當設定為false時session對象是不可訪問的。

 4,isELlgnored屬性: 
  定義在jsp頁面中是否執行或忽略EL運算式。true表示忽略,false表示執行。
  預設值依賴於web.xml的版本。servlet2.3之前預設true,servlet2.4預設false。
  用於JSP版本不一致造成使用EL運算式出現的問題。使用:isELlgnored="true";

 5,buffer和autoFlush屬性:
  buffer屬性指定out對象(JspWriter)使用的緩衝區大小,以kb為單位,預設8kb。
  none表示不使用緩衝區。這樣要求設定前序或狀態碼的jsp元素要出現在檔案的頂部,任何HTML內容之前。

  autoFlush屬性控制當緩衝區滿了後,是自動清空輸出緩衝區(預設true),還是在緩衝區溢位後拋出異常(false)。
  在buffer=none的時候,autoFlush=false是錯誤的。
  
 6,info屬性:
  定義一個可以在servlet中通過getServletInfo方法擷取的字串。

  jsp容器做的是在servlet中產生getServletInfo方法返回info屬性指定的String。

 7,errorPage和isErrorPage屬性:指定頁面專用的錯誤頁面。
  errorPage屬性用來指定一個jsp頁面,由該頁面來處理當前頁面中拋出但沒有捕獲的任何異常。指定的頁面可以通過exception變數訪問異常資訊。
  isErrorPage屬性工作表示當前頁是否可以作為其他jsp頁面的錯誤頁面。true或false。
  錯誤頁面應該放在WEB-INF目錄下面,只讓伺服器訪問,也不會產生轉寄的調用,用戶端只能看到最初的請求頁面URL,看不到錯誤頁面的URL。
  
  如果為整個web應用程式指定錯誤頁面,或為應用中不同類型的錯誤指定錯誤處理頁面,使用web.xml中的error-page元素。

  如果一個頁面通過該屬性定義了專有的錯誤頁面,那麼在web.XML檔案中定義的任何錯誤頁面不會被使用。
  
  只能夠在錯誤處理頁面中使用錯誤對象exception。

 8,isThreadSafe屬性:採用顯式的同步來代替該方法。
  控制由jsp頁面產生的servlet是否允許並發訪問(預設true允許)。
  這種阻止並發訪問的實現是基於SingleThreadModel介面。所以,避免使用isThreadSafe屬性。
  
 9,extends屬性:避免使用。這是伺服器供應商該做的事情。父類必須是對HttJspPage介面的實作類別。而HttJspPage是應用於HTTP協議的請求和響應的JspPage擴充介面。
  指定JSP頁面產生的servlet的超類。

三,include指令:在頁面轉換期間將檔案包含到jsp頁面。

 include指令用於在jsp頁面中靜態包含一個檔案,該檔案可以是jsp頁面,html頁面,文字檔或一段Java代碼。
      在首頁面“轉換為servlet前”將jsp代碼插入。被包含的頁面發生更改的時候,首頁面也要更新(轉譯)。
 對於檔案包含,使用jsp:include。僅在所包含的檔案中定義了首頁面需要的欄位和方法,或者所包含的檔案設定了首頁面的響應前序時,才使用include指令。
 
 1,include文法:
  <%@ include file="url"%>
  file的屬性值被解釋為相對於當前jsp檔案的URL.

 2,在被包含的檔案中不要使用和首頁重複的HTML標籤。這樣會影響原jsp檔案中同樣的標籤導致錯誤。
    因為原檔案和被包含檔案可以互相訪問彼此定義的變數和方法,所以要避免變數和方法在命名上的問題。 
   
 3,在jsp中,只要有3種功能可以將外部內容包含到JSP文檔中。
  a,jsp:include動作
   
  b,include指令
   
  c,jsp:plugin動作

 4,include指令:
  伺服器將被包含檔案內容每位元組插入到首頁面中,然後將產生的頁面作為單個JSP頁面進行處理。
    
 5,jsp:include動作:在“請求”期間將其他頁面的“輸出”包含進來。這樣的行為和RequestDispatcher類的include方法完全相同。
   
   優點:包含頁面被更改,無需對首頁面做修改。
   缺點:被包含頁面不能使用任何有可能影響首頁面的jsp構造。
    也就是不能將完整的HTML文檔作為被包含頁面,只能含有適合於出現在檔案插入點的HTML標籤。
   
   參數(使用jsp:param動作元素增加請求參數):
    在被包含頁面與首頁面使用相同的請求對象。可以在被包含頁面“看到”首頁面的參數,而在首頁面“看不到”被包含頁面的參數。

  a,page屬性:指定所包含的頁面,應該是指向某種資源的相對URL.
   相對URL不以/開頭,則表示為相對於首頁面的位置。以/開頭表示相對於WEB應用的根目錄。
   如果由伺服器來處理該資源,按相對於當前web應用進行解釋;只有瀏覽器處理該資源時,按相對於伺服器的根目錄來解釋。
   
   對於/開頭的URL,伺服器總是相對於當前web應用對它進行解釋,瀏覽器總是相對於伺服器的根目錄來對它進行解釋。 

   可以將要包含的頁面放在WEB-INF目錄下面,對用戶端隱藏。
  
  b,flush屬性:指定將頁麵包含進來之前是否應該清空首頁面的輸入資料流(預設false)。

 6,include指令和jsp:include動作的區別:
  調用的時間:
   jsp:include動作在“請求期間”被包含。
   include指令在“轉換期間”被包含。
  包含的內容:
   jsp:include動作是包含jsp頁面或servlet的“輸出”和HTML文本。
   include指令是檔案的實際內容。

  最終轉換的servle個數:
   jsp:include動作在請求期間,會將被請求頁面轉譯為獨立的servlet。和首頁面的servlet對應。
   include指令在轉換期間將被包含頁面的內容插入到首頁面中,得到首頁面轉譯成的servlet。
  
  可否設定影響首頁面的響應前序和參數:
   jsp:incurred動作不可以,include指令可以。
  更新:
   jsp:include動作是在請求期間被插入所以他的更改不需要更新首頁面。
   include指令的更新意味著首頁面servlet的更新。
 

四,taglib指令:聲明使用者使用的自訂標籤。

 聲明使用者使用自訂的標籤,將標籤庫描述符檔案匯入到jsp頁面。

 taglib指令文法:
  <%@ taglib (uri="tigLibURL" 或 tagDir="tagDir") prefix="tagPrefix" %>

  uri屬性:定位標籤庫描述符的位置。唯一標識和首碼相關的標籤庫描述符,可以使用絕對或相對URL。
  tagDir屬性:指示首碼將被用於標識在WEV-INF/tags目錄下的標籤檔案。

  prefix屬性:標籤的首碼,區分多個自訂標籤。不可以使用保留首碼和空首碼,遵循XML命名空間的命名規範。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.