方立勛javawebservlet過(guò)濾器_第1頁(yè)
方立勛javawebservlet過(guò)濾器_第2頁(yè)
方立勛javawebservlet過(guò)濾器_第3頁(yè)
方立勛javawebservlet過(guò)濾器_第4頁(yè)
方立勛javawebservlet過(guò)濾器_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Servlet Filter方立勛北京傳智播客教育高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter簡(jiǎn)介 Filter也稱(chēng)之為過(guò)濾器,它是Servlet技術(shù)中最激動(dòng)人心的技術(shù),WEB開(kāi)發(fā)人員通過(guò)Filter技術(shù),對(duì)web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能。例如實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問(wèn)控制、過(guò)濾敏感詞匯、壓縮響應(yīng)信息等一些高級(jí)功能。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter簡(jiǎn)介 Servlet API中提供了

2、一個(gè)Filter接口,開(kāi)發(fā)web應(yīng)用時(shí),如果編寫(xiě)的Java類(lèi)實(shí)現(xiàn)了這個(gè)接口,則把這個(gè)java類(lèi)稱(chēng)之為過(guò)濾器Filter。 通過(guò)Filter技術(shù),開(kāi)發(fā)人員可以實(shí)現(xiàn)用戶(hù)在訪問(wèn)某個(gè)目標(biāo)資源之前, 對(duì)訪問(wèn)的請(qǐng)求和響應(yīng)進(jìn)行攔截,如下所示:web資源Jsp Servlet html過(guò)濾器北京傳智播客教育 Web服務(wù)器Web瀏覽器高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter是如何實(shí)現(xiàn)攔截的? Filter接口中有一個(gè)doFilter方法,當(dāng)開(kāi)發(fā)人員編寫(xiě)好Filter,并配置對(duì)哪個(gè)web資源進(jìn)行攔截后,WEB服務(wù)器每次在調(diào)用web資源的service方法之前,都會(huì)先調(diào)用一下filt

3、er的doFilter方法,因此,在該 方法內(nèi)編寫(xiě)代碼可達(dá)到如下目的: 調(diào)用目標(biāo)資源之前,讓一段代碼執(zhí)行是否調(diào)用目標(biāo)資源(即是否讓用戶(hù)訪問(wèn)web資源)。 web服務(wù)器在調(diào)用doFilter方法時(shí),會(huì)傳遞一個(gè)filterChain對(duì)象進(jìn)來(lái), filterChain對(duì)象是filter接口中最重要的一個(gè)對(duì)象,它也提供了一個(gè)doFilter方法,開(kāi)發(fā)人員可以根據(jù)需求決定是否調(diào)用此方法,調(diào)用該方法,則web服務(wù)器就會(huì)調(diào)用web資源的service方法,即web資源就會(huì)被訪問(wèn),否則web資源不會(huì)被訪問(wèn)。調(diào)用目標(biāo)資源之后,讓一段代碼執(zhí)行 實(shí)驗(yàn): Filter開(kāi)發(fā),見(jiàn)下頁(yè)P(yáng)PT中的開(kāi)發(fā)流程北京傳智播客教育 w

4、高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter開(kāi)發(fā)入門(mén) Filter開(kāi)發(fā)分為二個(gè)步驟:編寫(xiě)java類(lèi)實(shí)現(xiàn)Filter接口,并實(shí)現(xiàn)其doFilter方法。在 web.xml 文件中使用和元素對(duì)編寫(xiě)的filter 類(lèi)進(jìn)行注冊(cè),并設(shè)置它所能攔截的資源。(動(dòng)手實(shí)驗(yàn)) Filter鏈 在一個(gè)web應(yīng)用中,可以開(kāi)發(fā)編寫(xiě)多個(gè)Filter,這些Filter組合起來(lái)稱(chēng)之為一個(gè)Filter鏈。web服務(wù)器根據(jù)Filter在web.xml文件中的注冊(cè)順序,決定先調(diào)用哪個(gè)Filter,當(dāng)?shù)谝粋€(gè)Filter的doFilter方法被調(diào)用時(shí),web服務(wù)器會(huì)創(chuàng)建一個(gè)代表Filter鏈的FilterCh

