運(yùn)行步驟:
- 客戶端發(fā)出請(qǐng)求,請(qǐng)求訪問(wèn)jsp文件
- Web 服務(wù)器識(shí)別出這是一個(gè)對(duì) JSP 網(wǎng)頁(yè)的請(qǐng)求册烈,并且將該請(qǐng)求傳遞給 JSP 引擎
- JSP 引擎從磁盤(pán)中載入 JSP 文件,然后將它們轉(zhuǎn)化為 Servlet
- JSP 引擎將 Servlet 編譯成可執(zhí)行類(lèi)婿禽,并且將原始請(qǐng)求傳遞給 Servlet 引擎
- Web 服務(wù)器的某組件將會(huì)調(diào)用 Servlet 引擎茄厘,然后載入并執(zhí)行 Servlet 類(lèi)。在執(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 生命周期
- 編譯階段:servlet容器編譯servlet源文件吆录,生成servlet類(lèi)
- 初始化階段:加載與JSP對(duì)應(yīng)的servlet類(lèi)窑滞,創(chuàng)建其實(shí)例,并調(diào)用它的初始化方法
- 執(zhí)行階段:調(diào)用與JSP對(duì)應(yīng)的servlet實(shí)例的服務(wù)方法
- 銷(xiāo)毀階段:調(diào)用與JSP對(duì)應(yīng)的servlet實(shí)例的銷(xiāo)毀方法恢筝,然后銷(xiāo)毀servlet實(shí)例
JSP腳本元素(JSP Scriptlets)
語(yǔ)法:<% 腳本元素 %> 里面可以包含任意量的Java語(yǔ)句哀卫、變量、方法或表達(dá)式撬槽,只要它們?cè)谀_本語(yǔ)言中是有效的此改。
jsp表達(dá)式符號(hào)<%= %>
JSP指令
page指令
<%@ page language="java"
import="java.util.*,java.text.*"
contentType="text/html; charset=utf-8"
pageEncoding="UTF-8"%>
include指令
<%@ include file="yes.jsp"%>
JSP動(dòng)作元素
//page表示包含在頁(yè)面中的相對(duì)URL地址,flush布爾屬性侄柔,定義在包含資源前是否刷新緩存區(qū)
<jsp:include page="相對(duì) URL 地址" flush="true" />
//useBean用來(lái)實(shí)例化一個(gè)對(duì)象共啃,id表示實(shí)例名,class寫(xiě)指定類(lèi)的完整包名
<jsp:useBean id="use" class="com.users" />
//setProperty暂题,getProperty等同setget方法
<jsp:setProperty name="use" property="username" value="Tom" />
<jsp:getProperty name="use" property="username" />
//jsp:forward動(dòng)作把請(qǐng)求轉(zhuǎn)到另外的頁(yè)面
//page屬性包含的是一個(gè)相對(duì)URL移剪。page的值既可以直接給出,
//也可以在請(qǐng)求的時(shí)候動(dòng)態(tài)計(jì)算薪者,可以是一個(gè)JSP頁(yè)面或者一個(gè) Java Servlet
<jsp:forward page="date.jsp" />
JSP 隱式對(duì)象
request對(duì)象
request對(duì)象是javax.servlet.http.HttpServletRequest 類(lèi)的實(shí)例,request對(duì)象提供了一系列方法來(lái)獲取HTTP頭信息纵苛,cookies,HTTP方法等等
response對(duì)象
response對(duì)象是javax.servlet.http.HttpServletResponse類(lèi)的實(shí)例,response對(duì)象也定義了處理HTTP頭模塊的接口。通過(guò)這個(gè)對(duì)象攻人,開(kāi)發(fā)者們可以添加新的cookies取试,時(shí)間戳,HTTP狀態(tài)碼等等怀吻。
out對(duì)象
out對(duì)象是 javax.servlet.jsp.JspWriter 類(lèi)的實(shí)例瞬浓,用來(lái)在response對(duì)象中寫(xiě)入內(nèi)容
session對(duì)象
session對(duì)象是 javax.servlet.http.HttpSession 類(lèi)的實(shí)例。和Java Servlets中的session對(duì)象有一樣的行為烙博。session對(duì)象用來(lái)跟蹤在各個(gè)客戶端請(qǐng)求間的會(huì)話。
application對(duì)象
application對(duì)象直接包裝了servlet的ServletContext類(lèi)的對(duì)象烟逊,是javax.servlet.ServletContext 類(lèi)的實(shí)例渣窜。這個(gè)對(duì)象在JSP頁(yè)面的整個(gè)生命周期中都代表著這個(gè)JSP頁(yè)面。這個(gè)對(duì)象在JSP頁(yè)面初始化時(shí)被創(chuàng)建宪躯,隨著jspDestroy()方法的調(diào)用而被移除乔宿。通過(guò)向application中添加屬性,則所有組成web應(yīng)用的JSP文件都能訪問(wèn)到這些屬性
config對(duì)象
config對(duì)象是 javax.servlet.ServletConfig 類(lèi)的實(shí)例访雪,直接包裝了servlet的ServletConfig類(lèi)的對(duì)象详瑞。
這個(gè)對(duì)象允許開(kāi)發(fā)者訪問(wèn)Servlet或者JSP引擎的初始化參數(shù),比如文件路徑等
pageContext 對(duì)象
pageContext對(duì)象是javax.servlet.jsp.PageContext 類(lèi)的實(shí)例臣缀,用來(lái)代表整個(gè)JSP頁(yè)面坝橡。這個(gè)對(duì)象主要用來(lái)訪問(wèn)頁(yè)面信息,同時(shí)過(guò)濾掉大部分實(shí)現(xiàn)細(xì)節(jié)精置。這個(gè)對(duì)象存儲(chǔ)了request對(duì)象和response對(duì)象的引用计寇。application對(duì)象,config對(duì)象脂倦,session對(duì)象番宁,out對(duì)象可以通過(guò)訪問(wèn)這個(gè)對(duì)象的屬性來(lái)導(dǎo)出。pageContext對(duì)象也包含了傳給JSP頁(yè)面的指令信息赖阻,包括緩存信息蝶押,ErrorPage URL,頁(yè)面scope等
page 對(duì)象
這個(gè)對(duì)象就是頁(yè)面實(shí)例的引用。它可以被看做是整個(gè)JSP頁(yè)面的代表火欧。