《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > Java異常處理技術(shù)及EJB中的應(yīng)用

Java異常處理技術(shù)及EJB中的應(yīng)用

2009-02-25
作者:郭廣軍,羊四清,戴經(jīng)國(guó),賀文華

1 引言
傳統(tǒng)的基于函數(shù)返回錯(cuò)誤代碼的錯(cuò)誤處理方法存在明顯的不足,如程序邏輯復(fù)雜,結(jié)構(gòu)不清;可靠性差,維護(hù)不便;返回信息有限,不直觀需譯碼;返回代碼標(biāo)準(zhǔn)化困難,代碼復(fù)用率低;在面向?qū)ο蟮膽?yīng)用系統(tǒng)中,有些如構(gòu)造方法等沒有返回值而無法報(bào)告程序錯(cuò)誤。因此,在Java中新的錯(cuò)誤檢測(cè)和報(bào)告方法—異常處理機(jī)制應(yīng)運(yùn)而生。
異常是指中斷程序正常執(zhí)行流程的錯(cuò)誤事件,如程序打開不存在的文件、裝載不存在的類、網(wǎng)絡(luò)連接中斷、被零除、訪問數(shù)組越界、系統(tǒng)資源耗盡等。在Java中,異常[1](Exception,例外)是特殊的運(yùn)行錯(cuò)誤對(duì)象,是異常類的一個(gè)對(duì)象,而每個(gè)異常類代表一種運(yùn)行錯(cuò)誤,在異常類中封裝了該運(yùn)行錯(cuò)誤的信息和處理錯(cuò)誤的方法等內(nèi)容。Java異常處理機(jī)制的基本思想是由發(fā)現(xiàn)而不能處理錯(cuò)誤的方法引發(fā)一個(gè)異常對(duì)象,然后由該方法的直接或間接調(diào)用者捕獲并處理這個(gè)錯(cuò)誤。其優(yōu)越性有:在catch中傳播與捕獲錯(cuò)誤信息,實(shí)現(xiàn)了錯(cuò)誤代碼與業(yè)務(wù)邏輯的分離,結(jié)構(gòu)清晰;可對(duì)錯(cuò)誤類型分組并標(biāo)準(zhǔn)化;方便了對(duì)錯(cuò)誤的定位與維護(hù);能有效防止由于異常而導(dǎo)致程序運(yùn)行崩潰,可靠性高;強(qiáng)制程序員考慮程序的容錯(cuò)性、健壯性和安全性。

