當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

3. JSP指令 | JSP 啊 哦 嗯 嘻嘻
2022-05-31 17:09:59

JSP指令

JSP指令

JSP 指令的作用是為當(dāng)前頁面做一些基本的屬性設(shè)置,為當(dāng)前的頁面的運(yùn)行提供基本的環(huán)境。
在JSP中包含三類指令:

  • page,頁面指令  ? ? ? 頁面? ???[pe?d?]
  • include,包含指令
  • taglib,標(biāo)簽庫指令(此頁不講先 詳看后面【? ___? 頁】)

這些指令的使用的語法格式均為如下形式:

<%@?指令名稱??屬性名=屬性值?...?%>

一 一 介 紹:

page指令:

page指令用于設(shè)置當(dāng)前JSP頁面的相關(guān)信息, 一個 JSP中可以包含多個 page 指令,有以下幾個常用的屬性:【page 屬性 有很多很多 但具體用的到的自己去百度 這里講最基本的】:

?

記住啊 是當(dāng)前頁面有效!??!

pageEncoding 屬性

pageEncoding屬性用于設(shè)置當(dāng)前JSP頁面的字符編碼格式。

例如:

<%@?page?pageEncoding="UTF-8"?%>

該屬性被翻譯到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è)置如下:

<%@?page?contentType="text/html;charset=utf-8"?%>
作用是服務(wù)器向客戶端發(fā)送數(shù)據(jù)的時候指定的文件格式是text/html,字符編碼是utf-8。

?

你新建文件他默認(rèn)頭部會自動創(chuàng)建好 pageEncoding 和 contentType 屬性 ,而且指定好了編碼,默認(rèn)編碼上面已經(jīng)給出教程修改~~

?

import 屬性
該屬性主要用于在JSP中導(dǎo)入java包

<%@?page?import="java.util.*"?%>

在Java源碼中被翻譯為:    import java.util.*;

你也可以一條指令導(dǎo)入很多類包,用逗號隔開即可例如:

<%@?page?import="java.util.*,java.sql.SQLData"?%>

記得逗號分隔開即可

?

errorPage 屬性
該屬性主要用于指定當(dāng)前頁面運(yùn)行過程中發(fā)生異常時所要跳轉(zhuǎn)到的頁面。

<%@?page?errorPage="/error.jsp"?%>

我們測試一下 新建兩個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 對象 ! 因?yàn)槟J(rèn)是false的?。?!

注意:一個頁面別出現(xiàn)兩個errorPage屬性 不然不報錯報si你!

即配合起來兩個jsp源碼就是:

index.jsp:

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
????
????<%--?讓其出現(xiàn)異常時?我們跳到?error?的頁面??!?--%>
????<%@?page?errorPage="/error.jsp"?%>
????
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>

????????<%--?現(xiàn)在故意讓其出現(xiàn)允許時異常:??記住啊?只有允許時異常我才能?其他異常被檢測到了你就直接報錯的?。?!--%>
????????<%?
????????????System.out.print(8/0);
????????%>
</body>
</html>

error.jsp:

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>

????<%--?1.我們顯示給用戶說:?我們出現(xiàn)了異常?請聯(lián)系管理員?BIHU:?--%>
????<p?style?=?"margin:10px??auto?;font-size:?30px">異常?500?!?請聯(lián)系管理員?BIHU!</p>
????
????<%--?2.如果我們想要打印異常棧來獲取到底是哪里錯了??我們就需要配置那個?isErrorPage?為真?。?!?不然沒有exception對象變量??--%>
????<%@?page?isErrorPage="true"?%>
????
????<%????
????//????3.在控制臺中打印?異常信息:
????exception.printStackTrace();
????
????%>
</body>
</html>

?

這里強(qiáng)調(diào)2點(diǎn)!??! 千萬千萬要是允許時異常才能啊,你語法錯了那種 直接報錯的啊!

還有就是 一定要是isErrorPage屬性設(shè)置為true?。。。〔蝗粵]那個對象變量的!

一個頁面中的isErrorPage屬性被設(shè)置為true之后,在_jspService()方法中,多出了一個變量 exception。這就是內(nèi)置對象exception,可以通過該對象在控制臺打印異常信息。

?

?

session 屬性
session屬性用于指定當(dāng)前頁面中是否可以直接使用內(nèi)置對象session,默認(rèn)為 true?!   ?/意思就是說 如果你先禁用session的話! 那么你才來設(shè)置此屬性為false即可??!

?

?


include指令

包含指令, 似曾相識啊! C語言的包含頭文件的關(guān)鍵字 啊哈哈!

用于將某個文件包含到當(dāng)前的 JSP 文件中。該指令只有一個屬性 file,用于指定要包含的文件。
被包含的文件可以是 JSP 文件,也可以是 HTML文件。

這里要注意include的格式?。?他沒有等于號 直接 空格 file的啊 :

include 包含文件 格式:

?

<%@? include file="/xxxx.jsp" %>?

這里定義一個名為 jsp2.jsp 的文件,其中定義了一個變量 sum? =? 10 :

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>
????<%?int?sum?=?10;?%>
</body>
</html>

然后我們在index.jsp 包含 jsp2.jsp,看會怎么樣:

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
????
??<%--?這里包含jsp2.jsp?文件???記住include是指令?。。?!?不用page!!!!??page?也是一個指令?。。。?!????--%>
??<%@??include?file="/jsp2.jsp"?%>?
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>

<%--?因?yàn)檫@里導(dǎo)入了jsp2?所以呢?我們要在這訪問jsp2定義的sum??值是?10?--%>
????????<%?out.print(sum);?%>
</body>
</html>

上面可知我們成功訪問到了 jsp2中定義的 sum ?。?! 但是注意!include? 他是一個指令 不是屬性 別加page?。〕鯇W(xué)者總是那么內(nèi)個 對吧~~

?靜態(tài)引入變量名 別 重名?。。?! 動態(tài)就可以! 后面說為什么

找到生成java文件的目錄,里面只生成了一個 index.java 的文件,并沒有生成jsp2.java 文件。那是因?yàn)?JSP 翻譯引擎在翻譯時,會將 include 指令所指定的文件內(nèi)容直接翻譯到當(dāng)前 JSP 的java源碼中,形成一個.java 文件 ( 合并 )?。這個包含操作是在編譯之前由 JSP 翻譯引擎完成的,不是在程序運(yùn)行期完成的。這種包含通常被稱為靜態(tài)包含,與之相對的還有動態(tài)包含(后面會講到)。
由于在編譯期就將這些文件合并為了一個 java文件,所以,整個過程就一個_jspService()方法。也就是說,這些文件之間是可以相互訪問局部變量的,只要滿足變量聲明與使用的先后順序即可 (即包含文件和使用變量的順序 因?yàn)樗象w為一個java文件 所以先后會排好的.... 不然異常)。

為什么使用 include 指令
在一個web系統(tǒng)中,往往很多頁面的頭部、底部等內(nèi)容是相同的,為了減少重復(fù)性的工作和便于修改,可以將這些內(nèi)容相同的內(nèi)容單獨(dú)定義為一個jsp文件,在需要的時候直接使用include指令將其引入進(jìn)來即可,這樣不僅大大減少了工作量,還做到了對于頁面修改的”一改全改”效果。

?

?


作者:??咸瑜???

本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >