JSP指令
JSP指令
JSP 指令的作用是為當(dāng)前頁面做一些基本的屬性設(shè)置,為當(dāng)前的頁面的運行提供基本的環(huán)境。
在JSP中包含三類指令:
- page,頁面指令 ? ? ? 頁面? ???[pe?d?]
- include,包含指令
- taglib,標(biāo)簽庫指令(此頁不講先 詳看后面【? ___? 頁】)
這些指令的使用的語法格式均為如下形式:
一 一 介 紹:
page指令:
page指令用于設(shè)置當(dāng)前JSP頁面的相關(guān)信息, 一個 JSP中可以包含多個 page 指令,有以下幾個常用的屬性:【page 屬性 有很多很多 但具體用的到的自己去百度 這里講最基本的】:
?
記住啊 是當(dāng)前頁面有效!?。?/p>
pageEncoding 屬性
pageEncoding屬性用于設(shè)置當(dāng)前JSP頁面的字符編碼格式。
例如:
該屬性被翻譯到j(luò)ava源碼里面的_jspService()方法中的 response.setContentType(“text/html;charset=UTF-8”) 你可以自己去查看一下!
如果你每次創(chuàng)建一個JSP文件都要改編碼的話, 你嫌麻煩 你可以在Eclipse 把它設(shè)置為 默認(rèn)是UTF-8的編碼:
在eclipse中新建JSP時默認(rèn)的使用ISO8859-1的編碼,此時可以通過下列步驟修改創(chuàng)建JSP文件的默認(rèn)編碼:
windows–>preference–>Web–>JSP files,將encoding修改為utf-8即可。
?
contentType 屬性
contentType屬性用于設(shè)置當(dāng)前 JSP 頁面在瀏覽器中的內(nèi)容類型,通常為”text/html”,若在 JSP 頁面中設(shè)置如下:
?
你新建文件他默認(rèn)頭部會自動創(chuàng)建好 pageEncoding 和 contentType 屬性 ,而且指定好了編碼,默認(rèn)編碼上面已經(jīng)給出教程修改~~
?
import 屬性
該屬性主要用于在JSP中導(dǎo)入java包
在Java源碼中被翻譯為: import java.util.*;
你也可以一條指令導(dǎo)入很多類包,用逗號隔開即可例如:
記得逗號分隔開即可
?
errorPage 屬性
該屬性主要用于指定當(dāng)前頁面運行過程中發(fā)生異常時所要跳轉(zhuǎn)到的頁面。
我們測試一下 新建兩個jsp 其中一個故意拋出異常 他就會調(diào)到異常(error.jsp里面了?。。?/p>
該屬性會被翻譯到 Servlet 的_jspService()方法中。
但是:要配合這個屬性一起用:
isErrorPage 屬性
如果一個頁面中指定了發(fā)生異常后所要跳轉(zhuǎn)的頁面,這時將會出現(xiàn)一個問題:異常信息被隱藏。在控制臺看不到異常信息,在所跳轉(zhuǎn)的頁面中也看不到異常信息,這樣不利于開發(fā)者定位錯誤的原因。此時可以在發(fā)生異常后所要跳轉(zhuǎn)的頁面中將isErrorPage屬性設(shè)置為true,將其聲明為錯誤處理頁面:
什么意思呢 就是說 你異常了 跳到了 error.jsp 頁面 然后你要打印異常棧 就需要exception對象變量,默認(rèn)情況下exception對象變量是不存在的
在編譯后的java中也找不到,所以你要打印異常棧的話 你就必須得在那個頁面弄個指令 然后將isErrorPage設(shè)置為true,才能召喚出 exception 對象 ! 因為默認(rèn)是false的?。?!
注意:一個頁面別出現(xiàn)兩個errorPage屬性 不然不報錯報si你!
即配合起來兩個jsp源碼就是:
index.jsp:
error.jsp:
?
這里強(qiáng)調(diào)2點?。?! 千萬千萬要是允許時異常才能啊,你語法錯了那種 直接報錯的??!
還有就是 一定要是isErrorPage屬性設(shè)置為true?。。?!不然沒那個對象變量的!
一個頁面中的isErrorPage屬性被設(shè)置為true之后,在_jspService()方法中,多出了一個變量 exception。這就是內(nèi)置對象exception,可以通過該對象在控制臺打印異常信息。
?
?
session 屬性
session屬性用于指定當(dāng)前頁面中是否可以直接使用內(nèi)置對象session,默認(rèn)為 true。 //意思就是說 如果你先禁用session的話! 那么你才來設(shè)置此屬性為false即可?。?/p>
?
?
include指令
包含指令, 似曾相識啊! C語言的包含頭文件的關(guān)鍵字 啊哈哈!
用于將某個文件包含到當(dāng)前的 JSP 文件中。該指令只有一個屬性 file,用于指定要包含的文件。
被包含的文件可以是 JSP 文件,也可以是 HTML文件。
這里要注意include的格式?。?他沒有等于號 直接 空格 file的啊 :
include 包含文件 格式:
?
<%@? include file="/xxxx.jsp" %>?
這里定義一個名為 jsp2.jsp 的文件,其中定義了一個變量 sum? =? 10 :
然后我們在index.jsp 包含 jsp2.jsp,看會怎么樣:
上面可知我們成功訪問到了 jsp2中定義的 sum ?。?! 但是注意!include? 他是一個指令 不是屬性 別加page??!初學(xué)者總是那么內(nèi)個 對吧~~
?靜態(tài)引入變量名 別 重名?。。?! 動態(tài)就可以! 后面說為什么
找到生成java文件的目錄,里面只生成了一個 index.java 的文件,并沒有生成jsp2.java 文件。那是因為 JSP 翻譯引擎在翻譯時,會將 include 指令所指定的文件內(nèi)容直接翻譯到當(dāng)前 JSP 的java源碼中,形成一個.java 文件 ( 合并 )?。這個包含操作是在編譯之前由 JSP 翻譯引擎完成的,不是在程序運行期完成的。這種包含通常被稱為靜態(tài)包含,與之相對的還有動態(tài)包含(后面會講到)。
由于在編譯期就將這些文件合并為了一個 java文件,所以,整個過程就一個_jspService()方法。也就是說,這些文件之間是可以相互訪問局部變量的,只要滿足變量聲明與使用的先后順序即可 (即包含文件和使用變量的順序 因為他合體為一個java文件 所以先后會排好的.... 不然異常)。
為什么使用 include 指令
在一個web系統(tǒng)中,往往很多頁面的頭部、底部等內(nèi)容是相同的,為了減少重復(fù)性的工作和便于修改,可以將這些內(nèi)容相同的內(nèi)容單獨定義為一個jsp文件,在需要的時候直接使用include指令將其引入進(jìn)來即可,這樣不僅大大減少了工作量,還做到了對于頁面修改的”一改全改”效果。
?
?
作者:??咸瑜???
本文摘自 :https://blog.51cto.com/u