Jsp指令元素分類與書寫格式:
書寫格式:
<%@ 指令類型 屬性="值" .. %>
分類:
【page include taglib】三種。
根據名字就能知道指令含義:page主要是對頁面進行操作,include主要是對導入進行操作,taglib主要是對標簽庫進行操作
1,page指令:
errorPage="error.jsp"
如果a.jsp頁面中設置了errorPage="error.jsp",那么a.jsp頁面在運行時【一旦出錯】 就會【自動跳轉到error.jsp】里面.
isErrorPage="true"
如果一個頁面中設置了isErrorPage="true",那么就表示這個【頁面是用來專門顯示 錯誤信息】的頁面。
另外在這個頁面中【能夠使用到隱藏對象exception】來顯示出錯誤的信息.(需要使 用jsp的內置對象)
eg:<% @page isErrorPage="true " %>
language屬性 language="java"
表示當前頁面中的編程語言是java;
目前這個屬性值只能寫java,不支持其他語言。
contentType屬性
contentType="text/html; charset=UTF-8"
設置服務器將來使用io把jsp頁面內容輸出給瀏覽器時,使用什么編碼向 瀏覽器輸出。
pageEncoding屬性
pageEncoding="UTF-8"
設置jsp頁面文件保存時候所用的編碼
2,include指令
一個頁面包含/引入另外一個頁面有倆種方式:
靜態包含 動態包含。
靜態包含基本格式:
<%@ include file="" %>
作用:
在當前頁面中使用include指令可以把另外一個頁面的內容引入到當前頁面。
靜態include是先把被包含文件的內容全部復制內嵌到包含文件中,再進行編譯運行的,所以b中的變量等不能與a重復,否則會報錯
動態包含:
<jsp:include page="foot.jsp">
特點:執行到了include語句的時候才觸發被包含文件的編譯、執行,並實時把結果包含進來。
動態包含與靜態包含的區別?
兩者都可以包含進來其他頁面;
a. 動態包含是動態標簽jsp:include實現
靜態包含是由指令元素 <%@ include file="" %>實現;
b. 靜態包含原封不動載入;動態包含翻譯成方法調用;
c. 靜態包含不能傳參;動態包含可以傳參。
傳參出現中文亂碼,過濾器可以解決;
動態include與靜態include的最大不同在於:包含文件與被包含文件都是先編譯執行,再包含。二者的編譯階段是相互獨立的,只有在包含文件的include語句處把被包含文件的執行結果包含進來
總結:
靜態包含執行效率會更快,但是有可能發生變量沖突的問題。另外使用靜態包含如果包含的文件發生了變化的話,所有包含它的servlet都要重新編譯更新,這是一個很大的代價。通常情況下使用動態包含比較多。
3,taglib指令
該指令的作用是在當前jsp頁面中【引入一些特殊的標簽庫】.
比如jstl標簽庫、struts2標簽庫等。
jsp的動作元素
在jsp文件中,我們之前嵌入的java代碼和標簽配合出現,整體風格比較亂,不利用改動與維護,且代碼量過於龐大。
把常見的一些java代碼進行封裝,就得到了jsp中的動作標簽。
注意:jsp中盡可能不要出現java代碼。
Jsp和servlet的聯系:
jsp完全可以實現servlet的功能,但實際開發里面並不單獨使用一種,還是需要配合使用。
JSP和Servlet分工不同:
Servlet用來接收數據,頁面跳轉;
jsp用來動態顯示頁面內容。