1.容器處理異常(了解)
將異常拋給容器,讓容器來處理。
2.servlet小結(jié)
(1)Servlet基礎(chǔ)
1)什么是Servlet?
2)如何開發(fā)一個(gè)Servlet?
3)什么是Servlet容器?
4)http協(xié)議(了解)
a.什么是http協(xié)議?
b.特點(diǎn)
c.數(shù)據(jù)包的結(jié)構(gòu)
d.狀態(tài)碼,消息頭
e.get/post請求
5)Servlet是如何運(yùn)行的?
(2)Servlet核心
1)讀取請求參數(shù)值
2)處理表單中文參數(shù)值亂碼問題
3)Servlet輸出中文亂碼問題
4)轉(zhuǎn)發(fā)與重定向
5)Servlet的生命周期
1)什么是Servlet的生命周期?
2)分成哪幾個(gè)階段?
a.實(shí)例化 (load-on-startup) 單例
b.初始化 (一次,overrid init方法)
c.調(diào)用/就緒 (doGet,doPost)
d.銷毀
3)相關(guān)的接口與類 (Servlet,GenericServlet,HttpServlet)
6)Servlet上下文
7)線程安全問題
8)容器如何處理請求資源路徑?
9)如何讓一個(gè)Servlet處理多種請求?
10)路徑問題
(3)狀態(tài)管理
1)什么是狀態(tài)管理?
2)如何進(jìn)行狀態(tài)管理?
3)Cookie
a.什么是Cookie?
b.工作原理 (set-cookie消息頭,cookie消息頭)
c.如何添加Cookie?
d.三個(gè)問題(編碼問題,生存時(shí)間問題,路徑問題)
e.如何讀取Cookie?
f.Cookie的限制
4)Session
a.什么是Session?
b.工作原理
c.如何獲得Session對象 (request.getSession)
d.綁訂數(shù)據(jù)
e.Session超時(shí)
f.刪除Session
(4)數(shù)據(jù)庫訪問
dao
(5)過濾器與監(jiān)聽器
1)什么是過濾器?
2)如何寫一個(gè)過濾器?
3)初始化參數(shù)
4)優(yōu)先級
5)優(yōu)點(diǎn)(了解)
6)什么是監(jiān)聽器?
7)如何寫一個(gè)監(jiān)聽器?
(6)案例
員工管理
登錄/注冊
session驗(yàn)證
驗(yàn)證碼
3. jsp
(1)什么是jsp?
.jsp(html + java代碼) --->Servlet
(2)如何寫jsp?
1)html (css,js): 直接寫
2)java代碼:
a.java代碼片斷:? <%? %>
b.jsp表達(dá)式:? <%=? %>
c.jsp聲明:? <%! 變量或者方法? %>
3)隱含對象
a.什么是隱含對象?
b.為什么可以使用這些隱含對象?
c.有哪些隱含對象?
out,request,response,session,application
pageContext(page上下文):
c1. 容器會為每一個(gè)jsp實(shí)例創(chuàng)建唯一的一個(gè)符合PageContext接口要求的對象。
注: 一個(gè)jsp實(shí)例對應(yīng)一個(gè)pageContext,另外,只要jsp實(shí)例還在,pageContext就在。
c2. 作用
作用1:綁訂數(shù)據(jù) (setAttribute,getAttribute,removeAttribute
注:可以將pageContext看作是一個(gè)“錢包”,綁訂到pageContext上面的數(shù)據(jù),只有對應(yīng)的
jsp實(shí)例才能訪問。
作用2:獲得其它隱含對象
exception(了解):只有當(dāng)page指令的isErrorPage屬性值為true時(shí),才能使用。用來獲取異常的簡潔的描述。
config(了解): ServletConfig
page(不用): jsp實(shí)例本身(jsp對應(yīng)的servlet實(shí)例)
4)指令
a.什么是指令?
b.指令的格式? <%@ 指令名? 屬性=值 %>
c.有哪些指令?
c1. page指令
import屬性
pageEncoding屬性
contentType屬性
errorPage屬性(了解):指定一個(gè)異常處理頁面(專門用來處理其它jsp產(chǎn)生的異常)。
isErrorPage屬性(了解):缺省值是false,當(dāng)值為true時(shí),表示這是一個(gè)異常處理頁面。可以在該頁面當(dāng)中,使用exception隱含對象。
session屬性(了解):缺省值是true,如果值設(shè)置為false,則不能夠使用session隱含對象了。
c2. incude指令
file屬性
c3. taglib指令
導(dǎo)入jsp標(biāo)簽。
5)注釋
a.? ? 如果注釋的內(nèi)容有java代碼,會執(zhí)行。
b. <%-- 注釋的內(nèi)容 --%>? 如果注釋的內(nèi)容有java代碼,不會執(zhí)行。
(3)執(zhí)行過程
step1.? jsp轉(zhuǎn)換成Servlet
html-------> service方法,使用out.write輸出。
<%? %> ----> service方法? ,照搬。
<%=? %> ---> service方法,使用out.print輸出。
<%!? %> ---> 為Servlet增加新的屬性和方法。
step2. 調(diào)用Servlet
4. jsp標(biāo)簽和el表達(dá)式
(1)什么是jsp標(biāo)簽?
jsp標(biāo)簽類似于html標(biāo)簽,用來替換jsp中的java代碼。
注:因?yàn)橹苯釉趈sp文件中寫java代碼,不利于jsp文件的維護(hù)(比如,將包含有大量java代碼的jsp交給美工去修改就很不方便),所以,sun公司制訂了jsp標(biāo)簽技術(shù)規(guī)范。使用jsp標(biāo)簽代替java代碼之后,jsp文件變得簡潔,便于維護(hù)。而且便于代碼的復(fù)用。
(2)什么是el表達(dá)式?
是一套運(yùn)算規(guī)則,用于給jsp標(biāo)簽的屬性賦值,也可以直接輸出。
(3)el表達(dá)式的使用
1)訪問bean的屬性
方式一? ${user.name} :? ? 容器依次從pageContext,request,session,application中查找綁訂名為"user"的對象(getAttribute),找到之后,會調(diào)用該對象的"getName"方法,然后輸出;如果找不到,會輸出""。
注:a.依次,指的是先從pageContext上去查找,如果沒有,再查找request,如果找到,則不再向下查找了。
b.如果值為null,會轉(zhuǎn)換成""輸出。
c.如果要指定查找范圍,可以使用pageScope,requestScope,sessionScope,applicationScope。
比如:${requestScope.user.name}。
方式二? ${user['name']}? ? 等價(jià)于${user.name}
注:a.[]可以使用綁訂名。
b.[]可以使用從0開始的下標(biāo),用來讀取數(shù)組中的某個(gè)元素。
2)做一些簡單的運(yùn)算
a. 算術(shù)運(yùn)算? +,-,*,/,%
注: + 只能求和。
b. 關(guān)系運(yùn)算? >,>=,<,<=,==,!=
c. 邏輯運(yùn)算? && || !
d. empty運(yùn)算 empty
用來判斷集合是否為空,或者是否為一個(gè)空字符串。
3)讀取請求參數(shù)值(了解)
${param.username}等價(jià)于request.getParameter("username");
${paramValues.city}等價(jià)于request.getParameterValues("city");
(4)jstl(java standard taglib)標(biāo)簽
注(了解):apache開發(fā)的一套標(biāo)簽,后來捐獻(xiàn)給了sun。
1)如何使用jstl標(biāo)簽。
step1.導(dǎo)包。(jstl.jar)
step2.使用taglib指令,導(dǎo)入要使用的標(biāo)簽。
2)幾個(gè)核心標(biāo)簽
a. if標(biāo)簽
注:a1. c是命名空間的前綴(別名)。
命名空間(namespace): 為了區(qū)分同名的元素而添加的一個(gè)限定。
a2. 如果test屬性值為true,則執(zhí)行標(biāo)簽體的內(nèi)容。test屬性可以使用el表達(dá)式來計(jì)算。
a3. var屬性指定一個(gè)綁訂名,scope屬性指定綁訂的范圍("page","request","session","application")
b.choose標(biāo)簽
注:b1.when表示一個(gè)分支,如果test屬性值為true,則執(zhí)行該分支。(可以出現(xiàn)1次或者多次)
b2.otherwise表示例外,可以出現(xiàn)0次或者1次。
c.forEach標(biāo)簽
注:c1.用來遍歷集合或者數(shù)組。
c2.items屬性用來指定要遍歷的集合或者數(shù)組,可以使用el表達(dá)式。
c3.var屬性用來指定綁訂名(綁訂范圍是pageContext)。
c4.varStatus屬性用來指定綁訂名(綁訂范圍是pageContext),綁訂值是一個(gè)特殊的對象(由該標(biāo)簽創(chuàng)建,作用是用來獲得當(dāng)前遍歷的狀態(tài),比如getIndex方法:獲得當(dāng)前被遍歷的元素的下標(biāo)。getCount方法用來獲得當(dāng)前是第幾次遍歷)? ? 。
3)自定義jsp標(biāo)簽
編程步驟
step1. 寫一個(gè)java類,繼承SimpleTagSupport類。
step2. override doTag方法,在該方法里面,寫處理邏輯。
step3. 在.tld文件當(dāng)中描述標(biāo)簽。
<body-content>的值可以是emtpy,scriptless,JSP
empty:標(biāo)簽沒有標(biāo)簽體。
scriptless:標(biāo)簽可以有標(biāo)簽體,但是標(biāo)簽體的內(nèi)容不能夠出現(xiàn)java代碼(<%? %>,<%= %>,<%!? %>)。
JSP:標(biāo)簽可以有標(biāo)簽體,標(biāo)簽體的內(nèi)容可以出現(xiàn)java代碼。但是,只有復(fù)雜標(biāo)簽技術(shù)才支持。
注:復(fù)雜標(biāo)簽技術(shù)是一種比較老的標(biāo)簽技術(shù)。繼承自SimpleTagSupport的標(biāo)簽屬于簡單標(biāo)簽技術(shù)。
代碼示例: