《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > Java異常處理技術及EJB中的應用

Java異常處理技術及EJB中的應用

2007-08-20
作者:郭廣軍 羊四清 戴經國 賀

摘要:在企業級的大型軟件開發中,嚴謹強大的Java異常處理" title="異常處理">異常處理機制為軟件質量控制提供了有力的技術支持,提高了軟件的可讀性、可維護性、容錯性和開發效率。深入分析了Java異常處理的基本機制及語法結構、總結了異常處理的基本原則,進一步探索了EJB中異常處理的方法,并給出了其關鍵技術、優化策略和應用實例。?

關鍵詞:Java;EJB;異常處理。?

中國分類號:TP311.52 ??文獻標識碼:A?

Java Exception Handling Technique and Application in EJB?

GUO Guang-jun?? YANG Si-qing?? DAI Jing-guo?? HE Wen-hua?

(Department of Computer Science of Hunan University of Humanities and Science and Technology, Loudi Hunan 417000,China )?

AbstractIn the large-scale enterprise software development, the precise, strong exception handling mechanism of the Java provided powerful technique support for the software quality control, as well as, the readability, maintainability, fault-tolerance performance and development efficiency of the software are improved. In this paper, first the basic exception handling mechanism and syntax structure of the Java are thoroughly analyzed, and the basic principle of the exception handling is advanced, then the exception handling mechanism of the EJB is probed into, the key technique,optimization strategy and example of the exception handling in EJB are provided last.?

Keywords:Java; EJB; Exception Handling?

1? 引言?

傳統的基于函數返回錯誤代碼的錯誤處理方法存在明顯的不足,如程序邏輯復雜,結構不清;可靠性差,維護不便;返回信息有限,不直觀需譯碼;返回代碼標準化困難,代碼復用率低;在面向對象的應用系統中,有些如構造方法等沒有返回值而無法報告程序錯誤。因此,在Java中新的錯誤檢測和報告方法—異常處理機制應運而生。?

異常是指中斷程序正常執行流程的錯誤事件,如程序打開不存在的文件、裝載不存在的類、網絡連接中斷、被零除、訪問數組越界、系統資源耗盡等。在Java中,異常[1](Exception,例外)是特殊的運行錯誤對象,是異常類的一個對象,而每個異常類代表一種運行錯誤,在異常類中封裝了該運行錯誤的信息和處理錯誤的方法等內容。Java異常處理機制的基本思想是由發現而不能處理錯誤的方法引發一個異常對象,然后由該方法的直接或間接調用者捕獲并處理這個錯誤。其優越性有:在catch中傳播與捕獲錯誤信息,實現了錯誤代碼與業務邏輯的分離,結構清晰;可對錯誤類型分組并標準化;方便了對錯誤的定位與維護;能有效防止由于異常而導致程序運行崩潰,可靠性高;強制程序員考慮程序的容錯性、健壯性和安全性。?

2? Java異常處理機制?

2.1? 異常類?

2.1.1? 系統定義的異常類

異常類用于處理異常,分為系統定義的異常類和用戶自定義的異常類[1]。在java.lang包中提供的Throwable類是異常類層次結構的頂層類,Error類和Exception類是從Throwable類直接派生的兩個知名子類" title="子類">子類。?

Exception類:它代表了Java語言中異常的基本屬性,除Java預定義的由Exception類派生的諸多異常類外,還支持用戶擴展Exception類來實現自定義異常類。其構造函數主要有public Exception()和public Exception(String s)等;它從Throwable類繼承了若干方法,常用的有:public String toString()方法,用來返回異常類信息;public void printStackTrace()方法,默認在當前標準輸出設備上輸出當前異常對象的堆棧使用軌跡。Exception類定義的是非致命性錯誤,允許用戶編寫代碼來處理這類錯誤,并繼續程序的執行。通常觸發異常(Exception)的原因有打開的文件不存在;網絡連接中斷;操作數超過允許范圍;想要加載的類文件不存在;試圖通過空的引用型變量訪問對象;數組下標越界等。?

Error類:它定義的錯誤是致命性錯誤,如虛擬機錯誤、裝載錯誤、動態連接錯誤,一般會導致程序停止執行,通常是由于Java系統或執行環境發生錯誤(Error)而導致的。由于這類異常主要與硬件、運行時系統有關,而不是由用戶程序本身拋出的,因此用戶程序不對這類異常進行處理。?

