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