下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JavaWeb組件(試必看)1.ServletServlet是來處理客戶端請(qǐng)求的動(dòng)態(tài)資源,也就是當(dāng)我們?cè)跒g覽器中鍵個(gè)地址回車跳轉(zhuǎn)后,請(qǐng)求就會(huì)被發(fā)送到對(duì)應(yīng)的Servlet上進(jìn)處理。1.1 Servlet的任務(wù)有:1)接收請(qǐng)求數(shù)據(jù):客戶端請(qǐng)求會(huì)被封裝成HttpServletRequest對(duì)象,包含了請(qǐng)求頭、參數(shù)等各種信息。2)處理請(qǐng)求:通常我們會(huì)在service、dopost或者doget法進(jìn)接收參數(shù),并且調(diào)業(yè)務(wù)層(service)的法來處理請(qǐng)求。3)完成響應(yīng):處理完請(qǐng)求后,我們般會(huì)轉(zhuǎn)發(fā)(forward)或者重定向(redirect)到某個(gè)頁(yè),轉(zhuǎn)發(fā)是HttpServletRequest中的法,重定
2、向是HttpServletResponse中的法,兩者是有很區(qū)別的。1.2 Servlet的創(chuàng)建:Servlet可以在第次接收請(qǐng)求時(shí)被創(chuàng)建,也可以在在服務(wù)器啟動(dòng)時(shí)就被創(chuàng)建,這需要在web.xml的中添加條配置信息 5,當(dāng)值為0或者于0時(shí),表容器在應(yīng)啟動(dòng)時(shí)就加載這個(gè)servlet,當(dāng)是個(gè)負(fù)數(shù)時(shí)或者沒有指定時(shí),則指容器在該servlet被請(qǐng)求時(shí)才加載。/Servert/requestadress / Servlet映射個(gè)請(qǐng)求地址 Servletweb服務(wù)器請(qǐng)求要有請(qǐng)求地址web服務(wù)器,如發(fā)送的請(qǐng)求為個(gè)地址/requestadress,web.XML中會(huì)映射這個(gè)請(qǐng)求地址給ServletServlet
3、-namewebServlet-nameServlet實(shí)例, Servletservice()法完成數(shù)據(jù)的處理。1.3 Servlet命周期Servlet的命周期是指Servlet的對(duì)象由被創(chuàng)建到銷毀的過程。Servlet的命周期法:1)構(gòu)造器:- Servlet第次處理請(qǐng)求的時(shí)候調(diào),于創(chuàng)建Servlet的實(shí)例,只會(huì)調(diào)次。- Servlet是單例,同個(gè)Servlet在服務(wù)器中只有個(gè)對(duì)象,但是它是多線程的,效率;- 它是以多線程的式調(diào)service()法,Servlet不是線程安全的,在service()中盡量不要操作全局變量。2)init()-構(gòu)造器執(zhí)后,init馬上被調(diào),來做初始化操作,只會(huì)
4、調(diào)次-注意如果我們調(diào)的是HttpServlet,那么他有兩個(gè)init法,如果要重寫只能重寫參的法。3)service()-每次處理請(qǐng)求時(shí)都會(huì)調(diào)service法,它來處理戶發(fā)送的請(qǐng)求,會(huì)調(diào)多次-如果我們通過繼承HttpServlet實(shí)現(xiàn)Servlet,我們只需重寫doGet或doPost4)destroy()-Servlet對(duì)象銷毀之前調(diào),來做些收尾作嗎,只會(huì)調(diào)次。1.4 ServletConfig接每個(gè)Servlet都有其唯對(duì)應(yīng)的ServletConfig,ServletConfig代表Servlet的配置信息,具體來說就是servlet標(biāo)簽中的內(nèi)容usernameroot1.5 Servle
5、tContext接代表整個(gè)的web應(yīng),每個(gè)web應(yīng)都有其唯的ServletContext對(duì)象,ServletContext對(duì)象在服務(wù)器啟動(dòng)時(shí)創(chuàng)建,在服務(wù)器停時(shí)銷毀獲取:通過ServletConfig的getServletContext()法獲取1.6 HttpServletRequest接request代表瀏覽器發(fā)送給服務(wù)器的請(qǐng)求報(bào)獲?。河煞?wù)器創(chuàng)建(服務(wù)器將請(qǐng)求報(bào)封裝為HttpServletRequest對(duì)象),最終作為參數(shù)傳遞到doGet或doPost法中。功能:1)獲取瀏覽器發(fā)送的請(qǐng)求參數(shù)2)動(dòng)態(tài)的獲取項(xiàng)的名字(主要來設(shè)置絕對(duì)路徑)3)作為個(gè)域?qū)ο笤诓煌瑆eb資源之間共享數(shù)據(jù)4)請(qǐng)求的轉(zhuǎn)
6、發(fā)1.7 HttpServletResponse接代表服務(wù)端發(fā)送瀏覽器的響應(yīng)報(bào)獲?。河煞?wù)器創(chuàng)建(服務(wù)器將響應(yīng)報(bào)封裝為HttpServletRsponse對(duì)象),最終作為參數(shù)傳遞到doGet或doPost法中。功能;1)可以向?yàn)g覽器發(fā)送個(gè)頁(yè)或頁(yè)段2)做請(qǐng)求的重定向3)將數(shù)據(jù)寫到頁(yè)1.8 轉(zhuǎn)發(fā)和重定向的區(qū)別兩種跳轉(zhuǎn)獲得對(duì)象的式/getRequestDispatcher()HttpServletResponse(httpServletResponse).sendRedirect();轉(zhuǎn)發(fā)和跳轉(zhuǎn)的結(jié)1、轉(zhuǎn)發(fā)使的是getRequestDispatcher()法;重定向使的是sendRedirect()
7、;2、轉(zhuǎn)發(fā):瀏覽器URL的地址欄不變。重定向:瀏覽器URL的地址欄改變;3、轉(zhuǎn)發(fā)是服務(wù)器為,重定向是客戶端為;4、轉(zhuǎn)發(fā)是瀏覽器只做了次訪問請(qǐng)求。重定向是瀏覽器做了少兩次的訪問請(qǐng)求;5、轉(zhuǎn)發(fā)2次跳轉(zhuǎn)之間傳輸?shù)男畔⒉粫?huì)丟失,重定向2次跳轉(zhuǎn)之間傳輸?shù)男畔?huì)丟失(request范圍)。轉(zhuǎn)發(fā)和重定向的選擇1、重定向的速度轉(zhuǎn)發(fā)慢,因?yàn)闉g覽器還得發(fā)出個(gè)新的請(qǐng)求,如果在使轉(zhuǎn)發(fā)和重定向都所謂的時(shí)候建議使轉(zhuǎn)發(fā)。2、因?yàn)檗D(zhuǎn)發(fā)只能訪問當(dāng)前WEB的應(yīng)程序,所以不同WEB應(yīng)程序之間的訪問,特別是要訪問到另外個(gè)WEB站點(diǎn)上的資源的情況,這個(gè)時(shí)候就只能使重定向了。轉(zhuǎn)發(fā)和重定向的應(yīng)場(chǎng)景在上我已經(jīng)提到了,轉(zhuǎn)發(fā)是要重定向快,因?yàn)橹?/p>
8、定向需要經(jīng)過客戶端,轉(zhuǎn)發(fā)沒有。有時(shí)候,采重定向會(huì)更好,若需要重定向到另外個(gè)外部站,則法使轉(zhuǎn)發(fā)。另外,重定向還有個(gè)應(yīng)場(chǎng)景:避免在戶重新加載頁(yè)時(shí)兩次調(diào)相同的動(dòng)作。例如,當(dāng)提交產(chǎn)品表單的時(shí)候,執(zhí)保存的法將會(huì)被調(diào),并執(zhí)相應(yīng)的動(dòng)作;這在個(gè)真實(shí)的應(yīng)程序中,很有可能將表單中的所有產(chǎn)品信息加到數(shù)據(jù)庫(kù)中。但是如果在提交表單后,重新加載頁(yè),執(zhí)保存的法就很有可能再次被調(diào)。同樣的產(chǎn)品信息就將可能再次被添加,為了避免這種情況,提交表單后,你可以將戶重定向到個(gè)不同的頁(yè),這樣的話,這個(gè)頁(yè)任意重新加載都沒有副作; 但是,使重定向不太便的地是,使它法將值輕松地傳遞給標(biāo)頁(yè)。采轉(zhuǎn)發(fā),則可以簡(jiǎn)單地將屬性添加到Model,使得標(biāo)視圖可
9、以輕松訪問。由于重定向經(jīng)過客戶端,所以Model中的切都會(huì)在重定向時(shí)丟失。但幸運(yùn)的是,在Spring3.1版本以后,我們可以通過Flash屬性,解決重定向時(shí)傳值丟失的問題。要使Flash屬性,必須在Spring MVC的配置件中添加個(gè)。然后,還必須再法上添加個(gè)新的參數(shù)類型:org.springframework.web.servlet.mvc.support.RedirectAttributes。如下所:RequestMapping(value=saveProduct,method=RequestMethod.POST)public String saveProduct(ProductForm
10、 productForm,RedirectAttributes redirectAttributes)/執(zhí)產(chǎn)品保存的業(yè)務(wù)邏輯等/傳遞參數(shù)redirectAttributes.addFlashAttribute(message,The product is saved successfully);/執(zhí)重定向return redirect:/;1.9 Servlet的線程安全性?Servlet不是線程安全的當(dāng)Tomcat接收到Client的HTTP請(qǐng)求時(shí),Tomcat從線程池中取出個(gè)線程,之后找到該請(qǐng)求對(duì)應(yīng)的Servlet對(duì)象并進(jìn)初始化,之后調(diào)service()法。要注意的是每個(gè)Servlet對(duì)象
11、再Tomcat容器中只有個(gè)實(shí)例對(duì)象,即是單例模式。如果多個(gè)HTTP請(qǐng)求請(qǐng)求的是同個(gè)Servlet,那么著兩個(gè)HTTP請(qǐng)求對(duì)應(yīng)的線程將并發(fā)調(diào)Servlet的service()法。上圖中的Thread1和Thread2調(diào)了同個(gè)Servlet1,所以此時(shí)如果Servlet1中定義了實(shí)例變量或靜態(tài)變量,那么可能會(huì)發(fā)線程安全問題(因?yàn)樗械木€程都可能使這些變量)。1.10 Servlet實(shí)現(xiàn)線程安全的三種式(1)在Servlet中不使全局變量.Servlet線程安全問題很部分是由實(shí)例變量造成的,只要在Servlet的任何法都不使實(shí)例變量,那么該Servlet就是線程安全的。將實(shí)例變量編程局部變量,多線程
12、下每個(gè)線程對(duì)局部變量都會(huì)有的份copy,這樣對(duì)局部變量的修改只會(huì)影響到的copy不會(huì)對(duì)別的線程產(chǎn)影響,線程安全的。*Java 內(nèi)存模型中,法中的臨時(shí)變量是在棧上分配空間,且每個(gè)線程都有私有的??臻g,所以它們不會(huì)影響線程的安全。*但是對(duì)于實(shí)例變量來說,由于servlet在Tomcat中是以單例模式存在的,所有的線程共享實(shí)例變量。多個(gè)線程對(duì)共享資源的訪問就造成了線程不安全問題。(2)同步共享的數(shù)據(jù),使synchronized(this)/共享數(shù)據(jù).同步塊.使synchronized 關(guān)鍵字能保證次只有個(gè)線程可以訪問被保護(hù)的區(qū)段,在本論中的Servlet可以通過同步塊操作來保證線程的安全。(3)實(shí)現(xiàn)
13、SingleThreadModel接.該接指定了系統(tǒng)如何處理對(duì)同個(gè)Servlet的調(diào)。如果個(gè)Servlet被這個(gè)接指定,那么在這個(gè)Servlet中的service法將不會(huì)有兩個(gè)線程被同時(shí)執(zhí),當(dāng)然也就不存在線程安全的問題。2.1 Filter簡(jiǎn)介filer是javaweb中的過濾器,它與servlet樣,也有三個(gè)命周期法,同時(shí)在web.xml的配置也差不多.但是兩者的主要功能不同,servlet負(fù)責(zé)處理請(qǐng)求,filter負(fù)責(zé)攔截請(qǐng)求和放.可以實(shí)現(xiàn)Url級(jí)別的權(quán)限訪問,敏感詞匯過濾,解決編碼問題等等.2.2 filter實(shí)現(xiàn)原理Filter接中有個(gè)doFilter法,當(dāng)我們編寫好Filter,并配
14、置對(duì)哪個(gè)web資源進(jìn)攔截后,WEB服務(wù)器每次在調(diào)web資源的service法之前,都會(huì)先調(diào)下filter的doFilter法,因此,在該法內(nèi)編寫代碼可達(dá)到如下的:(1)調(diào)標(biāo)資源之前,讓段代碼執(zhí)。(2)是否調(diào)標(biāo)資源(即是否讓戶訪問web資源)。(3)調(diào)標(biāo)資源之后,讓段代碼執(zhí)。web服務(wù)器在調(diào)doFilter法時(shí),會(huì)傳遞個(gè)filterChain對(duì)象進(jìn)來,filterChain對(duì)象是filter接中最重要的個(gè)對(duì)象,它也提供了個(gè)doFilter法,我們可以根據(jù)需求決定是否調(diào)此法,調(diào)該法,則web服務(wù)器就會(huì)調(diào)web資源的service法,即web資源就會(huì)被訪問,否則web資源不會(huì)被訪問。2.3 filter的四種攔截式REQUEST:直接訪問標(biāo)資源時(shí)執(zhí)過濾器。包括:在地址欄中直接訪問、表單提交、
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店餐飲服務(wù)規(guī)范與質(zhì)量控制制度
- 六年級(jí)習(xí)作指導(dǎo)《我愛夏天》課件
- 磁共振成像基本知識(shí)
- 小學(xué)生安全用電講座課件(孩子們很喜歡)
- 集體土地使用權(quán)轉(zhuǎn)讓協(xié)議書(30篇)
- 毫針刺法-針灸學(xué)課件南京中醫(yī)藥大學(xué)
- 陜西省咸陽(yáng)市武功縣2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含解析)
- 中國(guó)著名電視劇導(dǎo)演
- 河南許昌普高2025屆高考沖刺模擬語(yǔ)文試題含解析
- 《效績(jī)考核與管理》課件
- 招標(biāo)代理機(jī)構(gòu)優(yōu)惠條件及服務(wù)承諾
- 肩袖損傷病人的護(hù)理查房
- 領(lǐng)導(dǎo)干部的法治思維和法治方式
- 如何培養(yǎng)學(xué)生學(xué)習(xí)數(shù)學(xué)的興趣課件
- 中學(xué)生學(xué)習(xí)地理困難的原因及對(duì)策1000字
- 車間日常安全生產(chǎn)檢查表
- 冠寓運(yùn)營(yíng)管理手冊(cè)正式版
- 樹莓派機(jī)械臂使用說明書
- 化工原理課程設(shè)計(jì)-設(shè)計(jì)直管氣流干燥器,以干燥聚氯乙烯樹脂濕物料
- 反應(yīng)結(jié)晶釜的設(shè)備設(shè)計(jì)
- 人教版數(shù)學(xué)五年級(jí)上冊(cè)全冊(cè)校本作業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論