以下內容引用自http://wiki.jikexueyuan.com/project/jsp/directives.html:
JSP指令(Directives)為容器提供方向和指導,告訴它如何處理JSP過程的某些方面。
JSP指令影響Servlet類的總體結構。它通常具有以下形式:
<%@ directive attribute="value" %>
指令有若干個屬性,可以以鍵-值對的形式列出並由逗號分隔。
@符號和指令名稱之間的空格,以及最后一個屬性和結束標志%>之間的空格,是可選的。
指令標簽有三種類型:
指令 | 描述 |
---|---|
<%@ page ... %> | 定義page-dependent屬性,比如腳本語言,錯誤頁面和緩沖要求。 |
<%@ include ... %> | 包含在轉換階段的文件。 |
<%@ taglib ... %> | 聲明了一個用於頁面中的標簽庫,包括自定義操作。 |
一、頁面指令
頁面指令用於為屬於當前JSP頁面的容器提供指示。可以在JSP頁面的任何地方編寫頁面指令代碼。按照慣例,通常在JSP頁面的頂部編寫頁面指令代碼。
下面是頁面指令的基本語法:
<%@ page attribute="value" %>
可以編寫等同於上述語法的XML,如下所示:
<jsp:directive.page attribute="value" />
二、屬性
以下是頁面指令相關的屬性列表:
屬性 | 目的 |
---|---|
buffer | 指定一個輸出流的緩沖模型。 |
autoFlush | 控制Servlet輸出緩沖區的行為。 |
contentType | 定義了字符編碼方案。 |
errorPage | 定義了Java未檢查運行時異常報告的另一個JSP的URL。 |
isErrorPage | 表明這個JSP頁面是否是由另一個JSP頁面的errorPage屬性指定的URL。 |
extends | 指定一個超類,生成的Servlet必須擴展 |
import | 指定在JSP中使用的包或類的列表,正如Java導入聲明為Java類所做的相同。 |
info | 定義一個字符串,可以訪問Servlet的getServletInfo()方法。 |
isThreadSafe | 為生成的Servlet定義線程模型。 |
language | 定義了在JSP頁面中使用的編程語言。 |
session | 指定JSP頁面是否參與HTTP會話 |
isELIgnored | 指定JSP頁面中的EL表達式中是否將被忽略。 |
isScriptingEnabled | 決定是否允許使用腳本元素。 |
三、包含指令
包含指令用於在轉換階段包含一個文件。這個指令告訴容器在轉換階段將其他外部文件的內容與當前JSP合並。可以在JSP頁面中的任何位置編寫include指令。
一般使用這個指令的形式如下:
<%@ include file="relative url" >
包含指令中的文件名實際上是一個相對URL。如果只指定一個文件名而沒有相關路徑,JSP編譯器就會假定文件與JSP在同一個目錄下。
可以編寫等同於上述語法的XML,如下所示:
<jsp:directive.include file="relative url" />
示例:
include指令的一個很好的例子是一個具有多頁內容的公共頁眉和頁腳。
定義以下三個文件(a)header.jps,(b)footer.jsp和(c)main.jsp如下:
以下是header.jsp內容的:
<%! int pageCount = 0; void addCount() { pageCount++; } %> <% addCount(); %> <html> <head> <title>The include Directive Example</title> </head> <body> <center> <h2>The include Directive Example</h2> <p>This site has been visited <%= pageCount %> times.</p> </center> <br/><br/>
以下是內容footer.jsp中 -
<br/><br/> <center> <p>Copyright © 2010</p> </center> </body> </html>
最后這里是main.jsp的內容-
<%@ include file="header.jsp" %> <center> <p>Thanks for visiting my page.</p> </center> <%@ include file="footer.jsp" %>
現在把所有這些文件保存在根目錄下,並嘗試訪問main.jsp。
刷新main.jsp,會發現頁面匹配計數器不斷增加。
四、taglib指令
JSP API允許用戶定義自定義的JSP標簽,看起來像HTML或XML標簽,且標簽庫是一組用戶定義的標簽,能夠實現自定義的行為。
taglib指令聲明了JSP頁面使用一組自定義標簽,識別庫的位置,並提供方法來確定JSP頁面中的自定義標簽。
taglib指令遵循以下語法:
<%@ taglib uri="uri" prefix="prefixOfTag" >
其中,uri屬性值解析為容器理解的一個位置,prefix屬性通知容器什么標記是自定義操作。
可以編寫相當於上述的語法的XML,如下所示:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
示例:
例如,假設custlib標簽庫包含一個名為hello的標簽。如果想使用一個前綴為mytag的hello標簽,標簽將是<mytag:hello>,它將在JSP文件中被使用如下:
<%@ taglib uri="http://www.example.com/custlib" prefix="mytag" %> <html> <body> <mytag:hello/> </body> </html>
測試工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test2