需指出,除java.lang包中定義的異常處理之外,其他的Java包中也包括異常。實際上幾乎每個Java包都定義了相應的異常類。此外,運行時異常RuntimeException類及其派生子類是Java程序員不用處理的異常。Java創建者認為運行時異常不應由程序來處理,而且程序也很難真正的對付運行時異常。?

2.1.2? 用戶自定義異常類

用戶自定義異常類是指擴展Exception類或其他某個已經存在的系統異常類或其他用戶異常類而形成新的異常類??梢越o新的異常類定義新的屬性和方法,或重載父類的屬性和方法,并使這些屬性和方法能夠體現該類所對應的錯誤信息。要特別注意的是:第一? 一個方法被覆蓋時,覆蓋的方法必須扔出與被覆蓋方法相同的異常或其異常類的子類;第二? 若父類拋出多個異常,則覆蓋方法只能拋出父類所拋出的異常的一個子集,或者說不能拋出新的異常。?

2.2? 基本機制與語法結構?

2.2.1? 基本機制

Java異常處理機制采用中斷模式[2],即引發并拋出異常后,中止正在執行的程序塊,控制流轉至異常處理器,待完成異常處理后,再返回調用點繼續執行。異常處理的基本算法是:?

Step1:拋出異常,即創建一個異常對象并將它交給運行時系統的過程;?

Step2:捕獲異常,即找到異常處理程序的過程:運行時系統從發生錯誤的方法開始回溯,在方法調用" title="方法調用">方法調用堆棧里向后搜索,直到找到能處理當前發生的異常的處理程序的方法;?

Step3:處理異常,即通過方法調用來實現對異常的處理;?

Step4:終止異常處理。若運行時系統在方法調用棧中遍歷了所有的方法而未找到合適的異常處理程序,則顯示缺省錯誤并終止執行運行時系統的異常處理。?

2.2.2? 語法結構

Java異常處理機制通過throws、throw、try、catch和finally 5個關鍵詞來實現,分為三個基本部分[3]。?

·throws:此關鍵字統一定制并明確標明了一個方法可能拋出的各種異常,這些異常是該方法定義的一部分。其實質是允許將異常處理遞歸交給調用它的上一級方法去處理,此時Java編譯器會強制此方法的調用者必須將其放在調用方法的try、catch塊中以拋出并捕獲處理這些異常。?

·throw:此語句用來拋出緊跟其后的一個異常對象給此方法的調用者,此異常對象可用new創建,或者是一個Throwable的實例句柄通過參數傳到catch中。因為用戶自定義的異常不能由系統自動拋出,所以必須借助于throw語句來拋出各種錯誤情況所對應的異常,且要求在程序中的合適位置定義好用戶自定義的異常類。?

·try-catch-finally:此語句是Java錯誤處理的基本結構,主要用來捕獲和處理一個或多個異常。通常由try、catch、finally三個塊組成。?。﹖ry塊:將所有可能拋出異常的代碼部分放入try塊中;ⅱ)catch塊:用緊跟在try塊后面一個或多個catch子句來捕獲異常,其的目標是處理異常,把變量設到合理的狀態,并象沒有出錯一樣繼續運行。若一個子程序不處理這個異常,則可返回到上一級處理,如此不斷的遞歸向上直到最外一級。ⅲ)finally塊:finally是Java異常處理機制的精髓,使用finally可以維護對象的內部狀態、清理非內存資源、將系統恢復到應該處于的狀態。若沒有finally,要實現其功能的代碼是很費解的。finally塊是可選塊,若定義了finally塊,則不論try塊中有無異常產生,finally塊都會被執行;甚至若在try或catch塊中執行了return、break語句,finally塊也會被執行,但要特別注意此時finally塊后面的語句并不會被執行。只有在try或catch中執行了System.exit(0)操作,才不會執行finally塊。另要特別指出的是:捕獲異常時,catch語句是按其位置由前至后依次對被拋出的異常對象進行匹配捕獲,若有多個catch語句,則異常類要按從子類到父類的順序放置;在應用技巧中,還可通過在try塊中由throw拋出“異?!保缓笤赾atch塊中捕獲之,實現程序中業務邏輯控制流程的跳轉。?

