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

JSP指令

JSP指令

JSP 指令的作用是為當前頁面做一些基本的屬性設置,為當前的頁面的運行提供基本的環境。
在JSP中包含三類指令:

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

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

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

一 一 介 紹:

page指令:

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

?

記住啊 是當前頁面有效?。?!

pageEncoding 屬性

pageEncoding屬性用于設置當前JSP頁面的字符編碼格式。

例如:

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

該屬性被翻譯到java源碼里面的_jspService()方法中的 response.setContentType(“text/html;charset=UTF-8”)  你可以自己去查看一下!

如果你每次創建一個JSP文件都要改編碼的話, 你嫌麻煩 你可以在Eclipse 把它設置為 默認是UTF-8的編碼:

在eclipse中新建JSP時默認的使用ISO8859-1的編碼,此時可以通過下列步驟修改創建JSP文件的默認編碼:
windows–>preference–>Web–>JSP files,將encoding修改為utf-8即可。

?

contentType 屬性
contentType屬性用于設置當前 JSP 頁面在瀏覽器中的內容類型,通常為”text/html”,若在 JSP 頁面中設置如下:

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

?

你新建文件他默認頭部會自動創建好 pageEncoding 和 contentType 屬性 ,而且指定好了編碼,默認編碼上面已經給出教程修改~~

?

import 屬性
該屬性主要用于在JSP中導入java包

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

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

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

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

記得逗號分隔開即可

?

errorPage 屬性
該屬性主要用于指定當前頁面運行過程中發生異常時所要跳轉到的頁面。

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

我們測試一下 新建兩個jsp 其中一個故意拋出異常 他就會調到異常(error.jsp里面了?。。?/p>

該屬性會被翻譯到 Servlet 的_jspService()方法中。

但是:要配合這個屬性一起用:

isErrorPage 屬性
如果一個頁面中指定了發生異常后所要跳轉的頁面,這時將會出現一個問題:異常信息被隱藏。在控制臺看不到異常信息,在所跳轉的頁面中也看不到異常信息,這樣不利于開發者定位錯誤的原因。此時可以在發生異常后所要跳轉的頁面中將isErrorPage屬性設置為true,將其聲明為錯誤處理頁面:

什么意思呢 就是說 你異常了 跳到了 error.jsp 頁面 然后你要打印異常棧 就需要exception對象變量,默認情況下exception對象變量是不存在的

在編譯后的java中也找不到,所以你要打印異常棧的話 你就必須得在那個頁面弄個指令 然后將isErrorPage設置為true,才能召喚出 exception 對象 ! 因為默認是false的?。?!

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

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

index.jsp:

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

????????<%--?現在故意讓其出現允許時異常:??記住啊?只有允許時異常我才能?其他異常被檢測到了你就直接報錯的?。?!--%>
????????<%?
????????????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.我們顯示給用戶說:?我們出現了異常?請聯系管理員?BIHU:?--%>
????<p?style?=?"margin:10px??auto?;font-size:?30px">異常?500?!?請聯系管理員?BIHU!</p>
????
????<%--?2.如果我們想要打印異常棧來獲取到底是哪里錯了??我們就需要配置那個?isErrorPage?為真?。?!?不然沒有exception對象變量??--%>
????<%@?page?isErrorPage="true"?%>
????
????<%????
????//????3.在控制臺中打印?異常信息:
????exception.printStackTrace();
????
????%>
</body>
</html>

?

這里強調2點?。?! 千萬千萬要是允許時異常才能啊,你語法錯了那種 直接報錯的??!

還有就是 一定要是isErrorPage屬性設置為true?。。?!不然沒那個對象變量的!

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

?

?

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

?

?


include指令

包含指令, 似曾相識??! C語言的包含頭文件的關鍵字 啊哈哈!

用于將某個文件包含到當前的 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>

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

上面可知我們成功訪問到了 jsp2中定義的 sum ?。?! 但是注意!include? 他是一個指令 不是屬性 別加page??!初學者總是那么內個 對吧~~

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

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

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

?

?


作者:??咸瑜???

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


更多科技新聞 ......

欧美五月丁香六月综合合_成年在线视频免费观看完整版_交换国产精品视频一区_免费一本色道久久一区