一坛芽、JSP技術(shù)
1.jsp腳本和注釋
jsp腳本:
1)<%java代碼%> ----- 內(nèi)部的java代碼翻譯到service方法的內(nèi)部
2)<%=java變量或表達(dá)式> ----- 會(huì)被翻譯成service方法內(nèi)部out.print()
3)<%!java代碼%> ---- 會(huì)被翻譯成servlet的成員的內(nèi)容
jsp注釋:? 不同的注釋可見(jiàn)范圍是不同
1)Html注釋:<!--注釋內(nèi)容--> ---可見(jiàn)范圍 jsp源碼、翻譯后的servlet且改、頁(yè)面顯示html源碼
2)java注釋://單行注釋? /*多行注釋*/ --可見(jiàn)范圍 jsp源碼 翻譯后的servlet
3)jsp注釋:<%--注釋內(nèi)容--%> ----- 可見(jiàn)范圍 jsp源碼可見(jiàn)
2.jsp運(yùn)行原理-----jsp本質(zhì)就是servlet(面試)
jsp在第一次被訪問(wèn)時(shí)會(huì)被Web容器翻譯成servlet脐帝,再執(zhí)行
過(guò)程:
第一次訪問(wèn)---->helloServlet.jsp---->helloServlet_jsp.java---->編譯運(yùn)行
PS:被翻譯后的servlet在Tomcat的work目錄中可以找到
3.jsp指令(3個(gè))
jsp的指令是指導(dǎo)jsp翻譯和運(yùn)行的命令软能,jsp包括三大指令:
1)page指令 --- 屬性最多的指令(實(shí)際開(kāi)發(fā)中page指令默認(rèn))屬性最多的一個(gè)指令俗扇,根據(jù)不同的屬性,指導(dǎo)整個(gè)頁(yè)面特性
格式:<%@ page 屬性名1= "屬性值1" 屬性名2= "屬性值2" ...%>
常用屬性如下:
language:jsp腳本中可以嵌入的語(yǔ)言種類
pageEncoding:當(dāng)前jsp文件的本身編碼---內(nèi)部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻譯時(shí)自動(dòng)創(chuàng)建session
import:導(dǎo)入java的包
errorPage:當(dāng)當(dāng)前頁(yè)面出錯(cuò)后跳轉(zhuǎn)到哪個(gè)頁(yè)面
isErrorPage:當(dāng)前頁(yè)面是一個(gè)處理錯(cuò)誤的頁(yè)面
2)include指令
頁(yè)面包含(靜態(tài)包含)指令初坠,可以將一個(gè)jsp頁(yè)面包含到另一個(gè)jsp頁(yè)面中
格式:<%@ include file="被包含的文件地址"%>
3)taglib指令
在jsp頁(yè)面中引入標(biāo)簽庫(kù)(jstl標(biāo)簽庫(kù)和簸、struts2標(biāo)簽庫(kù))
格式:<%@ taglib uri="標(biāo)簽庫(kù)地址" prefix="前綴"%>
4.jsp內(nèi)置/隱式對(duì)象(9個(gè))----- 筆試
jsp被翻譯成servlet之后,service方法中有9個(gè)對(duì)象定義并初始化完畢碟刺,我們?cè)趈sp腳本中可以直接使用這9個(gè)對(duì)象
名稱類型描述
outjavax.servlet.jsp.JspWriter? ??????用于頁(yè)面輸出
requestjavax.servlet.http.HttpServletRequest? ??????得到用戶請(qǐng)求信息锁保,
responsejavax.servlet.http.HttpServletResponse? ??服務(wù)器向客戶端的回應(yīng)信息
configjavax.servlet.ServletConfig? ??????服務(wù)器配置,可以取得初始化參數(shù)
sessionjavax.servlet.http.HttpSession? ??????用來(lái)保存用戶的信息
applicationjavax.servlet.ServletContext? ??????所有用戶的共享信息
pagejava.lang.Object? ??????指當(dāng)前頁(yè)面轉(zhuǎn)換后的Servlet類的實(shí)例
pageContextjavax.servlet.jsp.PageContextJSP? ??????的頁(yè)面容器
exceptionjava.lang.Throwable? ??????表示JSP頁(yè)面所發(fā)生的異常南誊,在錯(cuò)誤頁(yè)中才起作用
(1)out對(duì)象
out的類型:JspWriter
out作用就是想客戶端輸出內(nèi)容----out.write()
out緩沖區(qū)默認(rèn)8kb 可以設(shè)置成0 代表關(guān)閉out緩沖區(qū)內(nèi)容直接寫到respons緩沖區(qū)
(2)pageContext對(duì)象
jsp頁(yè)面的上下文對(duì)象身诺,作用如下:
page對(duì)象與pageContext對(duì)象不是一回事
1)pageContext是一個(gè)域?qū)ο?/p>
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext可以向指定的其他域中存取數(shù)據(jù)
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name)
---依次從pageContext域,request域抄囚,session域,application域中獲取屬性橄务,在某個(gè)域中獲取后將不在向后尋找
四大作用域的總結(jié):
pageContext域:當(dāng)前jsp頁(yè)面范圍
request域:一次請(qǐng)求
session域:一次會(huì)話
application域:整個(gè)web應(yīng)用
2)可以獲得其他8大隱式對(duì)象
例如: pageContext.getRequest()
?pageContext.getSession()
5.jsp標(biāo)簽(動(dòng)作)
1)頁(yè)面包含(動(dòng)態(tài)包含):<jsp:include page="被包含的頁(yè)面"/>
2)請(qǐng)求轉(zhuǎn)發(fā):<jsp:forward page="要轉(zhuǎn)發(fā)的資源" />
靜態(tài)包含與動(dòng)態(tài)包含的區(qū)別幔托?
二、EL技術(shù)
1.EL 表達(dá)式概述
EL(Express Lanuage)表達(dá)式可以嵌入在jsp頁(yè)面內(nèi)部蜂挪,減少jsp腳本的編寫重挑,EL 出現(xiàn)的目的是要替代jsp頁(yè)面中腳本的編寫。
2.EL從域中取出數(shù)據(jù)(EL最重要的作用)
jsp腳本:<%=request.getAttribute(name)%>
EL表達(dá)式替代上面的腳本:${requestScope.name}
EL最主要的作用是獲得四大域中的數(shù)據(jù)棠涮,格式${EL表達(dá)式}
EL獲得pageContext域中的值:${pageScope.key};
EL獲得request域中的值:${requestScope.key};
EL獲得session域中的值:${sessionScope.key};
EL獲得application域中的值:${applicationScope.key};
EL從四個(gè)域中獲得某個(gè)值${key};
---同樣是依次從pageContext域谬哀,request域,session域严肪,application域中獲取屬性史煎,在某個(gè)域中獲取后將不在向后尋找
3.EL的內(nèi)置對(duì)象11個(gè)
pageScope,requestScope,sessionScope,applicationScope?---- 獲取JSP中域中的數(shù)據(jù)
param,paramValues - 接收參數(shù) ? ?相當(dāng)于request.getParameter() ? rquest.getParameterValues()
header,headerValues? - 獲取請(qǐng)求頭信息 ? ?相當(dāng)于request.getHeader(name)
initParam ?- 獲取全局初始化參數(shù) ? ?相當(dāng)于this.getServletContext().getInitParameter(name)
cookie ?- WEB開(kāi)發(fā)中cookie ? ?相當(dāng)于request.getCookies()---cookie.getName()---cookie.getValue()
pageContext - WEB開(kāi)發(fā)中的pageContext.
pageContext獲得其他八大對(duì)象
${pageContext.request.contextPath} ?相當(dāng)于<%=pageContext.getRequest().getContextPath%>? 這句代碼不能實(shí)現(xiàn)?獲得WEB應(yīng)用的名稱
4.EL執(zhí)行表達(dá)式
例如:
${1+1}
${empty user}
${user==null?true:false}
一谦屑、JSTL技術(shù)
1.JSTL概述
JSTL(JSP Standard Tag Library),JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)篇梭,可以嵌入在jsp頁(yè)面中使用標(biāo)簽的形式完成業(yè)務(wù)邏輯等功能氢橙。jstl出現(xiàn)的目的同el一樣也是要代替jsp頁(yè)面中的腳本代碼。JSTL標(biāo)準(zhǔn)標(biāo)準(zhǔn)標(biāo)簽庫(kù)有5個(gè)子庫(kù)恬偷,但隨著發(fā)展悍手,目前常使用的是他的核心庫(kù)
標(biāo)簽庫(kù)標(biāo)簽庫(kù)的URI前綴
Corehttp://java.sun.com/jsp/jstl/corec
I18Nhttp://java.sun.com/jsp/jstl/fmtfmt
SQLhttp://java.sun.com/jsp/jstl/sqlsql
XMLhttp://java.sun.com/jsp/jstl/xmlx
Functionshttp://java.sun.com/jsp/jstl/functionsfn
2.JSTL下載與導(dǎo)入
JSTL下載:
從Apache的網(wǎng)站下載JSTL的JAR包。進(jìn)入“http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”網(wǎng)址下載JSTL的安裝包袍患。jakarta-taglibs-standard-1.1.2.zip坦康,然后將下載好的JSTL安裝包進(jìn)行解壓,此時(shí)诡延,在lib目錄下可以看到兩個(gè)JAR文件涝焙,分別為jstl.jar和standard.jar。? 其中孕暇,jstl.jar文件包含JSTL規(guī)范中定義的接口和相關(guān)類仑撞,standard.jar文件包含用于實(shí)現(xiàn)JSTL的.class文件以及JSTL中5個(gè)標(biāo)簽庫(kù)描述符文件(TLD)
將兩個(gè)jar包導(dǎo)入我們工程的lib中
使用jsp的taglib指令導(dǎo)入核心標(biāo)簽庫(kù)
3.JSTL核心庫(kù)的常用標(biāo)簽
1)<c:if test=””>標(biāo)簽
其中test是返回boolean的條件
2)<c:forEach>標(biāo)簽
使用方式有兩種組合形式:
四、javaEE的開(kāi)發(fā)模式
1.什么是模式
模式在開(kāi)發(fā)過(guò)程中總結(jié)出的“套路”妖滔,總結(jié)出的一套約定俗成的設(shè)計(jì)模式
2.javaEE經(jīng)歷的模式
model1模式:
技術(shù)組成:jsp+javaBean
model1的弊端:隨著業(yè)務(wù)復(fù)雜性導(dǎo)致jsp頁(yè)面比較混亂
model2模式
技術(shù)組成:jsp+servlet+javaBean
model2的優(yōu)點(diǎn):開(kāi)發(fā)中 使用各個(gè)技術(shù)擅長(zhǎng)的方面
servlet:擅長(zhǎng)處理java業(yè)務(wù)代碼
jsp:擅長(zhǎng)頁(yè)面的現(xiàn)實(shí)
MVC:---- web開(kāi)發(fā)的設(shè)計(jì)模式
M:Model---模型 javaBean:封裝數(shù)據(jù)
V:View-----視圖 jsp:?jiǎn)渭冞M(jìn)行頁(yè)面的顯示
C:Controller----控制器 Servelt:獲取數(shù)據(jù)--對(duì)數(shù)據(jù)進(jìn)行封裝--傳遞數(shù)據(jù)--指派顯示的jsp頁(yè)面
3.javaEE的三層架構(gòu)
服務(wù)器開(kāi)發(fā)時(shí) 分為三層
web層:與客戶端交互
service層:復(fù)雜業(yè)務(wù)處理
dao層:與數(shù)據(jù)庫(kù)進(jìn)行交互
開(kāi)發(fā)實(shí)踐時(shí) 三層架構(gòu)通過(guò)包結(jié)構(gòu)體現(xiàn)
MVC與三層架構(gòu)有什么關(guān)系隧哮?
總結(jié):
EL表達(dá)式
從域中取出數(shù)據(jù) ${域中存儲(chǔ)的數(shù)據(jù)的name}
${pageContext.request.contextPath}
JSTL標(biāo)簽(核心庫(kù))
<%@ taglib uri=”” prefix=”c”%>
<c:if test=””>
<c:forEach items=”數(shù)組或集合” var=”數(shù)組或集合中的每一個(gè)元素”>
javaEE三層架構(gòu)+MVC
web層:收集頁(yè)面數(shù)據(jù),封裝數(shù)據(jù)座舍,傳遞數(shù)據(jù)沮翔,指定響應(yīng)jsp頁(yè)面
service層:邏輯業(yè)務(wù)代碼的編寫
dao層:數(shù)據(jù)庫(kù)的訪問(wèn)代碼的編寫