2.3? 異常處理的基本原則?

對于非運行時異常必須捕獲或聲明,而對運行時異常則不必,可以交給Java運行時系統來處理;對于自定義的異常類,通常把它作為Exception類的子類,且類名常以Exception結尾,不要把自定義的異常類作為RuntimeException類或Error的類的子類;在捕獲或聲明異常時,要選取合適類型的異常類,注意異常類的層次,根據不同的情況使用一般或特殊的異常類;根據具體的情況選擇在何處處理異常,或者在方法內捕獲并處理,或者用throws子句把它交給調用棧中上層的方法去處理;在catch語句中盡可能指定具體的異常類型,必要時使用多個catch;使用finally語句為異常處理提供統一的出口;若無法處理某個異常,則不捕獲它;若捕獲了一個異常,則要對它進行適當的處理;盡量在靠近異常被拋出的地方捕獲異常;除非要向上層遞歸拋出異常,否則要在捕獲異常的地方將其記錄到日志中。?

3? EJB中的異常處理?

3.1? EJB異常處理?

EJB(Enterprise JavaBean)是J2EE企業級應用開發的核心組件,EJB的分布式和事務屬性使得其異常處理成為一個更重要的問題[4]。EJB中異??煞譃槿?SUP>[5]:ⅰ)JVM異常:由JVM拋出,是一種致命錯誤。ⅱ)系統異常:一般由JVM以RuntimeException的子類拋出,是一種非受查異常。ⅲ)應用程序" title="應用程序">應用程序異常:它是一種定制異常,由應用程序或第三方類庫以Exception類或其子類拋出,是一種受查異常,通常由EJB方法的調用者來處理之。EJB容器攔截了EJB組件上的每一個方法調用,因此方法調用中發生的每一個異常也被EJB容器所攔截。EJB規范只處理應用程序異常和系統異常這兩種類型的異常。?

應用程序異常:是指在遠程接口的方法說明中所聲明的異常,它不是遠程異常RemoteException,也不應繼承RuntimeException或其子類。但是,在遠程接口方法的throws子句中聲明的非受查異常并不會被當作應用程序異常。應用程序異常是業務工作流中的例外,當這種類型的異常被拋出時,客戶機可得到一個恢復選項。當發生應用程序異常時,默認情況下EJB容器不會自動回滾事務,只有被顯式說明并通過調用關聯的EJBContext對象的setRollbackOnly()方法才能回滾事務。實際上,對于應用程序異常EJB容器通常以它原本的狀態傳送給客戶機而不會以任何方式包裝或修改它。?

系統異常:通常被定義為非受查異常,EJB方法不能從這種異常中恢復。當EJB容器攔截到非受查異常時,會自動回滾事務并執行必要的清理工作,然后把該非受查異常包裝到RemoteException類或其子類中并拋給客戶機。對于受查異常,若要使用EJB容器的內務處理,則必須將受查異常作為非受查異常拋出。因此,每當觸發受查系統異常時,應該對其原始的異常以javax.ejb.EJBException類或其子類方式包裝后拋出。由于EJBException本身是非受查異常,因此不需要在方法的throws子句中聲明它。EJB容器會自動捕獲EJBException或其子類,并把它包裝到RemoteException中,然后拋給客戶機。?

需指出,雖然EJB規范規定系統異常由應用程序服務器記錄,但記錄格式會因應用程序服務器的不同而異。為確保異常記錄格式的統一,方便對其進行統計分析,在代碼中記錄異常是一種好的策略。此外,在EJB1.0規范中要求把受查系統異常以RemoteException拋出,而EJB 1.1及以上規范則規定EJB實現類絕不應拋出RemoteException。?

3.2? 關鍵技術?

3.2.1? 日志機制

盡管用System.out.println()方法跟蹤異常方便,但開銷大,對I/O處理的同步控制將大大降低系統吞吐量。缺省時堆棧跟蹤被輸出至控制臺,但在實際的應用系統中,通過瀏覽控制臺來查看異常跟蹤不太現實。因此,在大型應用系統的開發、測試和運行等生命周期中,采用日志機制和恰當的編碼策略,精確地記錄各種類型的異常,可以降低系統開銷,提高軟件性能和質量。知名的日志實用程序有兩種:Log4J[6]是Apache的Jakarta的一個開放源代碼的項目,J2SE 1.4捆綁提供了日志處理包(java.util.logging)[7],它們的使用方法請參考相關文獻。?

