1課程回顧
Jsp基礎
1)Jsp的執(zhí)行過程
tomcat服務器完成:jsp文件->翻譯成java文件->編譯成class字節(jié)碼文件->構造類對象->調用方法
tomcat的work目錄下存放jsp運行時的臨時文件!败潦!
2)Jsp語法:
1)jsp表達式:<%=變量或表達式%>向瀏覽器輸出變量或表達式計算的結果
2)jsp腳本:<% java代碼%>執(zhí)行java代碼原理:翻譯到_jspService()方法中
3)jsp聲明:<%!變量或方法%>聲明jsp的成員變量或成員方法
4)jsp注釋:<%!-- jsp注釋--%>用于注釋jsp代碼机断,不會翻譯到java文件中眷蜓,也不會執(zhí)行菌瘪。
3)jsp的三大指令
3.1 include指令:用于包含其他頁面份殿。原理:先合并再翻譯耸黑,叫靜態(tài)包含
3.2 page指令:告訴tomcat服務器如何把jsp文件翻譯成java文件
language:翻譯的動態(tài)語言。
import:類導入
jsp文件編碼問題:
pageEncoding:告訴tomcat服務器使用什么編碼翻譯jsp文件(jsp->java文件)
contentType: tomcat服務器發(fā)送給瀏覽器的數(shù)據(jù)編碼(tomcat服務器->瀏覽器)
異常錯誤相關的:
errorPage:指定當前jsp頁面的錯誤處理頁面。
isErorrPage:指定當前頁面是否為錯誤處理頁面笤受。false穷缤,不是錯誤處理頁面,則不能使用exception內置對象箩兽;true绅项,是錯誤處理頁面,可以使用exception內置對象比肄。
配置全局的錯誤處理頁面:
500
/common/500.jsp
404
/common/404.html
session:是否開啟session功能。false囊陡,不能用session內置對象芳绩;true,可以使用session內置對象撞反。
buffer:? jsp頁面的緩存區(qū)大小妥色。
isELIgnore:是否忽略EL表達式。
2 Jsp的內置對象(重點)
2.1什么是內置對象遏片?
在jsp開發(fā)中嘹害,會頻繁使用到一些對象
。例如HttpSession,ServletContext,ServletContext,HttpServletRequet吮便。如果我們每次要使用這些對象都去創(chuàng)建這些對象就顯示非常麻煩笔呀。所以Sun公司設計Jsp時,在jsp頁面加載完畢之后就會自動幫開發(fā)者創(chuàng)建好這些對象髓需,而開發(fā)者只需要直接使用這些對象調用方法即可许师!,這些創(chuàng)建好的對象就叫內置對象A糯摇N⑶!咧擂!
舉例:
servlet:
HttpSession session = request.getSession(true);(需要開發(fā)者做)
jsp:
tomcat服務器:HttpSession session = request.getSession(true);(不需要開發(fā)者做)
開發(fā)者做的:session.getId();
2.2 9大內置對象
內置對象名類型
request?????? ?? HttpServletRequest
response????? HttpServletResponse
config??????? ServletConfig
application??????? ServletContext
session???????? HttpSession
exception??????? Throwable
page??????????? Object(this)
out???????????? JspWriter
pageContext???? PageContext
2.3 Out對象
out對象類型逞盆,JspWriter類,相當于帶緩存的PrintWriter
PrintWriter:
wrier(內容):直接向瀏覽器寫出內容松申。
JspWriter
writer(內容):向jsp緩沖區(qū)寫出內容
當滿足以下條件之一云芦,緩沖區(qū)內容寫出:
1)緩沖區(qū)滿了
2)刷新緩存區(qū)
3)關閉緩存區(qū)
4)執(zhí)行完畢jsp頁面
2.4 pageContext對象
pageContext對象的類型是PageContext,叫jsp的上下文對象
1)可以獲取其他八個內置對象
public class 01_hello_jsp {
public void _jspService(request,response){
創(chuàng)建內置對象
HttpSession session =....;
ServletConfig config = ....;
把8個經(jīng)常使用的內置對象封裝到PageContext對象中
PageContext pageContext? =封裝攻臀;
調用method1方法
method1(pageContext);
}
public void method1(PageContext pageContext){
希望使用內置對象
從PageContext對象中獲取其他8個內置對象
JspWriter out =pageContext.getOut();
HttpServletRequest rquest = pageContext.getRequest();
........
}
}
使用場景:在自定義標簽的時候焕数,PageContext對象頻繁使用到!E傩ァ堡赔!
2)本身是一個域對象
ServletContext context域
HttpServletRequet? request域
HttpSession??? session域--Servlet學習的
PageContext?? page域--jsp學習的
作用:保存數(shù)據(jù)和獲取數(shù)據(jù),用于共享數(shù)據(jù)
#保存數(shù)據(jù)
1)默認情況下设联,保存到page域
pageContext.setAttribute("name");
2)可以向四個域對象保存數(shù)據(jù)
pageContext.setAttribute("name",域范圍常量)
#獲取數(shù)據(jù)
1)默認情況下善已,從page域獲取
pageContext.getAttribute("name")
2)可以從四個域中獲取數(shù)據(jù)
pageContext.getAttribute("name",域范圍常量)
域范圍常量:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
3)自動在四個域中搜索數(shù)據(jù)
pageContext.findAttribute("name");
順序:page域-> request域-> session域- > context域(application域)
3 Jsp中的四個域對象
四個域對象:
pageContext????? page域
request????????? request域
session????????? session域
application?????? context域
1)域對象作用:
保存數(shù)據(jù)和獲取數(shù)據(jù)灼捂,用于數(shù)據(jù)共享。
2)域對象方法:
setAttribute("name",Object)保存數(shù)據(jù)
getAttribute("name")獲取數(shù)據(jù)
removeAttribute("name")清除數(shù)據(jù)
3)域對象作用范圍:
page域:只能在當前jsp頁面中使用(當前頁面)
request域:只能在同一個請求中使用(轉發(fā))
session域:只能在同一個會話(session對象)中使用(私有的)
context域:只能在同一個web應用中使用换团。(全局的)
4 Jsp的最佳實踐
Servlet技術:開發(fā)動態(tài)資源悉稠。是一個java類,最擅長寫java代碼
jsp技術:開發(fā)動態(tài)資源艘包。通過java代碼最擅長輸出html代碼的猛。
各取所長:
在web項目中涉及到邏輯:
1)接收參數(shù)servlet做
2)處理業(yè)務邏輯,返回結果servlet做
3)顯示數(shù)據(jù)到瀏覽器jsp做
4)跳轉到其他頁面servlet做
servlet+jsp模式
servlet:
1)接收參數(shù)
2)處理業(yè)務邏輯
3)把結果保存到域對象中
4)跳轉到jsp頁面
Jsp:
1)從域對象取出數(shù)據(jù)
2)把數(shù)據(jù)顯示到瀏覽器
servlet的數(shù)據(jù)->?? jsp頁面
List使用域對象共享數(shù)據(jù)
5 EL表達式
5.1 EL作用
jsp的核心語法:jsp表達式<%=%>和jsp腳本<%? %>想虎。
以后開發(fā)jsp的原則:盡量在jsp頁面中少寫甚至不寫java代碼卦尊。
使用EL表達式替換掉jsp表達式
EL表達式作用:向瀏覽器輸出域對象中的變量值或表達式計算的結果!I喑岂却!
語法:${變量或表達式}
5.2 EL語法
1)輸出基本數(shù)據(jù)類型變量
1.1從四個域獲取
${name}
1.2指定域獲取
${pageScope.name}
域范圍:pageScoep / requestScope / sessionScope / applicationScope
2)輸出對象的屬性值
Student
3)輸出集合對象
List和Map
4)EL表達式計算
6 jsp標簽
6.1 jsp標簽的作用
jsp標簽作用:替換jsp腳本。
1)流程判斷(if?? for循環(huán))
2)跳轉頁面(轉發(fā)裙椭,重定向)
3)躏哩。。揉燃。扫尺。。
6.2 Jsp標簽分類
1)內置標簽(動作標簽):不需要在jsp頁面導入標簽
2)jstl標簽:需要在jsp頁面中導入標簽
3)自定義標簽:開發(fā)者自行定義炊汤,需要在jsp頁面導入標簽
6.3動作標簽
轉發(fā)標簽:
參數(shù)標簽:
包含標簽:
原理:包含與被包含的頁面先各自翻譯成java源文件器联,然后再運行時合并在一起。
(先翻譯再合并)婿崭,動態(tài)包含
靜態(tài)包含vs動態(tài)包含的區(qū)別拨拓?
1)語法不同
靜態(tài)包含語法:<%@inclue file="被包含的頁面"%>
動態(tài)包含語法:
2)參數(shù)傳遞不同
靜態(tài)包含不能向被包含頁面?zhèn)鬟f參數(shù)
動態(tài)包含可以向被包含頁面?zhèn)鬟f參數(shù)
3)原理不同
靜態(tài)包含:先合并再翻譯
動態(tài)包含:先翻譯再合并
6.4 JSTL標簽
JSTL (全名:java? standard? tag? libarary?? - ?java標準標簽庫)
核心標簽庫(c標簽庫)天天用
國際化標簽(fmt標簽庫)
EL函數(shù)庫(fn函數(shù)庫)
xml標簽庫(x標簽庫)
sql標簽庫(sql標簽庫)
6.5使用JSTL標簽步驟
1)導入jstl支持的jar包(標簽背后隱藏的java代碼)
注意:使用javaee5.0的項目自動導入jstl支持jar包
2)使用taglib指令導入標簽庫
<%@tagliburi="tld文件的uri名稱"prefix="簡寫"%>
3)在jsp中使用標簽
核心標簽庫的重點標簽:
保存數(shù)據(jù):
獲取數(shù)據(jù):
單條件判斷
多條件判斷
循環(huán)數(shù)據(jù)
重定向