jsp中的三個指令
一、JSP的3個指令
JSP指令(directive)是為JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其餘部分。
指令用來申明JSP頁面的一些屬性,比如編碼方式,文件型別。我們在servlet中也會申明我們使用的編碼方式和響應的文件型別的,而JSP就是用指令來申明。上面我們也說到了一條指令,也就是page指令。
JSP指令格式:<%@ directive {attribute=value}* %>(<%@ 指令名稱 屬性1=“屬性值1” 屬性2=“屬性值2”。。。%>)
分析:
directive:指令名稱,例如page指令
attribute=value:緊跟指令名稱後面的就是各種屬性,以鍵值對的形式書寫
*:代表後面能跟0個或多個屬性。
1.1、page指令(用來宣告JSP頁面的屬性等)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> page指令,後面跟著三個屬性,分別是language、contentType、pageEncoding。
這只是其中的幾個屬性,並沒有寫全,page指令允許的屬性如下表所示:
屬性名稱 取值範圍 描述
language java 解釋該JSP檔案時採用的語言,一般為java語言,預設為java
extends 任何類的全名 編譯該JSP檔案時繼承哪個類,JSP為Servlet,因此當指明繼承普通類時需要實現Servlet的init、destroy等方法
import 任何包名、類名 引入該JSP中用到的類、包等,import是唯一可以宣告多次的page指令屬性,一個import可以引用uogelei,中間用英文逗號隔開,
如<%@ page import="java.util.List,java.util.ArrayList"%>
session true、false 該JSP內是否內建Session物件,如果為true,則內建Session物件,可直接使用,否則反之,預設為true
autoFlush true,false 是否執行快取,如果為true,則使用out.println()等方法輸出的字串並不是立刻到達客戶端伺服器的,而是暫時存到快取裡,快取滿
了或者程式執行完畢或者執行out.flush()操作時才到客戶端,預設為true。
buffer none或者數字KB 指定快取大小,當autoFlush設為true時有效,例如<%@ page buffer=10kb%>
isThreadSafe true,false 是否執行緒安全,如果為true,則執行多個執行緒同時執行該jsp程式,否則只執行一個執行緒,其餘執行緒等待,預設為false
isErrorPage true,false 指定該頁面是否為錯誤顯示頁面,如果為true,則該JSP內建有一個Exception物件exception,可直接使用,否則沒有,預設為false
errorPage 某個JSP頁面的相對路徑 指明一個錯誤頁面,如果該JSP程式丟擲一個未捕捉的異常,則轉到errorPage指定的頁面,errorPage指定的頁面通常
isErrorPage屬性為true,且內建的exception物件為未捕捉的異常
contentType 有效的文件型別 客戶端瀏覽器根據該屬性判斷文件型別,例如 HTML格式為text/html、純文字格式為text/plain、JPG影象為image/jpeg、GIF影象為image/gif、
WORD文件為application/msword,該屬性常跟著charset設定編碼一起,作用是通知伺服器和瀏覽器都使用同一個碼錶
info 任意字串 指明JSP的資訊,該資訊可以通過Servlet.getServletInfo()方法獲取到
trimDirective Whitespaces true、false 是否去掉指令前後的空白字元,預設為false
pageEncoding UTF-8,ISO-8859-1等 指定一張碼錶來對該JSP頁面進行編碼
1.2、include指令
比較簡單,只有一種形式 <%@ include file="relativeURL"%> relativeURL:本應用程式內另一個JSP檔案或者HTML檔案的路徑,例如,網址內所有頁面均有一個統一風格的導航欄和頁尾版權,那麼就可以使用該指令將其包含進來。
特點:include指令會將包含頁面的原始碼新增到使用include指令的頁面中來,然後編譯成class檔案,而等下會講到的一個JSP行為,<jsp:include page="relativeURL">作用跟include指令一樣,
但是不同的是,include行為是執行時單獨執行包含頁面,然後把執行的結果包含到本頁面來,屬於先執行後包含。
注意:
靜態包含:把其它資源包含到當前頁面中。
<%@ include file="/include/header.jsp" %>
動態包含:
<jsp:include page="/include/header.jsp"></jsp:include>
兩者的區別:翻譯的時間段不同
前者:在翻譯時就把兩個檔案合併
後者:不會合並檔案,當代碼執行到include時,才包含另一個檔案的內容。
原則:能用靜的就不用動的。
1.3、taglib指令
JSP支援標籤技術,後面會講到標籤的用法,jstl標籤庫的使用等,
作用:用來指明JSP頁面內使用的JSP標籤庫,taglib指令有兩個屬性,uri為類庫的地址,prefix為標籤的字首
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>