3.2.2? Decorators設計模式

在面向對象的程序設計中若用一個對象(the Decorators)包裝另外一個對象,被稱為Decorators設計模式" title="設計模式">設計模式?;贒ecorators設計模式,通過包裝原始的異常消息并在EJB組件中將其重新拋出,以方便對該異常的查詢和訪問。其次,由于Log4J只能記錄String消息,所以要利用Decorators設計模式定義一個專門類負責把堆棧跟蹤轉換成String,以獲取該堆棧跟蹤的String表示。?

3.3? EJB異常處理策略?

3.3.1? 常見EJB異常處理的不足

·拋出帶有出錯消息的異常:此種方法存在異常內容可能被“吞掉”的現象。?

·記錄到控制臺并拋出一個異常:僅當控制臺可用時調用者才能向后跟蹤。?

·包裝原始的異常以保護其內容:可能導致重復記錄,產品日志或控制臺不能被交叉引用。?

3.3.2? EJB異常處理的優化策略

·優化應用程序異常處理:由EJB開發者顯式拋出,通常包裝了含義清楚消息,不必將其記錄到EJB層或客戶機層,而以一種直觀有意義的方式提供給最終用戶,并帶上其解決方案的途徑。?

實體Bean一般是啞類,通常應用程序異常主要來源于會話Bean。從實體Bean拋出的應用程序異常類型通常是CreateException、FinderException、RemoveException及它們的子類。當引用其它EJB遠程接口時,實體Bean會遇到RemoteException,在查找其它EJB組件時會遇到NamingException,若使用BMP實體Bean,則會碰到SQLException。與這些類似的受查系統異常應該被捕獲,并被包裝起來,作為EJBException或它的一個子類拋出。在優化的EJB設計中,客戶機一般不直接調用實體Bean上的方法,而通過會話Bean間接訪問實體Bean。若會話Bean調用相同的實體Bean方法,則要避免對異常的重復記錄。會話Bean和實體Bean處理系統異常的方式基本相似??刹捎迷L問標識技術避免對同一異常的重復記錄。?

·優化系統異常處理:比應用程序異常處理更為復雜,它的發生不受EJB開發者的控制且異常信息不直觀,需要對其原始異常進行包裝,以清楚地表達系統異常的含義。?

·優化Web層設計:通常把異常記錄到Web層本身,則易于實現且代碼簡潔。這要求Web層必須是EJB層的唯一客戶機,且Web層必須建立在業務委派(Business Delegate)、FrontController或攔截過濾器(Intercepting Filter)等模式和Struts或其它類似于MVC的框架基礎上。?

實際應用中,即使采用良好的異常處理策略,但由于編譯器和運行時優化,會限制使用堆棧跟蹤程序跟蹤異常的能力。通常把大的方法調用分割為更小的、更易于管理的塊,并提高代碼復用率;并將異常類型按需要劃分成細粒度的、具體的異常,在捕獲異常時則捕獲已規定好的具體類型的異常,避免捕獲所有類型的異常。?

3.4? EJB異常處理實例?

1:ejbCreate()方法中的FinderException異常處理。其代碼如下:?

public Object ejbCreate(RatepayingOrderValue value) throws CreateException { ?

try { if (value.getItemName() == null) { ?

throw new CreateException("不能創建報稅單!"); } ?

String taxpId = value.getTaxpayerId(); ?

Taxpayer taxp = taxpayerHome.fingByPrimaryKey(taxpId); ?

this.taxpayer = taxp; ?

} catch (FinderException fe) { ?

//作為應用程序異常,還是系統異常??

} catch (RemoteException re) { ?

//這是系統異常,并記錄在日志中。?

throw ExceptionLogUtil.createLoggableEJBException(re); ?

} ?

return null; ?

} ?