2? Java異常處理機(jī)制
2.1? 異常類
2.1.1? 系統(tǒng)定義的異常類
異常類用于處理異常,分為系統(tǒng)定義的異常類和用戶自定義的異常類[1]。在java.lang包中提供的Throwable類是異常類層次結(jié)構(gòu)的頂層類,Error類和Exception類是從Throwable類直接派生的兩個(gè)知名子類
Exception類:它代表了Java語言中異常的基本屬性,除Java預(yù)定義的由Exception類派生的諸多異常類外,還支持用戶擴(kuò)展Exception類來實(shí)現(xiàn)自定義異常類。其構(gòu)造函數(shù)主要有public Exception()和public Exception(String s)等;它從Throwable類繼承了若干方法,常用的有:public String toString()方法,用來返回異常類信息;public void printStackTrace()方法,默認(rèn)在當(dāng)前標(biāo)準(zhǔn)輸出設(shè)備上輸出當(dāng)前異常對(duì)象的堆棧使用軌跡。Exception類定義的是非致命性錯(cuò)誤,允許用戶編寫代碼來處理這類錯(cuò)誤,并繼續(xù)程序的執(zhí)行。通常觸發(fā)異常(Exception)的原因有打開的文件不存在;網(wǎng)絡(luò)連接中斷;操作數(shù)超過允許范圍;想要加載的類文件不存在;試圖通過空的引用型變量訪問對(duì)象;數(shù)組下標(biāo)越界等。
Error類:它定義的錯(cuò)誤是致命性錯(cuò)誤,如虛擬機(jī)錯(cuò)誤、裝載錯(cuò)誤、動(dòng)態(tài)連接錯(cuò)誤,一般會(huì)導(dǎo)致程序停止執(zhí)行,通常是由于Java系統(tǒng)或執(zhí)行環(huán)境發(fā)生錯(cuò)誤(Error)而導(dǎo)致的。由于這類異常主要與硬件、運(yùn)行時(shí)系統(tǒng)有關(guān),而不是由用戶程序本身拋出的,因此用戶程序不對(duì)這類異常進(jìn)行處理。
需指出,除java.lang包中定義的異常處理之外,其他的Java包中也包括異常。實(shí)際上幾乎每個(gè)Java包都定義了相應(yīng)的異常類。此外,運(yùn)行時(shí)異常RuntimeException類及其派生子類是Java程序員不用處理的異常。Java創(chuàng)建者認(rèn)為運(yùn)行時(shí)異常不應(yīng)由程序來處理,而且程序也很難真正的對(duì)付運(yùn)行時(shí)異常。
2.1.2? 用戶自定義異常類
用戶自定義異常類是指擴(kuò)展Exception類或其他某個(gè)已經(jīng)存在的系統(tǒng)異常類或其他用戶異常類而形成新的異常類。可以給新的異常類定義新的屬性和方法,或重載父類的屬性和方法,并使這些屬性和方法能夠體現(xiàn)該類所對(duì)應(yīng)的錯(cuò)誤信息。要特別注意的是:第一? 一個(gè)方法被覆蓋時(shí),覆蓋的方法必須扔出與被覆蓋方法相同的異常或其異常類的子類;第二? 若父類拋出多個(gè)異常,則覆蓋方法只能拋出父類所拋出的異常的一個(gè)子集,或者說不能拋出新的異常。
2.2? 基本機(jī)制與語法結(jié)構(gòu)
2.2.1? 基本機(jī)制
Java異常處理機(jī)制采用中斷模式[2],即引發(fā)并拋出異常后,中止正在執(zhí)行的程序塊,控制流轉(zhuǎn)至異常處理器,待完成異常處理后,再返回調(diào)用點(diǎn)繼續(xù)執(zhí)行。異常處理的基本算法是:
Step1:拋出異常,即創(chuàng)建一個(gè)異常對(duì)象并將它交給運(yùn)行時(shí)系統(tǒng)的過程;
Step2:捕獲異常,即找到異常處理程序的過程:運(yùn)行時(shí)系統(tǒng)從發(fā)生錯(cuò)誤的方法開始回溯,在方法調(diào)用堆棧里向后搜索,直到找到能處理當(dāng)前發(fā)生的異常的處理程序的方法;
Step3:處理異常,即通過方法調(diào)用來實(shí)現(xiàn)對(duì)異常的處理;
Step4:終止異常處理。若運(yùn)行時(shí)系統(tǒng)在方法調(diào)用棧中遍歷了所有的方法而未找到合適的異常處理程序,則顯示缺省錯(cuò)誤并終止執(zhí)行運(yùn)行時(shí)系統(tǒng)的異常處理。
2.2.2? 語法結(jié)構(gòu)
Java異常處理機(jī)制通過throws、throw、try、catch和finally 5個(gè)關(guān)鍵詞來實(shí)現(xiàn),分為三個(gè)基本部分[3]。
·throws:此關(guān)鍵字統(tǒng)一定制并明確標(biāo)明了一個(gè)方法可能拋出的各種異常,這些異常是該方法定義的一部分。其實(shí)質(zhì)是允許將異常處理遞歸交給調(diào)用它的上一級(jí)方法去處理,此時(shí)Java編譯器會(huì)強(qiáng)制此方法的調(diào)用者必須將其放在調(diào)用方法的try、catch塊中以拋出并捕獲處理這些異常。
·throw:此語句用來拋出緊跟其后的一個(gè)異常對(duì)象給此方法的調(diào)用者,此異常對(duì)象可用new創(chuàng)建,或者是一個(gè)Throwable的實(shí)例句柄通過參數(shù)傳到catch中。因?yàn)橛脩糇远x的異常不能由系統(tǒng)自動(dòng)拋出,所以必須借助于throw語句來拋出各種錯(cuò)誤情況所對(duì)應(yīng)的異常,且要求在程序中的合適位置定義好用戶自定義的異常類。
·try-catch-finally:此語句是Java錯(cuò)誤處理的基本結(jié)構(gòu),主要用來捕獲和處理一個(gè)或多個(gè)異常。通常由try、catch、finally三個(gè)塊組成。ⅰ)try塊:將所有可能拋出異常的代碼部分放入try塊中;ⅱ)catch塊:用緊跟在try塊后面一個(gè)或多個(gè)catch子句來捕獲異常,其的目標(biāo)是處理異常,把變量設(shè)到合理的狀態(tài),并象沒有出錯(cuò)一樣繼續(xù)運(yùn)行。若一個(gè)子程序不處理這個(gè)異常,則可返回到上一級(jí)處理,如此不斷的遞歸向上直到最外一級(jí)。ⅲ)finally塊:finally是Java異常處理機(jī)制的精髓,使用finally可以維護(hù)對(duì)象的內(nèi)部狀態(tài)、清理非內(nèi)存資源、將系統(tǒng)恢復(fù)到應(yīng)該處于的狀態(tài)。若沒有finally,要實(shí)現(xiàn)其功能的代碼是很費(fèi)解的。finally塊是可選塊,若定義了finally塊,則不論try塊中有無異常產(chǎn)生,finally塊都會(huì)被執(zhí)行;甚至若在try或catch塊中執(zhí)行了return、break語句,finally塊也會(huì)被執(zhí)行,但要特別注意此時(shí)finally塊后面的語句并不會(huì)被執(zhí)行。只有在try或catch中執(zhí)行了System.exit(0)操作,才不會(huì)執(zhí)行finally塊。另要特別指出的是:捕獲異常時(shí),catch語句是按其位置由前至后依次對(duì)被拋出的異常對(duì)象進(jìn)行匹配捕獲,若有多個(gè)catch語句,則異常類要按從子類到父類的順序放置;在應(yīng)用技巧中,還可通過在try塊中由throw拋出“異常”,然后在catch塊中捕獲之,實(shí)現(xiàn)程序中業(yè)務(wù)邏輯控制流程的跳轉(zhuǎn)。
2.3? 異常處理的基本原則
對(duì)于非運(yùn)行時(shí)異常必須捕獲或聲明,而對(duì)運(yùn)行時(shí)異常則不必,可以交給Java運(yùn)行時(shí)系統(tǒng)來處理;對(duì)于自定義的異常類,通常把它作為Exception類的子類,且類名常以Exception結(jié)尾,不要把自定義的異常類作為RuntimeException類或Error的類的子類;在捕獲或聲明異常時(shí),要選取合適類型的異常類,注意異常類的層次,根據(jù)不同的情況使用一般或特殊的異常類;根據(jù)具體的情況選擇在何處處理異常,或者在方法內(nèi)捕獲并處理,或者用throws子句把它交給調(diào)用棧中上層的方法去處理;在catch語句中盡可能指定具體的異常類型,必要時(shí)使用多個(gè)catch;使用finally語句為異常處理提供統(tǒng)一的出口;若無法處理某個(gè)異常,則不捕獲它;若捕獲了一個(gè)異常,則要對(duì)它進(jìn)行適當(dāng)?shù)奶幚恚槐M量在靠近異常被拋出的地方捕獲異常;除非要向上層遞歸拋出異常,否則要在捕獲異常的地方將其記錄到日志中。

