java server page ( java 服務(wù)器 頁(yè)面技術(shù))
為了完成一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)颜懊,需要在servlet中編寫(xiě)大量的html/css相關(guān)的代碼麻惶,隨著時(shí)代的發(fā)展,網(wǎng)頁(yè)的美觀要求越來(lái)越高
sun --- 大牛站出來(lái)發(fā)明了JSP技術(shù)
JSP本質(zhì)上還是一個(gè)servlet蜈垮,jsp可以直接寫(xiě)html代碼害驹,同時(shí)也支持寫(xiě)Java代碼透绩。jsp編寫(xiě)之后不能直接使用瀏覽器打開(kāi),需要通過(guò)tomcat將JSP翻譯成一個(gè)servlet
一
1.1普通表達(dá)式 (掌握)
<%
可以寫(xiě)Java代碼
%>
1.2 輸出表達(dá)式 (掌握)
<%= %>
二.jsp實(shí)現(xiàn)原理
當(dāng)瀏覽器第一次訪問(wèn)a.jsp的時(shí)候,會(huì)被翻譯成a_jsp.java 芥挣,jdk將a_jsp.java編譯成a_jsp.class文件 , 執(zhí)行class中的代碼兆龙,給瀏覽器進(jìn)行響應(yīng)
當(dāng)瀏覽器再次訪問(wèn)a.jsp的時(shí)候杖爽,如果class已經(jīng)存在就不在翻譯而是直接執(zhí)行
JSP 翻譯成 Servlet 的過(guò)程
三. EL表達(dá)式
el表達(dá)式:最主要的作用從作用域中獲取數(shù)據(jù).
特點(diǎn):避免在JSP中編寫(xiě)Java代碼
Action ------- 轉(zhuǎn)發(fā) -----> JSP
JSP用于展示數(shù)據(jù),數(shù)據(jù)來(lái)自于Action
在Action中將數(shù)據(jù)存儲(chǔ)在作用域中紫皇,在JSP中獲取作用域中的數(shù)據(jù)進(jìn)行展示
HttpServletRequest request = .. //一次請(qǐng)求
HttpSession session = request.getSession(); //一次會(huì)話
ServletContext application = request.getSession(); //整個(gè)服務(wù)
Action{
//向作用域中存儲(chǔ)數(shù)據(jù)
/request.setAttribute(“key”,value);
session.setAttribute(“key”,value);
application.setAttribute(“key”,value);/
request.setAttribute(“a1”,”張三”);
}
EL表達(dá)式從作用域取值并輸出的語(yǔ)法: {sessionScope.key} 從Session作用域取值
${applicationScope.key} 從ServletContext作用域取值
四.JSTL表達(dá)式
循環(huán) 慰安、判斷
jstl也稱(chēng)c標(biāo)簽
在JSP中引入JSTL標(biāo)簽庫(kù)
1.1循環(huán)標(biāo)簽
語(yǔ)法:
<c:forEach var=”變量名” items=”使用EL表達(dá)式獲取一個(gè)集合”>
${變量名} 如果遍歷list集合獲取的是對(duì)象,可以繼續(xù)獲取對(duì)象的屬性
</c:forEach>
例如:
1.2 判斷標(biāo)簽 - if
語(yǔ)法:test屬性中可以使用el表達(dá)式 .
可以利用el表達(dá)式從作用域中取值聪铺,并且進(jìn)行判斷化焕,如果判斷的結(jié)果為true,則執(zhí)行if標(biāo)簽中的內(nèi)容铃剔,否則不執(zhí)行
if(條件){
}
<c:if test=” ${requestScope.a2 > 10 }”>
xxxx
</c:if>
例如:
1.3 判斷標(biāo)簽 - choose
語(yǔ)法:
<c:choose>
<c:when test=””>
</c:when>
<c:when test=””>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
解釋?zhuān)篶hoose標(biāo)簽就是一個(gè)父標(biāo)簽撒桨,沒(méi)有特殊含義
when標(biāo)簽第一個(gè)相當(dāng)于if查刻,可以寫(xiě)多個(gè)when標(biāo)簽,相當(dāng)于else if
otherwise寫(xiě)在最后凤类,相當(dāng)于else
五穗泵,jsp內(nèi)置對(duì)象
什么是JSP的內(nèi)置對(duì)象?
在jsp中可以直接在<%%>中使用的對(duì)象,就稱(chēng)之為內(nèi)置對(duì)象谜疤。在jsp翻譯成的servlet中已經(jīng)被創(chuàng)建好了
內(nèi)置對(duì)象的名稱(chēng) 實(shí)際類(lèi)型 作用
reqeust HttpServlteRequest 收參佃延、作用域
response HttpServletResponse 重定向、響應(yīng)
pageContext PageContext 1.獲取其他幾個(gè)內(nèi)置對(duì)象
2.操作其他幾個(gè)作用域
session HttpSession 管理會(huì)話
exception Throwable 獲取當(dāng)前頁(yè)面的異常對(duì)象
application ServletContext 整個(gè)服務(wù)的作用
config ServletConfig 讀取配置文件
out JspWriter(PrintWriter) 向?yàn)g覽器響應(yīng)輸出內(nèi)容
page Object(this) 當(dāng)前servlet類(lèi)的對(duì)象
總結(jié):1.JSP支持9個(gè)內(nèi)置對(duì)象夷磕,其中pageContxt可以獲取其他幾個(gè)內(nèi)置對(duì)象
2.el表達(dá)式履肃,支持pageContext,可以在el表達(dá)式中使用pageContext獲取其他幾個(gè)內(nèi)置對(duì)象
3. ${pageContext.request.contextPath}
向通過(guò).request獲取request對(duì)象企锌,在.contextPath獲取request對(duì)象中存儲(chǔ)的項(xiàng)目名