例1中報稅單RatepayingOrder實體Bean的ejbCreate()方法試圖獲取納稅人Taxpayer實體Bean的一個遠程引用,可能導致FinderException。此處,盡管可把FinderException當作應用程序異?;蜃飨到y異常,但是若把它當系統異常則更好,因為這可以提高EJB組件對客戶機的透明性。同理,對于會話Bean或者實體Bean試圖創建另一個會話Bean,可能導致的CreateException,或者會話Bean在它的某個容器回調方法中獲得了一個FinderException等,都最好將其作為系統異常。此外,若考慮會話Bean在處理下報稅單時,用戶須具有一個簡歷,若沒有,則會話Bean將觸發ObjectNotFoundException異常,這時最好將其作為應用程序異常拋出,以告知用戶其簡歷丟失。?

例2:logon()方法的InvalidUserDataException應用程序異常處理。其代碼如下:

public void logon(String user, String password) throws InvalidUserDataException

{???? if (user == null || password ==null)

????????????? throw new InvalidUserDataException();

?????? serviceImpl.logon(user, password);

}

以下是應用程序異常類InvalidUserDataException的定義。

public class InvalidUserDataException extends Exception

{? public InvalidUserDataException()

?????? {super(“用戶名或密碼不能為空!”); }

}

4? 結論?

在企業級的大型軟件開發中,嚴謹強大的Java異常處理機制為軟件質量控制提供了有力的技術支持,提高了軟件的可讀性、可維護性、容錯性和開發效率。充分有效的利用Java異常處理機制、采用合適的異常處理策略,是提高EJB中異常處理的性能的有效途徑。?

參考文獻:

[1]? Bruce Eckel. Thinking in Java[M].Beijing: China Machine Press,2000.240-281.?

[2]? 趙化冰,唐英,唐文彬,蘆東昕. Java異常處理[J]. 計算機應用, 2003,12:46-48.?

[3]? 張聰品,趙琛,糜宏斌. 異常處理機制研究[J].計算機應用研究,2005,4:86-89.?