5、ain對(duì)象傳遞給該方法。在doFilter方法中, 開(kāi)發(fā)人員如果調(diào)用了FilterChain對(duì)象的doFilter方法,則web服務(wù)器 會(huì)檢查FilterChain對(duì)象中是否還有filter,如果有,則調(diào)用第2個(gè)filter, 如果沒(méi)有,則調(diào)用目標(biāo)資源。Filter鏈實(shí)驗(yàn)(查看filterChain API文檔)北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip: Filter的生命周期 init(FilterConfig filterConfig)throws ServletException: 和我們編寫(xiě)的Servlet程序一樣,F(xiàn)ilter的創(chuàng)建和銷(xiāo)毀由WEB服

6、務(wù)器負(fù)責(zé)。 web 應(yīng)用程序啟動(dòng)時(shí),web 服務(wù)器將創(chuàng)建Filter 的實(shí)例對(duì)象,并調(diào)用其init方法,完成對(duì)象的初始化功能,從而為后續(xù)的用戶(hù)請(qǐng)求作好攔截的準(zhǔn)備工作(注:filter對(duì)象只會(huì)創(chuàng)建一 次,init方法也只會(huì)執(zhí)行一次。示例 )開(kāi)發(fā)人員通過(guò)init方法的參數(shù),可獲得代表當(dāng)前filter配置信息的FilterConfig對(duì)象。(filterConfig對(duì)象見(jiàn)下頁(yè)P(yáng)PT) destroy(): 在Web容器卸載 Filter 對(duì)象之前被調(diào)用。該方法在Filter的生命周期中僅執(zhí)行一次。在這個(gè)方法中,可以釋放過(guò)濾器使用的資源。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)

7、專(zhuān)家!Tip: FilterConfig接口 用戶(hù)在配置filter時(shí),可以使用為filter配置一些 初始化參數(shù),當(dāng)web容器實(shí)例化Filter對(duì)象,調(diào)用其init方法 時(shí),會(huì)把封裝了filter初始化參數(shù)的filterConfig對(duì)象傳遞進(jìn)來(lái)。因此開(kāi)發(fā)人員在編寫(xiě)filter時(shí),通過(guò)filterConfig對(duì)象的方法, 就可獲得:String getFilterName():得到filter的名稱(chēng)。String getInitParameter(String name): 返回在部署描述中指定名稱(chēng)的初始化參數(shù)的值。如果不存在返回null.Enumeration getInitParamete

8、rNames():返回過(guò)濾器的所有初始化參數(shù)的名字的枚舉集合。public ServletContext getServletContext():返回Servlet上下文對(duì)象的引用。 實(shí)驗(yàn):得到filter配置信息北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter常見(jiàn)應(yīng)用(1) 統(tǒng)一全站字符編碼的過(guò)濾器 通過(guò)配置參數(shù)encoding指明使用何種字符編碼, 以處理Html Form請(qǐng)求參數(shù)的中文問(wèn)題北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter常見(jiàn)應(yīng)用(2) 禁止瀏覽器緩存所有動(dòng)態(tài)頁(yè)面的過(guò)濾器: 有 3 個(gè) HT

9、TP 響應(yīng)頭字段都可以禁止瀏覽器緩存當(dāng)前頁(yè)面,它們?cè)赟ervlet 中的示例代碼如下: response.setDateHeader(Expires,-1); response.setHeader(Cache-Control,no-cache); response.setHeader(Pragma,no-cache);并不是所有的瀏覽器都能完全支持上面的三個(gè)響應(yīng)頭,因此最好是同時(shí)使用上面的三個(gè)響應(yīng)頭。Expires數(shù)據(jù)頭:值為GMT時(shí)間值,為-1指瀏覽器不要緩存頁(yè)面Cache-Control響應(yīng)頭有兩個(gè)常用值: no-cache指瀏覽器不要緩存當(dāng)前頁(yè)面。 max-age:xxx指瀏覽器緩存頁(yè)面