3? EJB中的異常處理
3.1? EJB異常處理

EJB(Enterprise JavaBean)是J2EE企業(yè)級(jí)應(yīng)用開發(fā)的核心組件,EJB的分布式和事務(wù)屬性使得其異常處理成為一個(gè)更重要的問題[4]。EJB中異常可分為三類[5]:ⅰ)JVM異常:由JVM拋出,是一種致命錯(cuò)誤。ⅱ)系統(tǒng)異常:一般由JVM以RuntimeException的子類拋出,是一種非受查異常。ⅲ)應(yīng)用程序異常:它是一種定制異常,由應(yīng)用程序或第三方類庫(kù)以Exception類或其子類拋出,是一種受查異常,通常由EJB方法的調(diào)用者來處理之。EJB容器攔截了EJB組件上的每一個(gè)方法調(diào)用,因此方法調(diào)用中發(fā)生的每一個(gè)異常也被EJB容器所攔截。EJB規(guī)范只處理應(yīng)用程序異常和系統(tǒng)異常這兩種類型的異常。
應(yīng)用程序異常:是指在遠(yuǎn)程接口的方法說明中所聲明的異常,它不是遠(yuǎn)程異常RemoteException,也不應(yīng)繼承RuntimeException或其子類。但是,在遠(yuǎn)程接口方法的throws子句中聲明的非受查異常并不會(huì)被當(dāng)作應(yīng)用程序異常。應(yīng)用程序異常是業(yè)務(wù)工作流中的例外,當(dāng)這種類型的異常被拋出時(shí),客戶機(jī)可得到一個(gè)恢復(fù)選項(xiàng)。當(dāng)發(fā)生應(yīng)用程序異常時(shí),默認(rèn)情況下EJB容器不會(huì)自動(dòng)回滾事務(wù),只有被顯式說明并通過調(diào)用關(guān)聯(lián)的EJBContext對(duì)象的setRollbackOnly()方法才能回滾事務(wù)。實(shí)際上,對(duì)于應(yīng)用程序異常EJB容器通常以它原本的狀態(tài)傳送給客戶機(jī)而不會(huì)以任何方式包裝或修改它。
系統(tǒng)異常:通常被定義為非受查異常,EJB方法不能從這種異常中恢復(fù)。當(dāng)EJB容器攔截到非受查異常時(shí),會(huì)自動(dòng)回滾事務(wù)并執(zhí)行必要的清理工作,然后把該非受查異常包裝到RemoteException類或其子類中并拋給客戶機(jī)。對(duì)于受查異常,若要使用EJB容器的內(nèi)務(wù)處理,則必須將受查異常作為非受查異常拋出。因此,每當(dāng)觸發(fā)受查系統(tǒng)異常時(shí),應(yīng)該對(duì)其原始的異常以javax.ejb.EJBException類或其子類方式包裝后拋出。由于EJBException本身是非受查異常,因此不需要在方法的throws子句中聲明它。EJB容器會(huì)自動(dòng)捕獲EJBException或其子類,并把它包裝到RemoteException中,然后拋給客戶機(jī)。
需指出,雖然EJB規(guī)范規(guī)定系統(tǒng)異常由應(yīng)用程序服務(wù)器記錄,但記錄格式會(huì)因應(yīng)用程序服務(wù)器的不同而異。為確保異常記錄格式的統(tǒng)一,方便對(duì)其進(jìn)行統(tǒng)計(jì)分析,在代碼中記錄異常是一種好的策略。此外,在EJB1.0規(guī)范中要求把受查系統(tǒng)異常以RemoteException拋出,而EJB 1.1及以上規(guī)范則規(guī)定EJB實(shí)現(xiàn)類絕不應(yīng)拋出RemoteException。
3.2? 關(guān)鍵技術(shù)
3.2.1? 日志機(jī)制

