企業(yè)網(wǎng)站配色免費(fèi)發(fā)布廣告信息網(wǎng)
文章目錄
- 🌍一. JSP
- ??1.JSP介紹
- ??2.JSP 運(yùn)行原理
- ??3.page 指令(常用的)
- ?? 4.JSP 三種常用腳本
- 1.聲明腳本
- 2.表達(dá)式腳本
- 3.代碼腳本
- ??5.JSP 內(nèi)置對(duì)象
- ??6.JSP 域?qū)ο?/font>
- 🌍二. EL
- ??1.EL 表達(dá)式介紹
- ??2.EL 運(yùn)算操作
- ??3.EL 的 11 個(gè)隱含對(duì)象
- 🌍三. JSTL
- ??1.JSTL 標(biāo)簽庫介紹
- ??2. core 核心庫
🙋?♂? 作者:@whisperrr.🙋?♂?
👀 專欄:JavaWeb👀
💥 標(biāo)題:【JavaWeb10】服務(wù)器渲染技術(shù) — JSP💥
?? 寄語:比較是偷走幸福的小偷??
🌍一. JSP
??1.JSP介紹
1.為什么需要 JSP
程序員在開發(fā)過程中,發(fā)現(xiàn) servlet 做界面非常不方便
引出 JSP 技術(shù),JSP 公式
jsp=html+java 片段+標(biāo)簽+javascript+css
2.JSP 全稱是 Java Server Pages,Java 的服務(wù)器頁面
3.JSP 這門技術(shù)的最大的特點(diǎn)在于,寫 JSP 就像在寫 HTML
● 相比 html 而言,html 只能為用戶提供靜態(tài)數(shù)據(jù),而 JSP 技術(shù)允許在頁面中嵌套 java 代碼,為用戶提供動(dòng)態(tài)數(shù)據(jù)
● 相比 Servlet 而言,Servlet 很難對(duì)數(shù)據(jù)進(jìn)行排版,而 jsp 除了可以用 java 代碼產(chǎn) 生動(dòng)態(tài)數(shù)據(jù)的同時(shí),也很容易對(duì)數(shù)據(jù)進(jìn)行排版。
4.jsp 技術(shù)基于 Servlet, 你可以理解成 JSP 就是對(duì) Servlet 的包裝.
5.會(huì)使用 JSP 的程序員, 再使用 thymeleaf 是非常容易的事情, 幾乎是無縫接軌.
6.創(chuàng)建 hspedu_jsp WEB 項(xiàng)目,并引入 jar
7. jsp 頁面不能像 HTML 頁面, 直接用瀏覽器運(yùn)行。只能通過瀏覽器訪問 Tomcat 來訪問jsp 頁面
??2.JSP 運(yùn)行原理
1.jsp 頁面本質(zhì)是一個(gè) Servlet 程序, 其性能是和 java 關(guān)聯(lián)的, 只是長(zhǎng)得丑.
2. 第 1 次訪問 jsp 頁面的時(shí)候。Tomcat 服務(wù)器會(huì)把 jsp 頁面解析成為一個(gè) java 源文件。并 且 對(duì) 它 進(jìn) 行 編 譯 成 為 .class 字 節(jié) 碼 程 序 。
分析下 cal_jsp.java 的源碼,可以看出本質(zhì)就是 Servlet, 要看到源碼和分析類圖,需要加入 jasper.jar 這個(gè)包[在 tomcat/lib 下拷貝]
??3.page 指令(常用的)
- language 表示 jsp 翻譯后是什么語言文件, 只支持 java
- contentType 表示 jsp 返回的數(shù)據(jù)類型,對(duì)應(yīng)源碼中 response.setContentType()參數(shù)值
- pageEncoding 屬性 表示當(dāng)前 jsp 頁面文件本身的字符集
- import 屬性 跟 java 源代碼中一樣。用于導(dǎo)包,導(dǎo)類
?? 4.JSP 三種常用腳本
1.聲明腳本
1.聲明腳本的格式是: <%! 聲明 java 代碼 %>
作用:定義 jsp 的需要屬性、方法、靜態(tài)代碼塊和內(nèi)部類等
2.代碼演示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp 聲明腳本應(yīng)用實(shí)例</title>
</head>
<body>
<h1>jsp 聲明腳本應(yīng)用實(shí)例</h1>
<%!
//聲明屬性 -> 這個(gè)屬性就是該 jsp 文件生成的 servlet statement_jsp 類的
private Integer id;
private String name = "老韓同學(xué)";
private String job;
private static String company;
private Double sal;
//靜態(tài)代碼塊
static {
company = "字節(jié)跳動(dòng)";
}
//聲明方法
public String getName() {
return name;
}
%>
<hr/>
</body>
</html>
2.表達(dá)式腳本
1.表達(dá)式腳本基本語法
- 表達(dá)式腳本的格式是:<%=表達(dá)式%>
- 表達(dá)式腳本的作用是:在 jsp 頁面上輸出數(shù)據(jù)
- 表達(dá)式腳本中的表達(dá)式不能以分號(hào)結(jié)束。
2.代碼演示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp 表達(dá)式腳本</title>
</head>
<body>
<h1>jsp 表達(dá)式腳本應(yīng)用實(shí)例</h1>
<%!
String name = "字節(jié)跳動(dòng)";
%>
<hr/>
<h1>個(gè)人信息</h1>
用戶名= <%=name%><br/>
工作是: <%="java 工程師"%><br/>
得到參數(shù)= <%=request.getParameter("sex")%>//null
</body>
</html>
3.代碼腳本
- 代碼腳本的語法是:
<% java 代碼%>
- 代碼腳本的作用是:可以在 jsp 頁面中,編寫我們需要的功能(使用 java )
- 可以由多個(gè)代碼腳本塊組合完成一個(gè)完整的 java 語句。
- 代碼腳本還可以和表達(dá)式腳本一起組合使用,在 jsp 頁面上輸出數(shù)據(jù)
??5.JSP 內(nèi)置對(duì)象
● 基本介紹 [講解]
1、JSP 內(nèi)置對(duì)象(已經(jīng)創(chuàng)建好的對(duì)象, 直接使用 inbuild),是指 Tomcat 在翻譯 jsp 頁面成為Servlet 后,內(nèi)部提供的九大對(duì)象,叫內(nèi)置對(duì)象
2、內(nèi)置對(duì)象,可以直接使用,不需要手動(dòng)定義
● JSP 九大內(nèi)置對(duì)象
- out 向客戶端輸出數(shù)據(jù),
out.println("");
request
客戶端的 http 請(qǐng)求response
響應(yīng)對(duì)象session
會(huì)話對(duì)象application
對(duì)應(yīng)ServletContext
pageContext jsp
頁面的上下文,是一個(gè)域?qū)ο?#xff0c;可以setAttribue(),
作用范圍只是本頁面exception
異常對(duì)象 ,getMessage()
page
代表 jsp 這個(gè)實(shí)例本身config
對(duì)應(yīng)ServletConfig
● 對(duì)照 Servlet 來理解就比較輕松了. (學(xué)技術(shù)的思路: 只要去學(xué)某個(gè)類,建議熟練該類的繼承關(guān)系)
一張圖, 展示了 JSP 的父類 HttpJspBase 繼承關(guān)系, 說明 JSP 內(nèi)置對(duì)象的來源是 Servlet 和HttpJspPage
??6.JSP 域?qū)ο?/font>
JSP 四大域?qū)ο蠼榻B[作用:存取數(shù)據(jù)]
1.pageContext (域?qū)ο?#xff0c;存放的數(shù)據(jù)只能在當(dāng)前頁面使用),【示意圖】學(xué)習(xí)技術(shù)小技巧:/自己嘗試去根據(jù)理解畫出示意圖
2. request (域?qū)ο?#xff0c;存放的數(shù)據(jù)在一次 request 請(qǐng)求有效), 【示意圖】
3. session(域?qū)ο?存放的數(shù)據(jù)在一次會(huì)話有效), 【示意圖】
4. application(域?qū)ο?存放的數(shù)據(jù)在整個(gè) web 應(yīng)用運(yùn)行期間有效, 范圍更大), 【示意圖】
JSP 請(qǐng)求轉(zhuǎn)發(fā)標(biāo)簽
<jsp:forward page="/bb.jsp"></jsp:forwar
🌍二. EL
??1.EL 表達(dá)式介紹
-
EL 表達(dá)式全稱:Expression Language,是表達(dá)式語言
-
EL 表達(dá)式主要是代替 jsp 頁面的表達(dá)式腳本
<%=request.getAttribute("xx")%>
-
EL 表達(dá)式輸出數(shù)據(jù)的時(shí),比 jsp 的表達(dá)式腳本簡(jiǎn)潔
-
EL 表達(dá)式基本語法:
${key1}
, 你可以理解就是一個(gè)語法糖
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el 表達(dá)式快速入門</title>
</head>
<body>
<% request.setAttribute("key", "key 值"); %>
jsp 表 達(dá) 式 腳 本 : <%=request.getAttribute("key") == null ? "" :
request.getAttribute("key")%><br/>
EL 表達(dá)式:${key}
</body>
</html>
- EL 表達(dá)式在輸出 null 時(shí),輸出的是 “” 3. jsp 表達(dá)式腳本輸出 null 的時(shí),輸出的是 “null” 字符串
- EL 表達(dá)式常用輸出 Bean 的普通屬性、 數(shù)組屬性、List 集合屬性和 map 集合屬性
??2.EL 運(yùn)算操作
- 基本語法語法:
${ 運(yùn)算表達(dá)式 }
語法:${ 運(yùn)算表達(dá)式 }
- 關(guān)系運(yùn)算
- 邏輯運(yùn)算
- 算數(shù)運(yùn)算
EL 的 empty 運(yùn)算
empty 運(yùn)算可以判斷一個(gè)數(shù)據(jù)是否為空,如果為空,返回 true,否則返回 false
以下幾種情況為空
● 值為 null
● 值為空串的時(shí)
● 值是 Object 類型數(shù)組,長(zhǎng)度為零
● list 集合,元素個(gè)數(shù)為零
● map 集合,元素個(gè)數(shù)為零
??3.EL 的 11 個(gè)隱含對(duì)象
EL 四個(gè)特定域變量
pageContext 對(duì)象介紹
協(xié)議: ${ pageContext.request.scheme }
服務(wù)器 ip:${ pageContext.request.serverName }
服務(wù)器端口:${ pageContext.request.serverPort }
工程路徑:${ pageContext.request.contextPath }
請(qǐng)求方法:${ pageContext.request.method }
客戶端 ip 地址:${ pageContext.request.remoteHost }
會(huì)話 id :${ pageContext.session.id }
🌍三. JSTL
??1.JSTL 標(biāo)簽庫介紹
- JSTL 標(biāo)簽庫 是指 JSP Standard Tag Library JSP 標(biāo)準(zhǔn)標(biāo)簽庫
- EL 表達(dá)式是為了替換 jsp 中的表達(dá)式腳本,JSTL 是為了替換代碼腳本。這樣 jsp 頁面
變得更佳簡(jiǎn)潔 - JSTL 由五個(gè)標(biāo)簽庫組成
- 使用 JSTL,需要導(dǎo)入相關(guān)的 jar 包
代碼演示
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
韓順平 Java 工程師
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSTL 快速入門</title>
</head>
<body>
<h1>JSTL 快速入門</h1>
<c:if test="${ 10 > 2 }">
<h1>10 > 2 為真</h1>
</c:if>
</body>
</html>
● taglib 引入標(biāo)簽,要放在行首
● 導(dǎo)入 jstl jar 包后,要重新發(fā)布 web 工程,否則不識(shí)別 jstl
??2. core 核心庫
1.<c:set />
<c:set /> set
標(biāo)簽可以往域中保存數(shù)據(jù)
- 等價(jià) 域?qū)ο?setAttribute(key,value);
- scope 屬性設(shè)置保存到哪個(gè)域
page 表示 PageContext 域(默認(rèn)值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域- var 屬性設(shè)置 key 是什么
- value 屬性設(shè)置值
2.<c:if />
<c:if test=“${ 10 > 2 }”>hello</c:if>
- if 標(biāo)簽用來做 if 判斷。
- test 屬性表示判斷的條件(用 EL 表達(dá)式輸出)
3.<c:choose> <c:when> <c:otherwise>
標(biāo)簽
多路判斷。跟 switch … case … default 非常接近
4.<c:forEach />
標(biāo)簽
- 介紹: c:forEach 標(biāo)簽 用來遍歷輸出, 主要有 4 種形式
● 普通遍歷輸出 i 到 j
● 遍歷數(shù)組
● 遍歷 Map
● 遍歷 List
items 表示遍歷的集合
var 表示遍歷到的數(shù)據(jù)
begin 表示遍歷的開始索引值 ,從 0 開始計(jì)算
end 表示結(jié)束的索引值
step 屬性表示遍歷的步長(zhǎng)值
varStatus 屬性表示當(dāng)前遍歷到的數(shù)據(jù)的狀態(tài),可以得到 step,begin,end 等屬性值