10、xxx秒。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter常見(jiàn)應(yīng)用(3) 控制瀏覽器緩存頁(yè)面中的靜態(tài)資源的過(guò)濾器: 場(chǎng)景:有些動(dòng)態(tài)頁(yè)面中引用了一些圖片或 css文件以修飾頁(yè)面效果,這些圖片和css文件經(jīng)常是不變化的,所以為減輕服務(wù)器的壓力,可以使用filter控制瀏覽器緩存這些文件,以提升服務(wù)器的性能。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter常見(jiàn)應(yīng)用(4) 使用Filter實(shí)現(xiàn)URL級(jí)別的權(quán)限認(rèn)證 情景:在實(shí)際開(kāi)發(fā)中我們經(jīng)常把一些執(zhí)行敏感操作的servlet映射到一些特殊目錄中,并用filter把這些特

11、殊目錄保護(hù)起來(lái),限制只能擁有相應(yīng)訪問(wèn)權(quán)限的用戶(hù)才能訪問(wèn)這些目錄下的資源。從而在我們系統(tǒng)中實(shí)現(xiàn)一種URL級(jí)別的權(quán)限功能。要求:為使Filter具有通用性,F(xiàn)ilter保護(hù)的資源和相應(yīng)的訪問(wèn)權(quán)限通過(guò)filter參數(shù)的形式予以配置。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter常見(jiàn)應(yīng)用(5) 實(shí)現(xiàn)用戶(hù)自動(dòng)登陸的過(guò)濾器 在用戶(hù)登陸成功后,發(fā)送一個(gè)名稱(chēng)為user的cookie 編寫(xiě)一個(gè)AutoLoginFilter,這個(gè)filter檢查用戶(hù)是否帶有名稱(chēng)為user的cookie來(lái),如果有,則調(diào)用dao查詢(xún)cookie的用戶(hù)名和是否和數(shù)據(jù)庫(kù)匹配,匹配則向sessi

12、on中存入user對(duì)象(即用戶(hù)登陸標(biāo)記),以實(shí)現(xiàn)程序完成自動(dòng)登陸。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter的部署注冊(cè)Filter用于為過(guò)濾器指定一個(gè)名字,該元素的內(nèi)容不能為空。元素用于指定過(guò)濾器的完整的限定類(lèi)名。元素用于為過(guò)濾器指定初始化參數(shù),它的子元素指定參數(shù)的名字,指定參數(shù)的值。在過(guò)濾器中,可以使用FilterConfig接口對(duì)象來(lái)訪問(wèn)初始化參數(shù)。北京傳智播客教育 testFitlerorg.test.TestFiterword_file/WEB-INF/word.txt高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filte

13、r的部署映射Filter 元素用于設(shè)置一個(gè) Filter 所負(fù)責(zé)攔截的資源。一個(gè)Filter攔截的資源可通過(guò)兩種方式來(lái)指定: Servlet 名稱(chēng)和資源訪問(wèn)的請(qǐng)求路徑 子元素用于設(shè)置filter的注冊(cè)名稱(chēng)。該值必須是在元素中聲明過(guò)的過(guò)濾器的名字設(shè)置 filter 所攔截的請(qǐng)求路徑(過(guò)濾器關(guān)聯(lián)的URL 樣式)指定過(guò)濾器所攔截的Servlet名稱(chēng)。指定過(guò)濾器所攔截的資源被 Servlet 容器調(diào)用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認(rèn)REQUEST。用戶(hù)可以設(shè)置多個(gè) 子元素用來(lái)指定 Filter 對(duì)資源的多種調(diào)用方式進(jìn)行攔截。北京傳智播客教育 www.i

14、高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter的部署映射Filter 子元素可以設(shè)置的值及其意義:REQUEST:當(dāng)用戶(hù)直接訪問(wèn)頁(yè)面時(shí),Web容器將會(huì)調(diào)用過(guò)濾器。如果目標(biāo)資源是通過(guò)RequestDispatcher的include()或forward()方法訪問(wèn)時(shí),那么該過(guò)濾器就不會(huì)被調(diào)用。INCLUDE:如果目標(biāo)資源是通過(guò)RequestDispatcher的include()方法訪問(wèn)時(shí),那么該過(guò)濾器將被調(diào)用。除此之外, 該過(guò)濾器不會(huì)被調(diào)用。FORWARD:如果目標(biāo)資源是通過(guò)RequestDispatcher的forward()方法訪問(wèn)時(shí),那么該過(guò)濾器將被調(diào)用,除此之外, 該過(guò)

