Javaweb開(kāi)發(fā)項(xiàng)目實(shí)例教程(idea版)——Servlet規(guī)范(下篇)

接上篇servlet規(guī)范繼續(xù)更新~~~好了,廢話不多說(shuō),開(kāi)始正題!
十六、Cookie類:
1.介紹:
1) 來(lái)自于Servlet規(guī)范中提供一個(gè)工具類
2) 如果兩個(gè)Servlet為同一個(gè)用戶/用一個(gè)瀏覽器提供服務(wù),此時(shí)借助于用戶的cookie實(shí)現(xiàn)數(shù)據(jù)共享
3) cookie在現(xiàn)實(shí)生活中相當(dāng)于用戶的會(huì)員卡
2.實(shí)現(xiàn)原理
3.使用: myWeb網(wǎng)站中OneServlet通過(guò)Cookie與TwoServlet實(shí)現(xiàn)數(shù)據(jù)共享
運(yùn)行OneServlet
//1.生成一個(gè)Cookie對(duì)象Cookie? ? ? card=? ?new Cookie("共享數(shù)據(jù)名","共享數(shù)據(jù)");
//***一個(gè)Cookie對(duì)象只能存儲(chǔ)一個(gè)共享數(shù)據(jù)
//***cookie中共享數(shù)據(jù)只能String類型
//2.調(diào)用響應(yīng)對(duì)象將cookie寫入到響應(yīng)頭response.addCookie(card);
運(yùn)行twoServlet
//1.調(diào)用請(qǐng)求對(duì)象讀取請(qǐng)求頭中所有的cookie
Cookie? cookieArray[]= request.getCookies();
//2.遍歷循環(huán)數(shù)組,讀取OneServlet在cookie存入的數(shù)據(jù)
? ??for(Cookie card:cookieArrray){
? ? ? ? ? ? ? ??String key =? ?card.getName(); // 返回共享數(shù)據(jù)名
? ? ? ? ? ? ? ??String? value =? card.getValue();? //返回共享數(shù)據(jù)
? ? }
4.生命周期
1)在正常情況下,cookie存放在瀏覽器內(nèi)存中。在瀏覽器關(guān)閉時(shí),cookie將被銷毀
2)在命令控制下,可以要求瀏覽器將接收cookie存放在客戶端計(jì)算機(jī)的硬盤上并指定存活時(shí)間。在存活時(shí)間范圍內(nèi),關(guān)閉瀏覽器,關(guān)閉服務(wù)器,關(guān)閉計(jì)算機(jī)都不會(huì)導(dǎo)致cookie銷毀
cookie對(duì)象.setMaxAge(60); 在硬盤上存活1分鐘
十七、HttpSession接口
1.介紹
1)HttpSession接口來(lái)自于Servlet規(guī)范中
2)? HttpSession接口實(shí)現(xiàn)類由Http服務(wù)器廠商提供
3)? HttpSession接口修飾對(duì)象被稱為會(huì)話作用域?qū)ο?/p>
4)如果兩個(gè)Servlet為同一個(gè)用戶/同一個(gè)瀏覽器提供服務(wù)此時(shí)可以借助于用戶的HttpSession對(duì)象進(jìn)行數(shù)據(jù)共享
2.cookie與HttpSession區(qū)別 【筆試】
1)類型不同:
Cookie是一個(gè)類
HttpSession是一個(gè)接口
2)? 存放位置不同:
Cookie存放在客戶端計(jì)算機(jī)會(huì)話作用域?qū)ο蟠娣旁诜?wù)端計(jì)算機(jī)內(nèi)存
3)存放共享數(shù)據(jù)個(gè)數(shù)不同
一個(gè)cookie對(duì)象只能存儲(chǔ)一個(gè)共享數(shù)據(jù)
一個(gè)會(huì)話作用域?qū)ο笸ㄟ^(guò)map存儲(chǔ),因此可以任何個(gè)共享數(shù)據(jù)
4)? 存放數(shù)據(jù)類型不同
cookie只能存放String類型的共享數(shù)據(jù)
會(huì)話作用域?qū)ο蟠娣臤bject類型的共享數(shù)據(jù)
5)? ?與用戶關(guān)系
一個(gè)用戶可以擁有多個(gè)cookie
一個(gè)用戶只能擁有一個(gè)會(huì)話作用域?qū)ο?/p>
6) 參照物不同
cookie相當(dāng)于用戶在服務(wù)端擁有的會(huì)員卡
會(huì)話作用域?qū)ο笙喈?dāng)于用戶在服務(wù)端擁有的私人儲(chǔ)物柜
3. 工作原理:
4.使用? ?myWeb網(wǎng)站中OneServlet通過(guò)HttpSession與TwoServlet實(shí)現(xiàn)數(shù)據(jù)共享
//運(yùn)行OneServlet
//1.調(diào)用請(qǐng)求對(duì)象向Tomcat索要當(dāng)前用戶私人儲(chǔ)物柜
HttpSession session = request.getSession();
//2.將共享數(shù)據(jù)添加到當(dāng)前用戶私人儲(chǔ)物柜
session.setAttribute("共享數(shù)據(jù)名")
//運(yùn)行TwoServlet
//1.調(diào)用請(qǐng)求對(duì)象向Tomcat索要當(dāng)前用戶私人儲(chǔ)物柜
HttpSession? ? session = request.getSession(false);
//2.讀取OneServlet存入到共享數(shù)據(jù)
Object data = session.getAttribute("共享數(shù)據(jù)名")
5.? request.getSession()? 與? request.getSession(false)
1) request.getSession():
如果當(dāng)前用戶在服務(wù)端擁有私人儲(chǔ)物柜,要求tomcat返回這個(gè)儲(chǔ)物柜
如果當(dāng)前用戶在服務(wù)端尚未擁有私人儲(chǔ)物柜,要求tomcat為當(dāng)前用戶創(chuàng)建一個(gè)全新的私人儲(chǔ)物柜
2)request.getSession(false)
如果當(dāng)前用戶在服務(wù)端擁有私人儲(chǔ)物柜,要求tomcat返回這個(gè)儲(chǔ)物柜
如果當(dāng)前用戶在服務(wù)端尚未擁有私人儲(chǔ)物柜,要求tomcat返回null
3) 如果當(dāng)前用戶身份【經(jīng)過(guò)登錄驗(yàn)證審核判定為合法】,此時(shí)應(yīng)該使用request.getSession()來(lái)索要私人儲(chǔ)物柜
4)如果當(dāng)前用戶身份尚未確認(rèn)合法,此時(shí)應(yīng)該使用request.getSession(false)來(lái)索要私人儲(chǔ)物柜
6.session銷毀時(shí)機(jī):
1)在瀏覽器關(guān)閉時(shí),服務(wù)端是否會(huì)銷毀用戶的session[面試]
? ? ? 在瀏覽器關(guān)閉時(shí),切斷了用戶與瀏覽器之間聯(lián)系但是tomcat是服務(wù)端計(jì)算機(jī)中資源調(diào)度軟件無(wú)法偵測(cè)瀏覽器何時(shí)關(guān)閉的,因此在瀏覽器關(guān)閉時(shí),服務(wù)端是不會(huì)銷毀用戶的session
2)tomcat在創(chuàng)建session對(duì)象時(shí),設(shè)置一個(gè)【最大空閑時(shí)間】。
如果session對(duì)象從上次使用完畢到現(xiàn)在空閑時(shí)間達(dá)到了【最大空閑時(shí)間】tomcat認(rèn)為用戶放棄了自己的session.此時(shí)tomcat負(fù)責(zé)銷毀
3)tomcat設(shè)置【最大空閑時(shí)間】是30分鐘
4)網(wǎng)站自行設(shè)置session 【最大空閑時(shí)間】
? ??? ? web.xml
? ? ??? <session-config>
? ? ? ?? ? ? ? ?<session-timeout>5</session-timeout><!--session最大空閑時(shí)間5分鐘-->
? ??? ? </session-config>
7.HttpServletRequest實(shí)現(xiàn)Servlet之間數(shù)據(jù)共享
1.前提條件: 在一次請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中,兩個(gè)Servlet共享同一個(gè)請(qǐng)求協(xié)議包。
? ?因此兩個(gè)Servlet共享這個(gè)請(qǐng)求協(xié)議包中請(qǐng)求對(duì)象和響應(yīng)對(duì)象
? ?所以在請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中兩個(gè)Servlet可以通過(guò)當(dāng)前請(qǐng)求對(duì)象實(shí)現(xiàn)數(shù)據(jù)共享。
? ?當(dāng)請(qǐng)求對(duì)象實(shí)現(xiàn)數(shù)據(jù)共享時(shí)使用內(nèi)部attribute(ConcurrentHashMap)屬性存儲(chǔ)共享數(shù)據(jù)
? ?此時(shí)開(kāi)發(fā)人員將請(qǐng)求對(duì)象稱為【請(qǐng)求作用域?qū)ο蟆?/p>
2. 使用:? ?在一次請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中OneServlet需要通過(guò)請(qǐng)求對(duì)象將數(shù)據(jù)共享給TwoServlet
運(yùn)行OneServlet
request.setAttribute("共享數(shù)據(jù)名",共享數(shù)據(jù));
request.getRequestDispatcher("/two").forward(request,response)
運(yùn)行TwoServlet
Object 共享數(shù)據(jù) = request.getAttribute("共享數(shù)據(jù)名");
十八、監(jiān)聽(tīng)器接口:
1.介紹:
1)一組(8個(gè))來(lái)自于Servlet規(guī)范中接口
2) 監(jiān)聽(tīng)器接口由項(xiàng)目開(kāi)發(fā)人員負(fù)責(zé)實(shí)現(xiàn)
3) 監(jiān)聽(tīng)器負(fù)責(zé)監(jiān)聽(tīng)作用域?qū)ο蟛⒃谥付ㄊ录姓{(diào)用監(jiān)聽(tīng)處理方法
2.作用域?qū)ο?
存在于服務(wù)端計(jì)算機(jī)內(nèi)存中,可以在指定條件下為servlet之間提供數(shù)據(jù)共享服務(wù)的對(duì)象
3.Servlet規(guī)范中定義作用域?qū)ο?3個(gè)
1.ServletContext接口----全局作用域?qū)ο?br>
2.HttpSession接口? ------會(huì)話作用域?qū)ο?/p>
3.HttpServletRequest接口----請(qǐng)求作用域?qū)ο?/p>
4.監(jiān)聽(tīng)器作用:
1)?監(jiān)聽(tīng)作用域?qū)ο笊芷谧兓瘯r(shí)刻
2) 監(jiān)聽(tīng)作用域?qū)ο蟠娣殴蚕頂?shù)據(jù)變化時(shí)刻
5.監(jiān)聽(tīng)器接口實(shí)現(xiàn)類開(kāi)發(fā)步驟
1)根據(jù)監(jiān)聽(tīng)目的選擇對(duì)應(yīng)接口進(jìn)行實(shí)現(xiàn)
2)重寫監(jiān)聽(tīng)器接口中事件處理方法,這些方法在指定事件產(chǎn)生時(shí)由tomcat負(fù)責(zé)調(diào)用
3)web.xml向tomcat注冊(cè)監(jiān)聽(tīng)器接口實(shí)現(xiàn)類
6.ServletContextListener接口:
? ?監(jiān)聽(tīng)全局作用域?qū)ο笊芷谧兓瘯r(shí)刻
7.全局作用域?qū)ο笊芷冢?br>
1)在Tomcat啟動(dòng)時(shí),自動(dòng)為當(dāng)前網(wǎng)站創(chuàng)建全局作用域?qū)ο?br>
2)在Tomcat運(yùn)行時(shí),一個(gè)網(wǎng)站有且只能有一個(gè)全局作用域?qū)ο?/p>
3)在Tomcat關(guān)閉時(shí),自動(dòng)銷毀網(wǎng)站中全局作用域?qū)ο?/p>
8.ServletContextAttributeListener接口
? ??監(jiān)聽(tīng)全局作用域?qū)ο蠊蚕頂?shù)據(jù)變化時(shí)刻
9.全局作用域?qū)ο蠊蚕頂?shù)據(jù)變化
ServletContext application = request.getServletContext();
application.setAttribute("key1",100); //新增共享數(shù)據(jù)
application.setAttribute("key1",200);//更新共享數(shù)據(jù)
application.removeAttribute("key1");//移除共享數(shù)據(jù)
10.浴池拖鞋管理方案:
1.在浴池營(yíng)業(yè)之前,實(shí)現(xiàn)購(gòu)買一批拖鞋
2.在浴池營(yíng)業(yè)時(shí),每當(dāng)接受一個(gè)客人直接提供一雙拖鞋
3.在浴池營(yíng)業(yè)時(shí),客人接收服務(wù)完畢后需要返還拖鞋,為下一個(gè)用戶準(zhǔn)備
11.數(shù)據(jù)庫(kù)連接池管理方案(Connection)
1.在Tomcat啟動(dòng)時(shí),預(yù)先創(chuàng)建一定數(shù)量的Connection
2.在Tomcat運(yùn)行時(shí),為用戶提供服務(wù)時(shí)選擇一個(gè)空閑的Connection為用戶使用
3.在Tomcat運(yùn)行時(shí),用戶服務(wù)處理完畢后不會(huì)銷毀Connection。而是重新設(shè)置為空閑狀態(tài)
4.在Tomcat準(zhǔn)備關(guān)閉時(shí),銷毀掉所有Connection
12.數(shù)據(jù)庫(kù)連接池管理方案遇到問(wèn)題:??
1.如何確保連接通道在tomcat運(yùn)行時(shí)一直存在的 (application)
2.如何將連接通道共享給所有Servlet(application)
3.如何知曉tomcat何時(shí)啟動(dòng)何時(shí)關(guān)閉(ServletContextListener)
十九、過(guò)濾器接口(Filter)
1.介紹:
1)Filter接口來(lái)自于Servlet規(guī)范
2)Filter接口實(shí)現(xiàn)類由項(xiàng)目開(kāi)發(fā)人員實(shí)現(xiàn)
3)? Filter接口可以在tomcat調(diào)用資源文件之前進(jìn)行攔截??
2.Filter接口作用:
1) 攔截tomcat之后,幫助tomcat檢測(cè)本次請(qǐng)求合法性
2) 攔截tomcat之后,對(duì)本次攔截的請(qǐng)求做增強(qiáng)服務(wù)
3.Filter接口實(shí)現(xiàn)類開(kāi)發(fā)步驟:3步
1) 創(chuàng)建Filter接口實(shí)現(xiàn)類
2)? ?重寫doFilter方法
3)web.xml注冊(cè)過(guò)濾器接口實(shí)現(xiàn)類
4.過(guò)濾器攔截地址:
1)通知tomcat調(diào)用某個(gè)具體資源文件時(shí)需要調(diào)用當(dāng)前過(guò)濾器
? ? ??<url-pattern>/文件名.后綴名</url-pattern>
2)通知tomcat調(diào)用某個(gè)文件夾下資源文件時(shí)需要調(diào)用當(dāng)前過(guò)濾器
? ? ??<url-pattern>/文件夾名/*</url-pattern>
3) 通知tomcat調(diào)用某種類型文件時(shí)需要調(diào)用當(dāng)前過(guò)濾器
? ???<url-pattern>*.jpg</url-pattern>
4) 通知tomcat在調(diào)用當(dāng)前網(wǎng)站下任意資源文件時(shí)需要調(diào)用當(dāng)前過(guò)濾器
? ??<url-pattern>/*</url-pattern>
5.惡意登錄解決方案----令牌機(jī)制
最后奉上視頻教程??,視頻觀看效果更佳??!走過(guò)路過(guò)別忘素質(zhì)三連哦~~