盡管用System.out.println()方法跟蹤異常方便,但開銷大,對(duì)I/O處理的同步控制將大大降低系統(tǒng)吞吐量。缺省時(shí)堆棧跟蹤被輸出至控制臺(tái),但在實(shí)際的應(yīng)用系統(tǒng)中,通過瀏覽控制臺(tái)來查看異常跟蹤不太現(xiàn)實(shí)。因此,在大型應(yīng)用系統(tǒng)的開發(fā)、測(cè)試和運(yùn)行等生命周期中,采用日志機(jī)制和恰當(dāng)?shù)木幋a策略,精確地記錄各種類型的異常,可以降低系統(tǒng)開銷,提高軟件性能和質(zhì)量。知名的日志實(shí)用程序有兩種:Log4J[6]是Apache的Jakarta的一個(gè)開放源代碼的項(xiàng)目,J2SE 1.4捆綁提供了日志處理包(java.util.logging)[7],它們的使用方法請(qǐng)參考相關(guān)文獻(xiàn)。
3.2.2? Decorators設(shè)計(jì)模式
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中若用一個(gè)對(duì)象(the Decorators)包裝另外一個(gè)對(duì)象,被稱為Decorators設(shè)計(jì)模式。基于Decorators設(shè)計(jì)模式,通過包裝原始的異常消息并在EJB組件中將其重新拋出,以方便對(duì)該異常的查詢和訪問。其次,由于Log4J只能記錄String消息,所以要利用Decorators設(shè)計(jì)模式定義一個(gè)專門類負(fù)責(zé)把堆棧跟蹤轉(zhuǎn)換成String,以獲取該堆棧跟蹤的String表示。
3.3? EJB異常處理策略
3.3.1? 常見EJB異常處理的不足
·拋出帶有出錯(cuò)消息的異常:此種方法存在異常內(nèi)容可能被“吞掉”的現(xiàn)象。
·記錄到控制臺(tái)并拋出一個(gè)異常:僅當(dāng)控制臺(tái)可用時(shí)調(diào)用者才能向后跟蹤。
·包裝原始的異常以保護(hù)其內(nèi)容:可能導(dǎo)致重復(fù)記錄,產(chǎn)品日志或控制臺(tái)不能被交叉引用。
3.3.2? EJB異常處理的優(yōu)化策略
·優(yōu)化應(yīng)用程序異常處理:由EJB開發(fā)者顯式拋出,通常包裝了含義清楚消息,不必將其記錄到EJB層或客戶機(jī)層,而以一種直觀有意義的方式提供給最終用戶,并帶上其解決方案的途徑。
實(shí)體Bean一般是啞類,通常應(yīng)用程序異常主要來源于會(huì)話Bean。從實(shí)體Bean拋出的應(yīng)用程序異常類型通常是CreateException、FinderException、RemoveException及它們的子類。當(dāng)引用其它EJB遠(yuǎn)程接口時(shí),實(shí)體Bean會(huì)遇到RemoteException,在查找其它EJB組件時(shí)會(huì)遇到NamingException,若使用BMP實(shí)體Bean,則會(huì)碰到SQLException。與這些類似的受查系統(tǒng)異常應(yīng)該被捕獲,并被包裝起來,作為EJBException或它的一個(gè)子類拋出。在優(yōu)化的EJB設(shè)計(jì)中,客戶機(jī)一般不直接調(diào)用實(shí)體Bean上的方法,而通過會(huì)話Bean間接訪問實(shí)體Bean。若會(huì)話Bean調(diào)用相同的實(shí)體Bean方法,則要避免對(duì)異常的重復(fù)記錄。會(huì)話Bean和實(shí)體Bean處理系統(tǒng)異常的方式基本相似。可采用訪問標(biāo)識(shí)技術(shù)避免對(duì)同一異常的重復(fù)記錄。
·優(yōu)化系統(tǒng)異常處理:比應(yīng)用程序異常處理更為復(fù)雜,它的發(fā)生不受EJB開發(fā)者的控制且異常信息不直觀,需要對(duì)其原始異常進(jìn)行包裝,以清楚地表達(dá)系統(tǒng)異常的含義。
·優(yōu)化Web層設(shè)計(jì):通常把異常記錄到Web層本身,則易于實(shí)現(xiàn)且代碼簡(jiǎn)潔。這要求Web層必須是EJB層的唯一客戶機(jī),且Web層必須建立在業(yè)務(wù)委派(Business Delegate)、FrontController或攔截過濾器(Intercepting Filter)等模式和Struts或其它類似于MVC的框架基礎(chǔ)上。
實(shí)際應(yīng)用中,即使采用良好的異常處理策略,但由于編譯器和運(yùn)行時(shí)優(yōu)化,會(huì)限制使用堆棧跟蹤程序跟蹤異常的能力。通常把大的方法調(diào)用分割為更小的、更易于管理的塊,并提高代碼復(fù)用率;并將異常類型按需要?jiǎng)澐殖杉?xì)粒度的、具體的異常,在捕獲異常時(shí)則捕獲已規(guī)定好的具體類型的異常,避免捕獲所有類型的異常。

3.4? EJB異常處理實(shí)例
例1:ejbCreate()方法中的FinderException異常處理。其代碼如下:
public Object ejbCreate(RatepayingOrderValue value) throws CreateException {
try { if (value.getItemName() == null) {
throw new CreateException("不能創(chuàng)建報(bào)稅單!"); }
String taxpId = value.getTaxpayerId();
Taxpayer taxp = taxpayerHome.fingByPrimaryKey(taxpId);
this.taxpayer = taxp;
} catch (FinderException fe) {
//作為應(yīng)用程序異常,還是系統(tǒng)異常?
} catch (RemoteException re) {
//這是系統(tǒng)異常,并記錄在日志中。
throw ExceptionLogUtil.createLoggableEJBException(re);
}
return null;
}
例1中報(bào)稅單RatepayingOrder實(shí)體Bean的ejbCreate()方法試圖獲取納稅人Taxpayer實(shí)體Bean的一個(gè)遠(yuǎn)程引用,可能導(dǎo)致FinderException。此處,盡管可把FinderException當(dāng)作應(yīng)用程序異常或作系統(tǒng)異常,但是若把它當(dāng)系統(tǒng)異常則更好,因?yàn)檫@可以提高EJB組件對(duì)客戶機(jī)的透明性。同理,對(duì)于會(huì)話Bean或者實(shí)體Bean試圖創(chuàng)建另一個(gè)會(huì)話Bean,可能導(dǎo)致的CreateException,或者會(huì)話Bean在它的某個(gè)容器回調(diào)方法中獲得了一個(gè)FinderException等,都最好將其作為系統(tǒng)異常。此外,若考慮會(huì)話Bean在處理下報(bào)稅單時(shí),用戶須具有一個(gè)簡(jiǎn)歷,若沒有,則會(huì)話Bean將觸發(fā)ObjectNotFoundException異常,這時(shí)最好將其作為應(yīng)用程序異常拋出,以告知用戶其簡(jiǎn)歷丟失。
例2:logon()方法的InvalidUserDataException應(yīng)用程序異常處理。其代碼如下:
public void logon(String user, String password) throws InvalidUserDataException
{?if (user == null || password ==null)
??throw new InvalidUserDataException();
?serviceImpl.logon(user, password);
}
以下是應(yīng)用程序異常類InvalidUserDataException的定義。
public class InvalidUserDataException extends Exception
{? public InvalidUserDataException()
?{super(“用戶名或密碼不能為空!”); }
}