15、濾器不會(huì)被調(diào)用。ERROR:如果目標(biāo)資源是通過(guò)聲明式異常處理機(jī)制調(diào)用時(shí), 那么該過(guò)濾器將被調(diào)用。除此之外,過(guò)濾器不會(huì)被調(diào)用。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter的部署映射Filter示例北京傳智播客教育 testFilter/index.jspREQUESTFORWARDtestFilter/test.jsp高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:Filter高級(jí)開(kāi)發(fā) 由于開(kāi)發(fā)人員在filter中可以得到代表用戶(hù)請(qǐng)求和響應(yīng)的request、response對(duì)象,因此在編程中可以使用Decorator(裝飾器)模式對(duì)req

16、uest、response對(duì)象進(jìn)行包裝,再把包裝對(duì)象傳給目標(biāo)資源,從而實(shí)現(xiàn)一些特殊需求。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip: Decorator設(shè)計(jì)模式 當(dāng)某個(gè)對(duì)象的方法不適應(yīng)業(yè)務(wù)需求時(shí),通常有2種方式可以對(duì)方法進(jìn)行增強(qiáng):編寫(xiě)子類(lèi),覆蓋需增強(qiáng)的方法使用Decorator設(shè)計(jì)模式對(duì)方法進(jìn)行增強(qiáng) 疑問(wèn):在實(shí)際應(yīng)用中遇到需增強(qiáng)對(duì)象的方法時(shí),到底選用哪種方式呢?沒(méi)有具體的定式,不過(guò)有一種情況下,必須使用Decorator設(shè)計(jì)模式: 即被增強(qiáng)的對(duì)象,開(kāi)發(fā)人員只能得到它的對(duì)象,無(wú)法得到它的class 文件。比如request、response對(duì)象,開(kāi)發(fā)人員之所以在

17、servlet中能通過(guò)sun公司定義的HttpServletRequestresponse接口去操作這些對(duì)象, 是因?yàn)門(mén)omcat服務(wù)器廠商編寫(xiě)了request、response接口的實(shí)現(xiàn)類(lèi)。web服務(wù)器在調(diào)用servlet時(shí),會(huì)用這些接口的實(shí)現(xiàn)類(lèi)創(chuàng)建出對(duì)象, 然后傳遞給servlet程序。此種情況下,由于開(kāi)發(fā)人員根本不知道服務(wù)器廠商編寫(xiě)的request、response接口的實(shí)現(xiàn)類(lèi)是哪個(gè)?在程序中只能拿到服務(wù)器廠商提供的對(duì)象,因此就只能采用Decorator設(shè)計(jì)模式對(duì)這些對(duì)象進(jìn)行增強(qiáng)。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip: Decorator設(shè)計(jì)模式

18、Decorator設(shè)計(jì)模式的實(shí)現(xiàn) 1.首先看需要被增強(qiáng)對(duì)象繼承了什么接口或父類(lèi),編寫(xiě)一個(gè)類(lèi)也去繼承這些接口或父類(lèi)。2. 在類(lèi)中定義一個(gè)變量,變量類(lèi)型即需增強(qiáng)對(duì)象的類(lèi)型。3. 在類(lèi)中定義一個(gè)構(gòu)造函數(shù),接收需增強(qiáng)的對(duì)象。4. 覆蓋需增強(qiáng)的方法,編寫(xiě)增強(qiáng)的代碼。 舉例:使用Decorator設(shè)計(jì)模式為BufferedReader類(lèi)的readLine方法添加行號(hào)的功能。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:request對(duì)象的增強(qiáng) Servlet API 中提供了一個(gè)request對(duì)象的Decorator設(shè)計(jì)模式的默認(rèn)實(shí)現(xiàn)類(lèi)HttpServletRequestW

