JSP全稱Java Server Pages,是一種動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它使用JSP標(biāo)簽在HTML網(wǎng)頁(yè)中插入Java代碼。標(biāo)簽通常以<%開(kāi)頭以%>結(jié)束。
JSP是一種Java servlet,主要用于實(shí)現(xiàn)Java web應(yīng)用程序的用戶界面部分。網(wǎng)頁(yè)開(kāi)發(fā)者們通過(guò)結(jié)合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來(lái)編寫(xiě)JSP。
JSP通過(guò)網(wǎng)頁(yè)表單獲取用戶輸入數(shù)據(jù)、訪問(wèn)數(shù)據(jù)庫(kù)及其他數(shù)據(jù)源,然后動(dòng)態(tài)地創(chuàng)建網(wǎng)頁(yè)。
JSP標(biāo)簽有多種功能,比如訪問(wèn)數(shù)據(jù)庫(kù)、記錄用戶選擇信息、訪問(wèn)JavaBeans組件等,還可以在不同的網(wǎng)頁(yè)中傳遞控制信息和共享信息。
與純 Servlet 相比:JSP可以很方便的編寫(xiě)或者修改HTML網(wǎng)頁(yè)而不用去面對(duì)大量的println語(yǔ)句。
就像其他普通的網(wǎng)頁(yè)一樣,您的瀏覽器發(fā)送一個(gè) HTTP 請(qǐng)求給服務(wù)器。
Web 服務(wù)器識(shí)別出這是一個(gè)對(duì) JSP 網(wǎng)頁(yè)的請(qǐng)求,并且將該請(qǐng)求傳遞給 JSP 引擎。通過(guò)使用 URL或者 .jsp 文件來(lái)完成。
JSP 引擎從磁盤(pán)中載入 JSP 文件,然后將它們轉(zhuǎn)化為 Servlet。這種轉(zhuǎn)化只是簡(jiǎn)單地將所有模板文本改用 println 語(yǔ)句,并且將所有的 JSP 元素轉(zhuǎn)化成 Java 代碼。
JSP 引擎將 Servlet 編譯成可執(zhí)行類,并且將原始請(qǐng)求傳遞給 Servlet 引擎。
Web 服務(wù)器的某組件將會(huì)調(diào)用 Servlet 引擎,然后載入并執(zhí)行 Servlet 類。在執(zhí)行過(guò)程中,Servlet 產(chǎn)生 HTML 格式的輸出并將其內(nèi)嵌于 HTTP response 中上交給 Web 服務(wù)器。
Web 服務(wù)器以靜態(tài) HTML 網(wǎng)頁(yè)的形式將 HTTP response 返回到您的瀏覽器中。
最終,Web 瀏覽器處理 HTTP response 中動(dòng)態(tài)產(chǎn)生的HTML網(wǎng)頁(yè),就好像在處理靜態(tài)網(wǎng)頁(yè)一樣。
一般情況下,JSP 引擎會(huì)檢查 JSP 文件對(duì)應(yīng)的 Servlet 是否已經(jīng)存在,并且檢查 JSP 文件的修改日期是否早于 Servlet。如果 JSP 文件的修改日期早于對(duì)應(yīng)的 Servlet,那么容器就可以確定 JSP 文件沒(méi)有被修改過(guò)并且 Servlet 有效。這使得整個(gè)流程與其他腳本語(yǔ)言(比如 PHP)相比要高效快捷一些。
編譯階段
當(dāng)瀏覽器請(qǐng)求JSP頁(yè)面時(shí),JSP引擎會(huì)首先去檢查是否需要編譯這個(gè)文件。如果這個(gè)文件沒(méi)有被編譯過(guò),或者在上次編譯后被更改過(guò),則編譯這個(gè)JSP文件。
編譯的過(guò)程包括三個(gè)步驟:
解析JSP文件。
將JSP文件轉(zhuǎn)為servlet。
編譯servlet。
初始化階段
容器載入JSP文件后,它會(huì)在為請(qǐng)求提供任何服務(wù)前調(diào)用jspInit方法。如果您需要執(zhí)行自定義的JSP初始化任務(wù),復(fù)寫(xiě)jspInit方法就行了
JSP執(zhí)行
這一階段描述了JSP生命周期中一切與請(qǐng)求相關(guān)的交互行為,直到被銷毀。當(dāng)JSP網(wǎng)頁(yè)完成初始化后,JSP引擎將會(huì)調(diào)用_jspService方法。_jspService方法需要一個(gè)HttpServletRequest對(duì)象和一個(gè)HttpServletResponse對(duì)象作為它的參數(shù) , _jspService方法在每個(gè)request中被調(diào)用一次并且負(fù)責(zé)產(chǎn)生與之相對(duì)應(yīng)的response,并且它還負(fù)責(zé)產(chǎn)生所有7個(gè)HTTP方法的回應(yīng),比如GET、POST、DELETE等等。
JSP銷毀
SP生命周期的銷毀階段描述了當(dāng)一個(gè)JSP網(wǎng)頁(yè)從容器中被移除時(shí)所發(fā)生的一切。jspDestroy方法在JSP中等價(jià)于servlet中的銷毀方法。當(dāng)您需要執(zhí)行任何清理工作時(shí)復(fù)寫(xiě)jspDestroy方法,比如釋放數(shù)據(jù)庫(kù)連接或者關(guān)閉文件夾等等。
腳本程序
<% 代碼片段 %>
JSP聲明
一個(gè)聲明語(yǔ)句可以聲明一個(gè)或多個(gè)變量、方法,供后面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然后才能使用它們。
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
JSP表達(dá)式
一個(gè)JSP表達(dá)式中包含的腳本語(yǔ)言表達(dá)式,先被轉(zhuǎn)化成String,然后插入到表達(dá)式出現(xiàn)的地方。由于表達(dá)式的值會(huì)被轉(zhuǎn)化成String,所以您可以在一個(gè)文本行中使用表達(dá)式而不用去管它是否是HTML標(biāo)簽。表達(dá)式元素中可以包含任何符合Java語(yǔ)言規(guī)范的表達(dá)式,但是不能使用分號(hào)來(lái)結(jié)束表達(dá)式。
今天的日期是: <%= (new java.util.Date).toLocaleString%>
JSP注釋
JSP注釋主要有兩個(gè)作用:為代碼作注釋以及將某段代碼注釋掉。
<%-- 注釋 --%> JSP注釋,注釋內(nèi)容不會(huì)被發(fā)送至瀏覽器甚至不會(huì)被編譯
JSP指令
JSP指令用來(lái)設(shè)置與整個(gè)JSP頁(yè)面相關(guān)的屬性。
<%@ page ... %> 定義頁(yè)面的依賴屬性,比如腳本語(yǔ)言、error頁(yè)面、緩存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入標(biāo)簽庫(kù)的定義,可以是自定義標(biāo)簽
request HttpServletRequest類的實(shí)例
response HttpServletResponse類的實(shí)例
out PrintWriter類的實(shí)例,用于把結(jié)果輸出至網(wǎng)頁(yè)上
session HttpSession類的實(shí)例
application ServletContext類的實(shí)例,與應(yīng)用上下文有關(guān)
config ServletConfig類的實(shí)例
pageContext PageContext類的實(shí)例,提供對(duì)JSP頁(yè)面所有對(duì)象以及命名空間的訪問(wèn)
page 類似于Java類中的this關(guān)鍵字
Exception Exception類的對(duì)象,代表發(fā)生錯(cuò)誤的JSP頁(yè)面中對(duì)應(yīng)的異常對(duì)象
JSTL是一個(gè)JSP標(biāo)簽集合,它封裝了JSP應(yīng)用的通用核心功能。
EL主要用于查找作用域中的數(shù)據(jù),然后對(duì)它們執(zhí)行簡(jiǎn)單操作;它不是編程語(yǔ)言,甚至不是腳本編制語(yǔ)言。通常與 JSTL 標(biāo)記一起作用,能用簡(jiǎn)單而又方便的符號(hào)來(lái)表示復(fù)雜的行為。示例 : ${expr}
常用的域?qū)ο笥邢旅孢@些
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
在JSP頁(yè)面指定錯(cuò)誤頁(yè)面
<%@ page errorPage='ShowError.jsp' %>
編寫(xiě)錯(cuò)誤頁(yè)面ShowError.jsp
<%@ page isErrorPage='true' %>
JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)(JSTL)是一個(gè)JSP標(biāo)簽集合,它封裝了JSP應(yīng)用的通用核心功能。
1. 核心標(biāo)簽
2.格式化標(biāo)簽
3.SQL 標(biāo)簽
4.XML 標(biāo)簽
5.JSTL 函數(shù)
使用步驟
第一步 : 導(dǎo)入JSTLjar依賴
第二步 : 在jsp頁(yè)面引入JSTL標(biāo)簽庫(kù) (對(duì)應(yīng)上面5個(gè)功能,選擇引入)
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %> <%@ taglib prefix='fmt' uri='http://java.sun.com/jsp/jstl/fmt' %> <%@ taglib prefix='sql' uri='http://java.sun.com/jsp/jstl/sql' %> <%@ taglib prefix='x' uri='http://java.sun.com/jsp/jstl/xml' %> <%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
聯(lián)系客服