4? 結(jié)論
在企業(yè)級(jí)的大型軟件開發(fā)中,嚴(yán)謹(jǐn)強(qiáng)大的Java異常處理機(jī)制為軟件質(zhì)量控制提供了有力的技術(shù)支持,提高了軟件的可讀性、可維護(hù)性、容錯(cuò)性和開發(fā)效率。充分有效的利用Java異常處理機(jī)制、采用合適的異常處理策略,是提高EJB中異常處理的性能的有效途徑。

參考文獻(xiàn):
[1]? Bruce Eckel. Thinking in Java[M].Beijing: China Machine Press,2000.240-281.
[2]? 趙化冰,唐英,唐文彬,蘆東昕. Java異常處理[J]. 計(jì)算機(jī)應(yīng)用, 2003,12:46-48.
[3]? 張聰品,趙琛,糜宏斌. 異常處理機(jī)制研究[J].計(jì)算機(jī)應(yīng)用研究,2005,4:86-89.
[4]? [美]Chuck Cavaness Brian Keeton著,智慧東方工作室 譯. EJB 2.0企業(yè)級(jí)應(yīng)用程序開發(fā)[M].北京:機(jī)械工業(yè)出版社,2002,3.294-310.
[5]? EJB異常處理的最佳做法. http://www.evget.com/view/article/viewArticle.asp?article=548
[6]? Log4J框架. http://jakarta.apache.org/log4j/docs/index.html
[7]? Java Logging API. http://java.sun.com/j2se/1.4/docs/api/java/util/logging/
package-summary.html

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 日本一本高清视频 | 8mav精品成人 | 日韩精品无码中文字幕一区二区 | 四虎黄色片| a级国产视频 | 成人免费乱码大片a毛片软件 | 午夜影视大全 | 欧美又大又硬又粗bbbbb | 在线免费观看www | 中午日产幕无线码1区 | 久久人体| 天天噜噜噜噜噜噜 | 六姐妹免费在线观看 | 捆绑白丝粉色jk震动捧喷白浆 | 丰满少妇一级 | 欧美久草在线 | 婷婷激情图片 | 国产激情综合在线观看 | 免费男人下部进女人下部视频 | www.国产99| 国产99在线视频 | 国产精品一区二区三区四区五区 | 国产精品美女久久久 | 亚洲成色| 国产亚洲人成在线播放 | 中文字幕第8页在线资源 | 日韩在线中文字幕 | 国产精品入口免费视 | 日韩av一区二区三区在线 | 97国产在线视频 | 免费成人国产 | 亚洲精品久久午夜无码一区二区 | 久久久日韩精品一区二区 | 午夜国产视频 | 老妇肥熟凸凹丰满刺激小说 | 深夜av在线 | 国产成人一区二区三区视频免费 | 最新av中文字幕 | 精产国品一区二区三区四区 | 把插八插露脸对白内射 | 日韩成人av网址 | 国精产品一区一区三区有限在线 | 少妇又紧又色又爽又刺激视频 | 中文字幕一区二区不卡 | 国产午夜在线观看 | 9热在线| 免费麻豆国产一区二区三区四区 | 粉嫩小泬无遮挡久久久久久 | 成人免费a级片 | 乱码一区二区三区 | 国产农村妇女毛片精品久久麻豆 | 国产精品99久久久久久人红楼 | 亚洲欧美大片 | 美女无遮挡免费视频网站 | 国产成人精品手机在线观看 | 青青草国产精品一区二区 | 亚洲自拍网址 | 国产丝袜美女精品av | 午夜黄色福利 | 高潮白浆女日韩av免费看 | 亚洲一区二区三区av在线观看 | 日韩欧美一区二区在线 | 久久精品久久99 | 国产欧美精品在线观看 | 男女裸体做爰猛烈全过程9制片 | 欧美日韩三级在线观看 | 老司机午夜精品99久久免费 | 国产一二三区av | 国产一级精品视频 | 欧美污视频在线观看 | 周冬雨三级视频 | 不卡中文一二三区 | 日韩少妇高潮抽搐 | 亚洲日韩欧美综合 | 免费看成年人网站 | 欧美高清久久 | 少妇做爰免费视频播放 | 国产尤物av一区二区三区 | 男女啪祼交视频 | 久久久久亚洲视频 | 亚洲欧美日韩愉拍自拍 | 亚洲午夜久久久影院 | 国产精品图片 | 日本精品视频一区二区 | 国产三级av在线播放 | 国产精品久久久久久久妇女 | 浴室人妻的情欲hd三级国产 | 免费无码又黄又爽又刺激 | 91久久精品国产91久久性色tv | 青草伊人久久综在合线亚洲观看 | 国产 日韩 一区 | 亚洲午夜精品久久久久久浪潮 | 欧美做受又硬又粗又大视频 | 黄污视频在线播放 | 男人猛躁进女人免费视频夜月 | 五月激情av| 不卡久久 | 午夜精品久久久久久久蜜桃 | 水蜜桃久久夜色精品一区怎么玩 | 免费成人高清视频 | 亚洲区精品 | 色综合五月天 | 国产破苞第一次 | 欧美日本一区二区 | 91成人xxx| 日韩成人av在线播放 | 亚洲最大国产成人综合网站 | 青青草成人网 | 波多野结衣视频免费 | 免费在线看污片 | 日本视频高清一道一区 | 亚洲午夜久久久久 | 少妇高潮毛片免费看 | 色综合综合 | 免费福利在线视频 | 青青草操 | 日日躁夜夜躁aaaabbbb | 综合久久色 | 91在线不卡 | 在线免费观看成年人视频 | 人妻一本久道久久综合久久鬼色 | 少妇又紧又深又湿又爽视频 | 天天弄天天操 | 免费看片啪啪tv | 国外激情av片 | 成人含羞草tv免费入口 | 亚洲国产成人精品久久久国产成人 | 免费看少妇作爱视频 | 亚av| 男人用嘴添女人下身免费视频 | 亚洲成人黄色av | 国产精品高潮久久久久 | 欧美一级激情 | 日本精品久久久久中文字幕 | 看一级大片| 成人午夜视频在线播放 | 色欲综合视频天天天 | 国产69精品久久久久99尤物 | 亚洲一级二级 | 夜添久久精品亚洲国产精品 | 一区二区国产精品视频 | 成人视屏在线观看 | 黄色18网站| 国产少妇露脸精品 | 欧美亚洲国产一区二区三区 | 欧美日韩一区二区三区自拍 | 国产免费丝袜调教视频 | 中文字幕在线观看二区 | 精品人妻av区波多野结衣 | 亚洲国产精品一区二区久久hs | 欧美不卡视频 | 中文字幕123| 国产精品毛片无遮挡 | 中文一级片 | 国产做受入口竹菊 | 狠狠噜天天噜日日噜 | 国产啊~cao死你个小sao货 | 国产在线精品一区二区不卡麻豆 | 久久久爽爽爽美女图片 | 在线观看国产午夜福利片 | 这里有精品 | 全国最大成人网 | 免费三级网站 | 亚洲第一成人网站 | 成人无码一区二区三区 | 免费黄色在线网址 | 日本人妻中文字幕乱码系列 | 一本久久精品一区二区 | 成人麻豆日韩在无码视频 | 欧美黄色a级 | 999久久久久 | 久久久久久三区 | 香蕉久久人人爽人人爽人人片av | 在线免费观看福利 | 亚洲精品久久久久久久蜜桃臀 | 成人啪啪18免费网站看 | 亚洲色图av在线 | 欧美爱爱网站 | 在线视频91 | 午夜a爱 | 亚洲日本国产精华液 | 日本乱大交xxxxx | 成人在线激情 | 福利午夜视频 | 视频日韩 | 午夜色片 | 97自拍网| 国产乡下妇女做爰 | 大黄专集在线观看 | 草在线| 中文字幕在线视频第一页 | 国产99在线 | 欧美 | 蜜桃视频韩日免费播放 | 天天操天天操天天射 | 国产免费踩踏调教视频 | 亚洲国产精品激情综合图片 | 久久妇女| 91丨九色丨蝌蚪最新地址 | 亚洲人成网亚洲欧洲无码久久 | 人妻系列无码专区久久五月天 | 天堂中文最新版在线官网在线 | 国产精品久久久久久久免费看 | 一级淫片免费看 | 在线a亚洲视频播放在线观看 | 日日碰狠狠添天天爽 | 亚洲一区在线观看免费 | 亚洲成人99| 人妻在客厅被c的呻吟 | 天天天欲色欲色www免费 | 牛牛精品一区二区 | 女人裸体夜夜爽快 | 国产原创视频在线观看 | 欧美色欧美亚洲另类二区 | 国产成人高清精品免费 | 国产精品一区在线免费观看 | 欧美日韩在线免费播放 | 欧美网站一区 | 亚洲精品精华液一区 | 亚洲永久精品一区 | 日韩欧美精品 | 三级亚洲欧美 | 成人精品黄段子 | 91亚洲乱码卡一卡二卡新区豆瓣 | 高清不卡一区二区三区 | 激情六月天 | 久久精品视频91 | 91精品国产一区二区三区蜜臀 | 综合久久久| 999久久久久久久久6666 | 波多野结衣先锋影音 | xvideos成人免费中文版 | 视频在线国产 | 久久久久久九九99精品 | 成人h在线观看 | 波多野结衣影院 | 性色av极品无码专区亚洲 | 亚洲精美视频 | 国产亚洲成av片在线观看 | 特黄一毛二片一毛片 | 全部毛片永久免费看 | 国产精品对白久久久久粗 | 精品人人妻人人澡人人爽牛牛 | 色偷偷偷在线视频播放 | 午夜免费在线观看 | 狠狠五月激情六月丁香 | 一性一交一口添一摸视频 | 99久久婷婷国产综合亚洲 | 麻豆文化传媒精品一区观看 | 性高湖久久久久久久久 | 性欧美麻豆 | 欧美性猛交xxxx富婆 | jiz亚洲 | 无尽夜久久久久久久久久 | 亚洲熟女综合一区二区三区 | 琪琪色18 | 可以免费观看的毛片 | 看全色黄大色黄女片18 | 欧美人与牲动交xxxx | 国产伦精品一区二区三区免费迷 | 伊人啪啪| 国产精品亚洲lv粉色 | 2022av在线| 精品国产一区二区三区不卡 | a级黄色毛片三 | 91精品国产91久久久久久久久 | 操操操操操操操操操 | 久久国产精品成人影院 | 天堂av在线免费 | 国产又大又粗又猛又爽的视频 | 色婷婷综合视频 | 91视频高清 | 欧洲熟妇色xxxxx欧美老妇伦 | 国产亚洲精品久久久ai换 | 韩国精品一区二区三区 | 手机看片99 | 亚洲第二页 | 久久一区二区三区四区五区 | 波多野结衣视频一区二区 | 国产无套精品一区二区 | 国产9 9在线 | 中文 | 人善交另类亚洲重口另类 | 日日夜夜狠狠操 | 丁香色综合 | 亚洲精品一品区二品区三品区 | 日韩人妻熟女中文字幕a美景之屋 | 护士的小嫩嫩好紧好爽 | 又黄又爽又色视频 | 亚洲美女黄色片 | 国产专区一区 | 91干| 少妇高潮惨叫正在播放对白 | 中文字幕第二区 | 久久成人av | 中国老女人内谢69xxxx | 国产成人精品久久亚洲高清不卡 | 精品国产自在精品国产 | 成人性生交大片免费看视频app | 人妻少妇av无码一区二区 | 一边吃奶一边做爰爽到爆视频 | www.99在线观看 | 国内精品视频在线 | 中文视频一区 | 一区二区日韩精品 | 四川丰满少妇毛片新婚之夜 | 99re热视频这里只精品 | 中文字幕av久久爽一区 | 女人扒开屁股桶爽30分钟 | 美女大黄网站 | 成人在线视频观看 | 午夜毛片视频 | 久久综合一区二区 | 精品无码国产av一区二区 | 婷婷伊人综合亚洲综合网 | 国产交换配乱淫视频免费 | 亚洲综合精品成人 | 色妞av永久一区二区国产av开 | 亚洲午夜视频 | 九色网址 | 欧美性猛交xxxx乱大交 | 8天堂资源在线 | 国产精品免费一区二区三区四区 | 天天综合天天做 | 男人激烈吮乳吃奶视频片 | 久久亚洲中文字幕不卡一二区 | 欧美精品videosbestsex日本 | 国偷自产av一区二区三区 | 999国产精品999久久久久久 | ww又激又色又爽又免费视频 | 一个人看的www视频在线播放 | 国产精品欧美久久久久天天影视 | 人妻熟女αⅴ一区二区三区 | 李丽珍裸体午夜理伦片 | 国产伦子伦对白视频 | 农村少妇吞精夜夜爽视频 | 亚洲性无码av中文字幕 | 人妻少妇一区二区三区 | 嫩草视频在线观看 | 欧美熟妇xxxxx欧美老妇不卡 | 修仙性瘾荡乳小说h | 成人婷婷网色偷偷亚洲男人的天堂 | 久国产视频 | 国产精品12p | 蜜桃国精产品二三三区视频 | 欧美成人欧美edvon | 捆绑凌虐一区二区三区 | 成人香蕉视频在线观看 | 大学生三级中国dvd 大学生一级片 | 免费国产一区 | 天堂va欧美ⅴa亚洲va一国产 | 中文无码一区二区不卡αv 精品少妇人妻av免费久久洗澡 | 国产精品日日做人人爱 | 99精品国产一区 | 精品一区二区三区四区外站 | 一个色综合网 | 蜜桃视频久久 | 国产aⅴ激情无码久久久无码 | 久久精品人人做人人爱爱站长工具 | 精品视频m3u8在线播放 | 极品美妇后花庭翘臀娇吟小说 | 大陆熟妇丰满多毛xxxⅹ | 三级全黄做爰在线观看 | 免费人成年激情视频在线观看 | 国产人妻精品一区二区三区 | 日本欧美国产一区二区三区 | 亚洲精品一品区二品区三品区 | 天堂中文а√在线官网 | 欧美激情国产日韩精品一区18 | 石原莉奈一区二区三区在线观看 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 综合图区亚洲欧美另类图片 | 青草精品国产福利在线视频 | 成 人 免费观看网站 | 成人国产精品久久久春色 | 大尺度激情吻胸视频 | 少妇乱淫aaa高清视频真爽 | 成熟女人毛片www免费版在线 | 色臀av | 欧美午夜精品一区二区 | 日本三级香港三级人妇99 | 国产精品99久久久久久www | 小明看国产 | 99精品视频网站 | 天堂资源站| 夜夜躁天天躁很很躁 | 免费国产黄 | 午夜在线观看视频 | 色屁屁草草影院ccyycom | 久久不见久久见免费影院视频 | 午夜国产精品成人 | 四虎成人精品永久免费av九九 | 亚洲日本中文字幕天天更新 | 久久久一本精品99久久精品66 | 综合五月婷 | 人人草人人爽 | 日韩欧美中文一区 | 国产成人美女视频 | 欧美激情一区二区 | 欧美色xxx| 久久久久久艹 | 成年人午夜视频 | 又黄又爽又色的网站 | 宅男噜噜66国产精品观看 | 黄色天堂网 | 亚洲欧美精品aaaaaa片 | 欧美二区三区91 | 猫咪免费人成网站www | 亚洲人免费 | 日产精品久久久久久久 | 欧美精品一区在线 | 中文有码无码人妻在线 | 欧美性tv| 麻豆国产人妻欲求不满 | 免费做a爰片久久毛片a片 | 黄色片在线播放 | 久久久久99精品成人片三人毛片 | 成人毛片观看 | 免费入口在线观看 | 精品人妻一区二区三区四区 | 亚洲狼人社区 | 欧美日韩亚洲色图 | 在线天堂中文字幕 | 一进一出下面喷白浆九瑶视频 | 久久导航精品一区 | 亚洲黄视频 | 国产亚洲精品久久久久秋 | 国产精品国产精品国产专区不片 | 久久久久久久久影院 | 亚洲男人的天堂在线观看 | 婷婷六月综合网 | 一边摸一边添高潮av | 一性一交一口添一摸视频 | 岛国精品资源网站 | 蜜桃视频久久 | 成年人色网站 | 丰满熟女人妻中文字幕免费 | 石原莉奈一区二区三区在线观看 | 中文字幕+乱码+中文字幕一区 | 夜夜夜夜操 | 91人人揉日日捏人人看 | 国产不卡视频在线播放 | 91国内精品久久久 | 天天操夜操 | 日韩三级毛片 | 亚洲精品国产一区二区的区别 | 99re在线视频免费观看 | xxxx色| 91日批视频| 成年性午夜免费视频网站 | 中日韩无砖码一线二线 | 国产在线观看无码免费视频 | 性欧美videos做受 | 狠狠色噜噜狠狠狠7777奇米 | 男女性杂交内射妇女bbwxz | 国产日韩欧美在线观看视频 | 在线免费小视频 | www成人国产高清内射 | 北条麻妃在线一区二区免费播放 | 国产3页 | 欧美精品少妇 | 男人女人黄 色视频免费 | 91精品国产综合婷婷香蕉 | 亚洲性影院 | 国产a级免费| 国产人妖ts重口系列网站观看 | 天天看夜夜操 | 免费的很黄很污的视频 | 夜夜噜噜噜 | 18禁美女裸身无遮挡免费网站 | 特级做a爰片毛片免费看无码 | www.17c.com小草影视 | 中文字幕国产亚洲 | 亚洲一区在线播放 | 国产做爰全过程免费视频 | 国产日韩亚洲 | 国产色99精品9i | 最近在线更新8中文字幕免费 | 91精品啪在线观看国产81旧版 | 国产伦精品一区二区三区视频金莲 | 九九黄色 | 亚洲国产精品久久久天堂不卡 | 精品视频一区二区三区四区五区 | 国产不卡视频一区二区三区 | 女裸全身无奶罩内裤内衣内裤 | 亚洲精品丝袜字幕一区 | 亚洲精品国产乱码在线看蜜月 | 国产原创av在线 | 人妻少妇精品久久久久久 | 亚洲精品一区二区三区高潮 | 国产在线视频不卡 | 成人5g影院_天天5g天天看 | 午夜性色福利视频 | 国产精品视频久久久久久 | 国产亚洲美女精品久久久2020 | av在线在线| 热99re久久精品这里都是精品 | 嫩草网站| 91亚洲精品一区 | 中文无线乱码二三四区 | 女学生的大乳中文字幕 | 男女羞羞视频网站18 | 日韩福利在线播放 | 欧洲无线码一二三四区 | 国内外成人免费视频 | 日韩综合第一页 | 一 级做人爱全视频在线看 亚洲成a∨人片在线观看不卡 | 色94色欧美sute亚洲线路二 | 欧美 国产 日本 | 精品国产久 | 农村妇女愉情三级 | 久久精品久久久久 | 日本中文字幕在线视频 | 亚洲综合视频网站 | 小荡货奶真大水多好紧视频 | 在线观看亚洲 | 欧美激情va永久在线播放 | av av片在线看| 好看的中文字幕av | 天堂网www在线资源 少妇被多人c夜夜爽爽 | 日本黄色美女视频 | 中文字幕无码毛片免费看 | 国产精品一区在线免费观看 | 午夜激情视频在线 | 国产真实乱偷精品视频 | 国产精品v日韩精品v在线观看 | 久久精品成人一区二区三区蜜臀 | 国产亚洲欧美日韩亚洲中文色 | 人人看人人艹 | 亚洲处破女av日韩精品 | www中文字幕 | a级片在线看 | 亚洲一区欧洲一区 | 亚洲精品熟女国产 | 日本少妇做爰免费视频软件 | 青青成人 | 亚洲三级高清免费 | 婷婷网色偷偷久久久99超碰 | 久久综合亚洲色一区二区三区 | 精品国产欧美日韩 | 国产伦精品一区二区三区在线观看 | 麻豆精品 | play在线海量a v视频播放 | 久久精品久久久久 | 巨胸狂喷奶水视频www网站免费 | 人妻aⅴ无码一区二区三区 日本一卡2卡3卡四卡精品网站 | 中文字幕少妇在线三级hd | 国产成人小视频 | 欧美一区二区三区在线视频观看 | 国产又粗又猛又大爽又黄 | 免费av一区 | 涩涩久久 | 中日韩在线 | 五月婷网站 | 丰满少妇作爱视频免费观看 | 风间由美一区二区av101 | 中文字幕一区二区三区有限公司 | 午夜在线观看网站 | 俺去久久 | 欧洲av在线免费观看 | 久久99精品久久久久久动态图 | 亚洲国产精品精华液999 | 色综合久久久久久久 | www久久撸撸网 | 奇米影视四色在线 | 91成人黄色 | 日韩精品中文字幕在线观看 | 狠狠操一区| 日韩一级片免费观看 | 成人性生交片免费看 | 无码东京热一区二区三区 | 人人超碰人摸人爱 | 精品少妇一区 | 国产真实乱人偷精品 | 欧美另类在线观看 | 免费网站看v片在线观看 | 性色av极品无码专区亚洲 | 久久久噜噜噜久久中文字幕色伊伊 | 一本大道久久a久久综合婷婷 | 午夜黄色av | 男女野外做受全过程 | 性生活视频网站 | a√在线视频 | 男人用嘴添女人下身免费视频 | 日韩欧美一区二区在线 | 九九色在线观看 | 日本500人裸体仓房视频 | a级黄色网址 | 特级毛片www | 精品视频免费久久久看 | 四虎4hu永久免费深夜福利 | 不用播放器av | 高清无码午夜福利视频 | 久久久久夜色精品国产老牛91 | 久色视频在线观看 | 老熟妇仑乱视频一区二区 | 国产精品一区二区不卡 | 国产精品亚洲一区二区三区 | 天堂av资源网 | 久久99成人免费 | 国产精品黄色大片 | 精品国产免费久久久久久尖叫 | 80日本xxxxxxxxx96| 男人久久久 | 精品久久久久久成人av | 日韩极品一区 | 婷婷丁香在线 | 国产免费高清 | 国产深夜福利视频在线 | 日本不卡高字幕在线2019 | 中文永久免费观看 | 少妇饥渴偷公乱第28章 | 999国内精品永久免费视频 | 天天干天天玩 | 亚洲日本国产精华液 | 国产馆在线视频 | 99久久人妻无码精品系列 |