[4]? [美]Chuck Cavaness Brian Keeton著,智慧東方工作室 譯. EJB 2.0企業級應用程序開發[M].北京:機械工業出版社,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?

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲国产精品第一区二区三区| 国产精品电影观看| 久久久久久久一区| 亚洲欧美久久久久一区二区三区| 欧美视频在线一区二区三区| 久久久www成人免费毛片麻豆| 国产欧美va欧美不卡在线| 在线观看亚洲专区| 久久久一区二区| 欧美第一黄网免费网站| 亚洲精品免费电影| 麻豆9191精品国产| 国产亚洲一区二区三区| 黄色日韩在线| 日韩视频在线免费观看| 一本到12不卡视频在线dvd| 国产精品久久久久久超碰| 久久免费视频在线| 久久久无码精品亚洲日韩按摩| 欧美电影免费观看大全| 欧美性猛交xxxx乱大交退制版| 久久大逼视频| 国产日本欧美在线观看| 亚洲精品欧美日韩专区| 国产日韩高清一区二区三区在线| 欧美日韩一区在线观看| 日韩一级黄色av| 一本色道**综合亚洲精品蜜桃冫| 亚洲激情中文1区| av成人激情| 亚洲一级黄色| 欧美.日韩.国产.一区.二区| 国产欧美日韩视频一区二区| 欧美日韩p片| 黑丝一区二区三区| 国产精品一区免费视频| 性久久久久久久久| 欧美午夜激情小视频| 国产午夜精品久久久久久久| 欧美亚洲一区二区在线| 麻豆av一区二区三区久久| 亚洲精品一二三区| 欧美日韩一区二区欧美激情| 一区二区三区国产| 久久精品夜色噜噜亚洲a∨| 黄网动漫久久久| 欧美大片一区| 欧美专区亚洲专区| 在线一区免费观看| 欧美日韩精品在线播放| 久久久久成人精品免费播放动漫| 欧美日韩在线观看一区二区三区| 欧美日韩在线不卡一区| 激情综合五月天| 国产在线观看91精品一区| 亚洲精品影视在线观看| 最新亚洲视频| 亚洲激情网站免费观看| 一本色道久久综合亚洲精品不| 国产精品黄视频| 欧美福利视频在线| 亚洲激情啪啪| 久久嫩草精品久久久精品一| 欧美电影免费观看网站| 一本色道久久综合亚洲精品婷婷| 日韩一区二区久久| 136国产福利精品导航网址应用| 麻豆九一精品爱看视频在线观看免费| 久久久久久综合| 国产一区二区三区四区五区美女| 9l视频自拍蝌蚪9l视频成人| 欧美va天堂va视频va在线| 国产欧美精品一区二区色综合| 亚洲精品乱码久久久久久| 国产一区在线观看视频| 欧美在线不卡视频| 亚洲自拍啪啪| 极品尤物久久久av免费看| 国产手机视频精品| 国产精品大全| 久久国产精彩视频| 另类专区欧美制服同性| 国内精品久久久久久久影视蜜臀| 1000部精品久久久久久久久| 国产精品黄色| 欧美日韩国产探花| 国产一区二区三区久久精品| 91久久久一线二线三线品牌| 在线观看欧美黄色| 欧美精品一区二区三区久久久竹菊| 欧美一区二区三区免费观看视频| 国产精品一区二区三区四区| 午夜天堂精品久久久久| 国产精品久久久久久妇女6080| 欧美久久在线| 欧美日韩p片| 国产综合香蕉五月婷在线| 麻豆乱码国产一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 99国产精品视频免费观看| 久久精精品视频| 国产日韩视频一区二区三区| 韩国精品在线观看| 黑人极品videos精品欧美裸| 影音先锋亚洲电影| 午夜国产精品视频| 激情婷婷久久| 亚洲欧洲av一区二区| 亚洲茄子视频| 欧美~级网站不卡| 欧美一区二区三区四区在线观看| 欧美成人精品一区| 久久综合给合久久狠狠色| 欧美午夜欧美| 136国产福利精品导航网址应用| 欧美成人国产va精品日本一级| 国产精品超碰97尤物18| 激情av一区| 亚洲一区在线免费观看| 亚洲欧美日韩国产中文| 99re6热在线精品视频播放速度| 欧美激情中文字幕一区二区| 欧美日韩精品一区二区在线播放| 国产精品美女久久久| 国产日韩欧美成人| 久久亚洲精品中文字幕冲田杏梨| 在线午夜精品| 亚洲精品视频在线播放| 亚洲精品护士| 欧美精品黄色| 亚洲欧美日韩在线一区| 亚洲欧美日韩一区在线观看| 亚洲午夜在线视频| 一区精品在线播放| 国内精品写真在线观看| 久久精品一级爱片| 久久午夜影视| 伊人久久亚洲热| 亚洲欧美激情一区| 久久久久久久一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟| 狠狠色综合网站久久久久久久| 亚洲精品字幕| 国产精品美女一区二区| 在线成人欧美| 国产精品美女久久久| 在线日韩av永久免费观看| 亚洲精品国产精品乱码不99按摩| 欧美三区美女| 99精品欧美一区二区蜜桃免费| 国产亚洲精品久久久| 久久综合久久综合这里只有精品| 午夜精品福利电影| 伊甸园精品99久久久久久| 美女脱光内衣内裤视频久久网站| 最新国产乱人伦偷精品免费网站| 伊人久久大香线蕉综合热线| 一二三四社区欧美黄| 欧美成年人网站| 麻豆成人综合网| 亚洲第一色中文字幕| 欧美超级免费视 在线| 欧美本精品男人aⅴ天堂| 国产精品一区视频| 日韩亚洲视频| 欧美在线免费视屏| 在线不卡免费欧美| 亚洲欧美国产一区二区三区| 国产精品久久久久久久久久免费| 亚洲国产片色| 一区二区在线视频播放| 亚洲先锋成人| 欧美日韩在线视频一区| 麻豆9191精品国产| 久久一区二区三区超碰国产精品| 国产日韩欧美电影在线观看| 国产欧美在线观看| 国产日韩欧美二区| 国产亚洲毛片在线| 亚洲午夜影视影院在线观看| 亚洲欧美国产日韩中文字幕| 国产一区二区三区久久| 亚洲欧美视频一区| 亚洲私人黄色宅男| 国产精品二区二区三区| 樱桃成人精品视频在线播放| 狠狠色丁香久久婷婷综合_中| 亚洲欧洲免费视频| 久久免费精品日本久久中文字幕| 欧美一区二区三区精品电影| 国产精品外国| 国产日韩欧美一区二区三区四区| 欧美精品免费在线| 亚洲风情在线资源站| 国产美女搞久久| 国产精品久久久久免费a∨大胸| 国内精品福利| 中文无字幕一区二区三区| 亚洲激情网站免费观看| 另类成人小视频在线| 亚洲午夜精品久久久久久app| 亚洲精品一区二区三区四区高清| 亚洲在线一区| 禁久久精品乱码| 亚洲精品乱码视频| 欧美伊人久久久久久久久影院| 欧美精品激情blacked18| 日韩午夜三级在线| 91久久国产综合久久| 亚洲国产精品高清久久久| 在线精品亚洲一区二区| 欧美制服丝袜第一页| 久久久伊人欧美| 欧美国产激情二区三区| 亚洲午夜精品| 一区二区三区国产在线观看| 久久综合九色综合网站| 亚洲国产一区二区视频| 国产毛片久久| 亚洲激情在线观看| 欧美大片在线观看一区| 在线免费观看日本一区| 欧美极品在线观看| 国产精品久久久久久久一区探花| 午夜视频一区在线观看| 国产精品男gay被猛男狂揉视频| 黄色国产精品一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 久久久精品午夜少妇| 免费欧美网站| 在线播放视频一区| 最新国产の精品合集bt伙计| 久久久久久久999| 欧美一区观看| 国产区精品在线观看| 国模 一区 二区 三区| 亚洲精品中文字幕有码专区| 国产欧美va欧美va香蕉在| 亚洲一二三级电影| 亚洲视频网站在线观看| 欧美一级在线视频| 欧美精品18videos性欧美| 国产精品欧美日韩一区| 欧美日韩1234| 一区二区三区成人| 国产精品久久久久久影视| 欧美日韩久久久久久| 亚洲午夜精品一区二区三区他趣| 亚洲精品乱码久久久久久蜜桃91| 欧美亚洲网站| 亚洲特色特黄| 欧美日韩一区二区三区四区在线观看| 国际精品欧美精品| 欧美一区日韩一区| 欧美日韩中文字幕在线视频| 亚洲午夜小视频| 欧美午夜女人视频在线| 国产精品99久久久久久久女警| 久久精品国产综合| 久久精品人人做人人爽电影蜜月| 国产欧美视频在线观看| 极品日韩久久| 国产一区在线视频| 久久久精品久久久久| 欧美激情影院| 久久国产欧美| 一区二区三区**美女毛片| 日韩亚洲欧美高清| 欧美久久影院| 免费成人毛片| 欧美成人午夜影院| 欧美日韩精品免费在线观看视频| 久久嫩草精品久久久久| 欧美伊久线香蕉线新在线| 国产精品日韩久久久久| 欧美日本不卡视频| 亚洲人体一区| 国产午夜精品美女视频明星a级| 伊人激情综合| 国产精品中文字幕在线观看| 久久久久久穴| 蜜桃av一区二区在线观看| 欧美美女bb生活片| 久久在精品线影院精品国产| 欧美午夜不卡视频| 开元免费观看欧美电视剧网站| 久久永久免费| 国产欧美日韩一区二区三区在线| 国产欧美一区二区三区久久人妖| 国产日韩精品一区二区三区| 免费成人黄色av| 亚洲午夜精品国产| 香蕉视频成人在线观看| 欧美日韩免费视频| 国产精品地址| 亚洲国产精品va在线看黑人动漫| 久久综合网络一区二区| 99国产精品久久| 伊人久久大香线蕉综合热线| 亚洲另类视频| 亚洲综合色网站| 久久久久久久999精品视频| 亚洲中字在线| 日韩视频免费观看高清完整版| 狠狠色丁香婷婷综合久久片| 一区二区高清在线观看| 欧美成人免费播放| 欧美黄色大片网站| 亚洲精品乱码久久久久久日本蜜臀| 久久香蕉国产线看观看av| 亚洲天堂视频在线观看| 亚欧美中日韩视频| 国产区亚洲区欧美区| 欧美视频日韩视频| 欧美1区2区视频| 99视频日韩| 亚洲精品一区二区在线| 久久久精品网| 国产日本欧美在线观看| 欧美午夜无遮挡| 精品盗摄一区二区三区| 国产日韩欧美制服另类| 国产精品成人一区二区三区夜夜夜| 在线欧美影院| 宅男噜噜噜66一区二区| 亚洲最新色图| 日韩午夜在线观看视频| 亚洲精品国产精品国自产在线|