肥桃的Java學習記錄22:JSP
1.什麼是JSP
JSP全名為Java Server Pages,中文名叫java伺服器頁面,其根本是一個簡化的Servlet設計,它 是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML檔案(.htm,.html)中插入Java程式段(Scriptlet)和JSP標記(tag),從而形成JSP檔案,字尾名為 (.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下執行,也能在其他作業系統上執行。
JSP將網頁邏輯與網頁設計的顯示分離,支援可重用的基於元件的設計,使基於Web的應用程式的開發變得迅速和容易。
.html 靜態頁面(包含固定的頁面內容)
.jsp 動態頁面(頁面資料可以動態更新,支援巢狀java程式碼和html程式碼)
2.JSP為什麼會出現
1.servlet展示資訊的不方便,引入了JSP。
2.JSP本質上也是一個servlet
3.JSP就是在HTML頁面中嵌入了java程式碼。
3.JSP中如何巢狀java程式碼
小指令碼(<% java程式碼%>)
宣告標籤 <%!變數或者方法宣告%>
表示式標籤 <%= 表示式%> 在頁面上顯示的效果
程式程式碼標籤 <%java程式碼%> 頁面上動態展示內容
page指令:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<body>
<%! int i=10;%><!--成員變數-->
<%! public void show(){}%> <!--成員方法-->
<%=i%> <!--輸出變數值-->
</body>
如果把一個資料存在request域中,取值操作如下:
jsp中的註釋
<!-- html註釋內容,檢視原始碼時能看到 -->
<%-- jsp註釋,檢視頁面原始碼時看不到 --%>
在Tomcat設定中可設定成隨時Update 這樣可以不同頻繁重啟。
4.JSP的原理
當瀏覽器訪問http://localhost:8080/day9_1/index.jsp。伺服器發現字尾為.jsp,它會根據路徑找到index.jsp文 件,會將index.jsp翻譯成index_jsp.java檔案,對這個java檔案進行編譯,產生一個index_jsp.class檔案,將class 檔案載入執行。將JSP翻譯成java檔案,它是將JSP中的所有的HTML程式碼通過流進行輸出,也就是說最終翻譯成class,被虛擬機器載入,它本質是servlet,它就會往回響應,響應回去就是把JSP中的HTML程式碼以流的方式寫回瀏覽器。所以在JSP中展示出了HTML程式碼
5.JSP的內建物件
JSP中一共預先定義了9個這樣的物件,分別為:request、response、session、application、out、pagecontext、config、page、exception
1、request物件
request 物件是 javax.servlet.httpServletRequest型別的物件。 該物件代表了客戶端的請求資訊,主要用於接受通過HTTP協議傳送到伺服器的資料。(包括頭資訊、系統資訊、請求方式以及請求引數等)。request物件的 作用域為一次請求。
2、response物件
response 代表的是對客戶端的響應,主要是將JSP容器處理過的物件傳回到客戶端。response物件也具有作用域,它只在JSP頁面內有效。所屬型別:HttpServletResponse
3、session物件
session 物件是由伺服器自動建立的與使用者請求相關的物件。伺服器為每個使用者都生成一個session物件,用於儲存該使用者的資訊,跟蹤使用者的操作狀態。session物件內部使用Map類來儲存資料,因此儲存資料的格式為“Key/value”。 session物件的value可以使複雜的物件型別,而不僅僅侷限於字串型別。HttpSession
4、application物件
application 物件可將資訊儲存在伺服器中,直到伺服器關閉,否則application物件中儲存的資訊會在整個應用中都有效。與session物件相比,application物件生命週期更長,類似於系統的“全域性變數” ServletContext
區別:
request:單次請求
session:瀏覽器訪問期間(會話期間)
application:伺服器啟動期間,所存的資料可以跨瀏覽器
5、out 物件
用於在Web瀏覽器內輸出資訊,並且管理應用伺服器上的輸出緩衝區。在使用 out 物件輸出資料時, 可以對資料緩衝區進行操作,及時清除緩衝區中的殘餘資料,為其他的輸出讓出緩衝空間。待資料輸出完畢後,要 及時關閉輸出流。
示例:
out.print("<script type='text/javascript'>alert('使用者名稱不存在');location.href='index.jsp'</script>");
6、pageContext 物件
pageContext 物件的作用是取得任何範圍的引數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等物件。pageContext物件的建立和初始化都是由容器來完成的,在JSP頁面中可以直接使用pageContext物件。
7、config 物件
config 物件的主要作用是取得伺服器的配置資訊。通過 pageConext物件的 getServletConfig() 方法可以獲取一個config物件。當一個Servlet 初始化時,容器把某些資訊通過config物件傳遞給這個 Servlet。 開發者可以在web.xml 檔案中為應用程式環境中的Servlet程式和JSP頁面提供初始化引數。
//將image路徑轉換成伺服器端的路徑
String url= config.getServletContext().getRealPath("/image");
<h1>url=<%=url %></h1>
8、page 物件
page 物件代表JSP本身,只有在JSP頁面內才是合法的。 page隱含物件本質上包含當前 Servlet介面引用的變數,類似於Java程式設計中的 this 指標。
9、exception 物件
exception 物件的作用是顯示異常資訊,只有在包含 isErrorPage=“true” 的頁面中才可以被使用,在一般的JSP頁面中使用該物件將無法編譯JSP檔案。excepation物件和Java的所有物件一樣,都具有系統提供的繼承結構。exception 物件幾乎定義了所有異常情況。在Java程式中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP 頁面中出現沒有捕獲到的異常,就會生成 exception 物件,並把 exception 物件傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 物件。
(1)先在可能發生錯誤的頁面中新增errorPage屬性:
<%@ page pageEncoding="utf-8" errorPage="error.jsp"
contentType="text/html;charset=UTF-8" language="java" %>
(2)在error.jsp頁面中設定isErrorPage=“true” 的屬性(使用exception物件之前,需要先將當前頁面設定成錯誤頁面)
<%@ page language="java" isErrorPage="true" import="java.util.*" pageEncoding="UTF-8"%>
jsp的作用域:
pageContext -> request -> session -> application
當前頁面 單次請求有效 當前會話期間 伺服器執行期間有效
6.JSP的指令
JSP指令用來設定整個JSP頁面相關的屬性,如網頁的編碼方式和指令碼語言。 語法格式如下:
<%@ directive attribute="value" %>
directive:指令名稱 attribute 屬性名 value:屬性值
指令名稱 | 描述 |
---|---|
page | 定義網頁依賴屬性,比如指令碼語言、error頁面、快取需求等等 |
include | 包含其他檔案 |
taglib | 引入標籤庫的定義 |
1、Page指令
Page指令為容器提供當前頁面的使用說明一個JSP頁面可以包含多個page指令Page指令的語法格式:
<%@ page attribute="value" %>
屬性名 | 屬性值 | 描述 |
---|---|---|
language | java | 解釋該JSP檔案時採用的語言,一般為java語言,預設為java |
extends | 任何類的全名 | 編譯該JSP檔案時繼承哪個類,JSP為Servlet,因此當指明繼承普通類時需要 實現Servlet的init、destroy等方法 |
import | 任何包名、類名 | 引入該JSP中用到的類、包等,import是唯一可以宣告多次的page指令屬性,一個import可以引用uogelei,中間用英文逗號隔開<%@ page import=包名.類名,包名.類名%> |
session | true、false | 該JSP內是否內建Session物件,如果為true,則內建Session物件,可直接 使用,否則反之,預設為true |
autoFlush | true, false | 是否執行快取,如果為true,則使用out.println()等方法輸出的字串並不是立刻到達客戶端伺服器的,而是暫時存到快取裡,快取滿了或者程式行完畢或者執行out.flush()操作時才到客戶端,預設為true。 |
buffer | none 或者數字KB | 指定快取大小,當autoFlush設為true時有效,例如<%@ page buffer=10kb%> |
isThreadSafe | true, false | 是否執行緒安全,如果為true,則執行多個執行緒同時執行該jsp程式,否則只執行一個執行緒,其餘執行緒等待,預設為false |
isErrorPage | true, false | 指定該頁面是否為錯誤顯示頁面,如果為true,則該JSP內建有一個Exception物件exception,可直接使用,否則沒有,預設為false |
errorPage | 某個JSP頁面的相對路徑 | 指明一個錯誤頁面,如果該JSP程式丟擲一個未捕捉的異常,則轉到errorPage指定的頁面,errorPage指定的頁面通常isErrorPage屬性為true,且內建的exception物件為未捕捉的異常 |
contentType | 有效的文件型別 | 客戶端瀏覽器根據該屬性判斷文件型別,例如 HTML格式為text/html、純文 本 格 式 為 text/plain 、 JPG 圖 像 為 image/jpeg 、 GIF 圖 像 為 image/gifWORD文件為application/msword,該屬性常跟著charset設 置編碼一起,作用是通知伺服器和瀏覽器都使用同一個碼錶 |
pageEncoding | UTF- 8,ISO-8859-1等 |
2、Include指令
JSP可以通過include指令來包含其他檔案。被包含的檔案可以是JSP檔案、HTML檔案或文字檔案。包含的檔案就好像是該JSP檔案的一部分,會被同時編譯執行。
Include指令的語法格式如下:
<%@ include file="檔案相對 url 地址" %>
include 指令中的檔名實際上是一個相對的 URL 地址。
如果您沒有給檔案關聯一個路徑,JSP編譯器預設在當前路徑下尋找。
3、Taglib指令
JSP API允許使用者自定義標籤,一個自定義標籤庫就是自定義標籤的集合。Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。
<%@ taglib uri="uri" prefix="" %>
uri屬性確定標籤庫的位置,prefix屬性指定標籤庫的字首(可自定義)。
7.JSP出現的狀態碼
狀態碼 | 訊息 | 描述 |
---|---|---|
100 | Continue | 只有一部分請求被伺服器接收,但只要沒被伺服器拒絕,客戶端就會延續這個請求 |
101 | Switching Protocols | 伺服器交換機協議 |
200 | OK | 請求被確認 |
201 | Created | 請求時完整的,新的資源被建立 |
202 | Accepted | 請求被接受,但未處理完 |
300 | Multiple Choices | 一個超連結表,使用者可以選擇一個超連結並訪問,最大支援5個超連結 |
301 | Moved Permanently | 被請求的頁面已經移動到了新的URL下 |
302 | Found | 被請求的頁面暫時性地移動到了新的URL下 |
303 | See Other | 被請求的頁面可以在一個不同的URL下找到 |
400 | Bad Request | 伺服器無法識別請求 |
403 | Forbidden | 禁止訪問所請求的頁面 |
404 | Not Found | 伺服器無法找到所請求的頁面 |
405 | Method Not Allowed | 請求中所指定的方法不被允許 |
500 | Internal Server Error | 請求不完整,伺服器遇見了出乎意料的狀況 |
501 | Not Implemented | 請求不完整,伺服器不提供所需要的功能 |
502 | Bad Gateway | 請求不完整,伺服器從上游伺服器接受了一個無效的響應 |
503 | Service Unavailable | 請求不完整,伺服器暫時重啟或關閉 |
504 | Gateway Timeout | 閘道器超時 |
505 | HTTP Version Not Supported | 伺服器不支援所指定的HTTP版本 |
8.EL表示式
1、什麼是Expression Language
表示式語言最初定義於JSTL1.0部分
在JSP2.0中,EL從JSTL中剝離出來,放置在JSP規範中,稱為JSP2.0規範的一部分在JSP中使用EL表示式,可以簡化物件和變數的訪問是EL表示式
2、EL表示式語法
語法格式:${需要展示資訊的名字} 注意:
當表示式沒有指定變數或者物件的範圍時,
那麼容器會依次從pageContext—>request—>session—>application中查詢該變數或物件,我們可以通過隱含 物件獲得指定作用域的值:
pageScope物件,用於獲取當前頁面的屬性值requestScope物件,用於獲取請求範圍的屬性值sessionScope物件,用於獲取會話範圍的屬性值applicationScope物件,用於獲取程式範圍的屬性值語法:
${requestScope.key}
3、EL中基礎操作符
術語 | 定義 |
---|---|
算術型 | + 、-、 * /(div) 除 、 %(mod) 餘數 |
邏輯型 | and、&&、or、|| 、!、not |
關係型 | ==、eq、!=、ne、、gt、<=、le、>=、ge。可以與其他值進行比較,或與布林型、字串型、整型或浮點型文字進行比較。 |
Empty | Empty操作符是一個字首操作符用於判斷一個值是否為null或者為empty如String str = “”; ${empty str} 返回值為true; |
條件型 | A ?B :C。根據 A 賦值的結果來賦值 B 或 C。 |
示例:
單個變數:${a+10}<br> 單個變數:${s}<br>
單個物件:${key.屬性名}
//物件型別
Users u=new Users(); u.setName("王老五");
u.setPass("abc"); pageContext.setAttribute("u1",u); user.name=${u1.name} user.pass=${u1.pass}
// list集合物件:
List list=new ArrayList();
list.add("劉能");
list.add(30);
list.add(u); pageContext.setAttribute("list2",list); list1=${list2[0]}<br/> list2=${list2[1]}<br/> list3=${list2[2].pass}<br/>
// map集合:
k1=${map1.k1}<br>
k2=${map1.k2.username}--- ${map1.k2.password}
判斷變數是否有值或是否存在:${empty key值} List list2=new ArrayList(); list2.add("aa");
request.setAttribute("list222",list2);
判斷list中是否有資料:${empty list222}
9.JSTL
1、什麼是JSTL
JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。
根據JSTL標籤所提供的功能,可以將其分為5個類別。核心標籤 格式化標籤 sql標籤 xml標籤 jstl函式(後面詳細解釋)
2、JSTL的作用和語法格式
作用:簡化jsp頁面編寫程式碼語法格式:
1.下載 jakarta-taglibs-standard-1.1.2.zip 包並解壓,將 jakarta-taglibs-standard-1.1.2/lib/ 下的兩個 jar 檔案:standard.jar 和 jstl.jar 檔案拷貝到 /WEB-INF/lib/ 下。
2.在JSP頁面中引入<%@ taglib prefix=”頁面使用的名稱” uri=”功能範圍的路徑”%>
功能範圍 | Uri | 字首 |
---|---|---|
core | http://java.sun.com/jsp/jstl/core | c |
i18n | http://java.sun.com/jsp/jstl/fmt | fmt |
sql | http://java.sun.com/jsp/jstl/sql | sql |
xml | http://java.sun.com/jsp/jstl/xml | x |
functions | http://java.sun.com/jsp/jstl/function | fn |
3、核心標籤
①核心標籤是最常用的 JSTL標籤。引用核心標籤庫的語法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
② 核心標籤的分類
表示式操作 out、set、remove、catch 流程控制 if、choose、when、otherwise 迭代操作 forEach、forTokens
URL操作 import、param、url、redirect Set標籤
<c:set> 主要用來將變數儲存至JSP範圍中 或是JavaBean的屬性或Map物件中
名稱 | 說明 | 是否必須寫 | 預設值 |
---|---|---|---|
Value | 要被儲存的值 | 否 | 無 |
var | 存入的變數名稱 | 否 | 無 |
scope | var變數的JSP範圍 | 否 | Page |
target | JavaBean或Map物件 | 否 | 無 |
property | 指定target物件的屬性 | 否 | 無 |
<c:out>主要用來顯示資料的內容
名稱 | 說明 | 是否必須寫 | 預設值 |
---|---|---|---|
value | 需要顯示出來的值 | 是 | 無 |
default | 如果value的值為null,則顯示default的值 | 否 | 無 |
escapeXml | 是否轉換特殊字元,如:<轉換成 & lt; | 否 | True |
<c:remove> 主要負責移除變數
名稱 | 說明 | 是否必須寫 | 預設值 |
---|---|---|---|
Var | 欲移除的變數名稱 | 是 | 無 |
Scope | var變數的jsp範圍 | 否 | Page |
<c:if> 主要用於進行if判斷,如果為true,則輸出標籤體中的內容
名稱 | 說明 | 是否必須寫 | 預設值 |
---|---|---|---|
Test | 表示式的結果為true,則執行體內容,false則相反 | 是 | 無 |
var | 如果 用來儲存test運算的結果(true或false) | 否 | 無 |
scope | Var變數的JSP範圍 | 否 | page |
<c:choose>,<c:when>,<c:otherwise> 作用相當於if-else
名稱 | 說明 | 必須 | 預設 |
---|---|---|---|
test | 如果表示式的結果為true,則執行體內容,false則相反 | 是 | 無 |
<c:forEach> 迴圈控制,它可以將陣列,集合(Collection)中的成員循序瀏覽一遍。
名稱 | 說明 | 必須 | 預設值 |
---|---|---|---|
var | 用來存放現在指定的成員 | 是 | 無 |
items | 被迭代的集合物件 | 否 | 無 |
varStatus | 用來存放現在指的相關成員資訊 | 否 | 無 |
begin | 開始的位置 | 否 | 0 |
end | 結束的位置 | 否 | 最後一個成員 |
step | 每次迭代的間隔數 | 否 | 1 |
4、格式化標籤
1、fmt:formatDate 作用:將日期型別格式化為指定模式的字串屬性
value:將要被格式化的資料
pattern:格式化的模式,與SimpleDateFormat的引數設定一樣
var:格式化後的字串所要存放的變數,若不指定var,則會將格式化的結果直接顯示在頁面scope:變數存放的域屬性空間,預設page
type:其取值為date、time、both,表示給出的value是日期、時間、還是兩者都包含,預設是date
2、fmt:parseDate 作用:用於將指定字串轉化為日期型別
Value伺服器獲取的時間Pattern:轉換的格式
Var:頁面顯示的變數
3、fmt:formatNumber 按照指定格式對數字進行格式化屬性
maxIntegerDigits:整數部分最多的位數
minIntegerDigits:整數部分最少的位數maxFrctionDigits:小數部分最多的位數minFrctionDigits:小數部分最少的位數var: 存 儲 格 式 化 結 果 的 變 量 scope:var屬性的作用域
integerOnly:是否只解析整型數true或者浮點數false
相關文章
- JAVA學習記錄Java
- Java學習筆記-Day53 Servlet與JSPJava筆記ServletJS
- Java學習筆記記錄(二)Java筆記
- Java openrasp學習記錄(二)Java
- Java openrasp學習記錄(一)Java
- Java集合學習記錄——IteratorJava
- Java Math類方法學習記錄Java
- Java 學習零碎記錄Java
- java學習記錄第七週Java
- java學習記錄第八週Java
- java學習記錄第三週Java
- java基礎學習:JavaWeb之JSPJavaWebJS
- 【每日學習記錄】使用錄影裝置記錄每天的學習
- 2020-9-23Java學習記錄Java
- Java安全之JDBC Attacks學習記錄JavaJDBC
- JAVA程式設計學習記錄(安裝Java)Java程式設計
- 小白記錄Java後端學習遇到的問題Java後端
- JAVA java學習(22)——————Eclipse 修改字符集JavaEclipse
- 學習記錄
- 記錄從頭學習 JAVA+selenium+testNGJava
- 3月22日學習日記
- mybatis plus的學習記錄MyBatis
- JAVA程式設計學習記錄(JavaWeb-Html)Java程式設計WebHTML
- Eureka學習記錄
- Mybatis學習記錄MyBatis
- windbg學習記錄
- MySQL學習記錄MySql
- 2024.4.15學習記錄
- fastadmin 學習記錄AST
- Tableau學習記錄
- 記錄學習PromisePromise
- Docker學習記錄Docker
- activiti學習記錄
- 學習記錄APPAPP
- hadoop學習記錄Hadoop
- langchain學習記錄LangChain
- larabbs 學習記錄
- JQuery學習記錄jQuery