19、rapper ,(HttpServletRequestWrapper 類(lèi)實(shí)現(xiàn)了request 接口中的所有方法,但這些方法的內(nèi)部實(shí)現(xiàn)都是僅僅調(diào)用了一下所包裝的的 request 對(duì)象的對(duì)應(yīng)方法)以避免用戶(hù)在對(duì)request對(duì)象進(jìn)行增強(qiáng)時(shí)需要實(shí)現(xiàn)request接口中的所有方法。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:request對(duì)象的增強(qiáng)案例 使用Decorator模式包裝request對(duì)象,完全解決get、post請(qǐng)求方式下的亂碼問(wèn)題。 使用Decorator模式包裝request對(duì)象,實(shí)現(xiàn)html標(biāo)簽轉(zhuǎn)義功能(Tomcat服務(wù)器中提供了轉(zhuǎn)義html標(biāo)簽

20、的工具類(lèi))。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip: response對(duì)象的增強(qiáng) ServletAPI 中提供了response對(duì)象的Decorator設(shè)計(jì)模式的默認(rèn)實(shí)現(xiàn)類(lèi)HttpServletResponseWrapper ,(HttpServletResponseWrapper類(lèi)實(shí)現(xiàn)了response接口中的所有方法,但這些方法的內(nèi)部實(shí)現(xiàn)都是僅僅調(diào)用了一下所包裝的的 response對(duì)象的對(duì)應(yīng)方法)以避免用戶(hù)在對(duì)response對(duì)象進(jìn)行增強(qiáng)時(shí)需要實(shí)現(xiàn)response接口中的所有方法。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!

21、Tip:response增強(qiáng)案例壓縮響應(yīng) 應(yīng)用HttpServletResponseWrapper對(duì)象,壓縮響應(yīng)正文內(nèi)容。思路: 通過(guò)filter向目標(biāo)頁(yè)面?zhèn)鬟f一個(gè)自定義的response對(duì)象。 在自定義的response對(duì)象中,重寫(xiě)getOutputStream方法和getWriter方法,使目標(biāo)資源調(diào)用此方法輸出頁(yè)面內(nèi)容時(shí),獲得的是我們自定義的ServletOutputStream對(duì)象。 在我們自定義的ServletOuputStream對(duì)象中,重寫(xiě)write方法,使寫(xiě)出的數(shù)據(jù)寫(xiě)出到一個(gè)buffer中。當(dāng)頁(yè)面完成輸出后,在filter中就可得到頁(yè)面寫(xiě)出的數(shù)據(jù),從而我們可以調(diào)用GzipOup

22、utStream對(duì)數(shù)據(jù)進(jìn)行壓縮后再寫(xiě)出給瀏覽器,以此完成響應(yīng)正文件壓縮功能。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:實(shí)用案例緩存數(shù)據(jù)到內(nèi)存 對(duì)于頁(yè)面中很少更新的數(shù)據(jù),例如商品分類(lèi),為避免每次都要從數(shù)據(jù)庫(kù)查詢(xún)分類(lèi)數(shù)據(jù),因此可把分類(lèi)數(shù)據(jù)緩存在內(nèi)存或文件中,以此來(lái)減輕數(shù)據(jù)庫(kù)壓力,提高系統(tǒng)響應(yīng)速度。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:動(dòng)態(tài)在java里,每個(gè)對(duì)象都有一個(gè)類(lèi)與之對(duì)應(yīng)?,F(xiàn)在要生成某一個(gè)對(duì)象的對(duì)象,這個(gè)對(duì)象也要通過(guò)一個(gè)類(lèi)來(lái)生成,所以首先要編寫(xiě)用于生成對(duì)象的類(lèi)。如何編寫(xiě)生成對(duì)象的類(lèi),兩個(gè)要素:誰(shuí)如何生成誰(shuí)?對(duì)象設(shè)計(jì)一個(gè)類(lèi)變量,以及一個(gè)構(gòu)造函數(shù),記住類(lèi)哪個(gè)對(duì)象。如何生成對(duì)象? 設(shè)計(jì)一個(gè)方法生成對(duì)象(在方法內(nèi)編寫(xiě)代碼生成對(duì)象是此處編程的難點(diǎn))北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家!Tip:動(dòng)態(tài) Java提供了一個(gè)Proxy類(lèi),調(diào)用它的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論