<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MANIFEST.MF文件詳解

      打開JavaJAR文件我們經(jīng)常可以看到文件中包含著一個META-INF目錄, 這個目錄下會有一些文件,其中必有一個MANIFEST.MF,這個文件描述了該Jar文件的很多信息,下面將詳細(xì)介紹MANIFEST.MF文件的內(nèi) 容,先來看struts.jar中包含的MANIFEST.MF文件內(nèi)容:

      Manifest-Version: 1.0
      Created-By: Apache Ant 1.5.1
      Extension-Name: Struts Framework
      Specification-Title: Struts Framework
      Specification-Vendor: Apache Software Foundation
      Specification-Version: 1.1
      Implementation-Title: Struts Framework
      Implementation-Vendor: Apache Software Foundation
      Implementation-Vendor-Id: org.apache
      Implementation-Version: 1.1
      Class-Path:  commons-beanutils.jar commons-collections.jar commons-dig
       ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
       truts-legacy.jar

      如果我們把MANIFEST中的配置信息進(jìn)行分類,可以歸納出下面幾個大類:

      一般屬性

      1. Manifest-Version
       用來定義manifest文件的版本,例如:Manifest-Version: 1.0
      2. Created-By
       聲明該文件的生成者,一般該屬性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1
      3. Signature-Version
       定義jar文件的簽名版本
      4. Class-Path
       應(yīng)用程序或者類裝載器使用該值來構(gòu)建內(nèi)部的類搜索路徑

      應(yīng)用程序相關(guān)屬性

      1. Main-Class
       定義jar文件的入口類,該類必須是一個可執(zhí)行的類,一旦定義了該屬性即可通過 java -jar x.jar來運(yùn)行該jar文件。
       
      小程序(Applet)相關(guān)屬性

      1. Extendsion-List
       該屬性指定了小程序需要的擴(kuò)展信息列表,列表中的每個名字對應(yīng)以下的屬性
      2. <extension>-Extension-Name
      3. <extension>-Specification-Version
      4. <extension>-Implementation-Version
      5. <extension>-Implementation-Vendor-Id
      5. <extension>-Implementation-URL

      擴(kuò)展標(biāo)識屬性

      1. Extension-Name
       該屬性定義了jar文件的標(biāo)識,例如Extension-Name: Struts Framework
       
      包擴(kuò)展屬性
       
      1. Implementation-Title   定義了擴(kuò)展實(shí)現(xiàn)的標(biāo)題
      2. Implementation-Version   定義擴(kuò)展實(shí)現(xiàn)的版本
      3. Implementation-Vendor   定義擴(kuò)展實(shí)現(xiàn)的組織  
      4. Implementation-Vendor-Id   定義擴(kuò)展實(shí)現(xiàn)的組織的標(biāo)識
      5. Implementation-URL :   定義該擴(kuò)展包的下載地址(URL)
      6. Specification-Title   定義擴(kuò)展規(guī)范的標(biāo)題
      7. Specification-Version   定義擴(kuò)展規(guī)范的版本
      8. Specification-Vendor   聲明了維護(hù)該規(guī)范的組織
      9. Sealed   定義jar文件是否封存,值可以是true或者false (這點(diǎn)我還不是很理解)

      簽名相關(guān)屬性

      簽名方面的屬性我們可以來參照JavaMail所提供的mail.jar中的一段

      Name: javax/mail/Address.class
      Digest-Algorithms: SHA MD5 
      SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4=
      MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw==

      這段內(nèi)容定義類簽名的類名、計算摘要的算法名以及對應(yīng)的摘要內(nèi)容(使用BASE方法進(jìn)行編碼)

      .自定義屬性

      除了前面提到的一些屬性外,你也可以在MANIFEST.MF中增加自己的屬性以及響應(yīng)的值,例如J2ME程序jar包中就可能包含著如下信息

      MicroEdition-Configuration: CLDC-1.0
      MIDlet-Name: J2ME_MOBBER Midlet Suite
      MIDlet-Info-URL: http://www.javayou.com
      MIDlet-Icon: /icon.png
      MIDlet-Vendor: Midlet Suite Vendor
      MIDlet-1: mobber,/icon.png,mobber
      MIDlet-Version: 1.0.0
      MicroEdition-Profile: MIDP-1.0
      MIDlet-Description: Communicator

      關(guān) 鍵在于我們怎么來讀取這些信息呢?其實(shí)很簡單,JDK給我們提供了用于處理這些信息的API,詳細(xì)的信息請見java.util.jar包中,我們可以通 過給JarFile傳遞一個jar文件的路徑,然后調(diào)用JarFilegetManifest方法來獲取Manifest信息。

      更詳細(xì)關(guān)于JAR文件的規(guī)范請見
      http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html

      中文說明
      http://www-900.ibm.com/developerWorks/cn/java/j-jar/

      附:

      大多數(shù) Java 程序員都熟悉對 JAR 文件的基本操作。但是只有少數(shù)程序員了解 JAR 文件格式的 強(qiáng)大功能。在本文中,作者探討了JAR 格式的許多功能和優(yōu)勢,包括打包、可執(zhí)行的 JAR 文件、安全性和索引。

      JAR 文件是什么?

      JAR 文件格式以流行的 ZIP 文件格式為基礎(chǔ),用于將許多個文件聚集為一個文件。與 ZIP 文件不同的是,JAR 文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR

      一個 JAR 文件可以用于:

      • 用于發(fā)布和使用類庫
      • 作為應(yīng)用程序和擴(kuò)展的構(gòu)建單元
      • 作為組件、applet 或者插件程序的部署單位
      • 用于打包與組件相關(guān)聯(lián)的輔助資源

      JAR 文件格式提供了許多優(yōu)勢和功能,其中很多是傳統(tǒng)的壓縮格式如 ZIP 或者 TAR 所沒有提供的。它們包括:

      • 安全性。可以對 JAR 文件內(nèi)容加上數(shù)字化簽名。這樣,能夠識別簽名的工具就可以有選擇地為您授予軟件安全特權(quán),這是其他文件做不到的,它還可以檢測代碼是否被篡改過。
      • 減少下載時間。 如果一個 applet 捆綁到一個 JAR 文件中,那么瀏覽器就可以在一個 HTTP 事務(wù)中下載這個 applet 的類文件和相關(guān)的資源,而不是對每一個文件打開一個新連接。
      • 壓縮。JAR 格式允許您壓縮文件以提高存儲效率。
      • 傳輸平臺擴(kuò)展。 Java 擴(kuò)展框架(Java Extensions Framework)提供了向 Java 核心平臺添加功能的方法,這些擴(kuò)展是用 JAR 文件打包的(Java 3D  JavaMail 就是由 Sun 開發(fā)的擴(kuò)展例子)
      • 包密封。存儲在 JAR 文件中的包可以選擇進(jìn)行 密封,以增強(qiáng)版本一致性和安全性。密封一個包意味著包中的所有類都必須在同一 JAR 文件中找到。
      • 包版本控制。一個 JAR 文件可以包含有關(guān)它所包含的文件的數(shù)據(jù),如廠商和版本信息。
      • 可移植性。處理 JAR 文件的機(jī)制是 Java 平臺核心 API 的標(biāo)準(zhǔn)部分。

      壓縮的和未壓縮的 JAR

      jar 工具(有關(guān)細(xì)節(jié)參閱 jar?工具?)在默認(rèn)情況下壓縮文件。未壓縮的 JAR 文件一般可以比壓縮過的 JAR 文件更快地裝載,因為在裝載過程中要解壓縮文件,但是未壓縮的文件在網(wǎng)絡(luò)上的下載時間可能更長。

      META-INF 目錄

      大多數(shù) JAR 文件包含一個 META-INF 目錄,它用于存儲包和擴(kuò)展的配置數(shù)據(jù),如安全性和版本信息。Java?平臺識別并解釋 META-INF 目錄中的下述文件和目錄,以便配置應(yīng)用程序、擴(kuò)展和類裝載器:

      • MANIFEST.MF這個 manifest 文件定義了與擴(kuò)展和包相關(guān)的數(shù)據(jù)。
      • INDEX.LIST 這個文件由 jar 工具的新選項 -i 生成,它包含在應(yīng)用程序或者擴(kuò)展中定義的包的位置信息。它是 JarIndex 實(shí)現(xiàn)的一部分,并由類裝載器用于加速類裝載過程。
      • xxx.SF 這是 JAR 文件的簽名文件。占位符 xxx標(biāo)識了簽名者。
      • xxx.DSA 與簽名文件相關(guān)聯(lián)的簽名程序塊文件,它存儲了用于簽名 JAR 文件的公共簽名。

      jar 工具

      為了用 JAR 文件執(zhí)行基本的任務(wù),要使用作為java?Development Kit 的一部分提供的 Java Archive Tool ( jar 工具)。用 jar 命令調(diào)用 jar 工具。表 1 顯示了一些常見的應(yīng)用:

       1. 常見的 jar 工具用法

      功能

      命令

      用一個單獨(dú)的文件創(chuàng)建一個 JAR 文件

      jar cf jar-file input-file...

      用一個目錄創(chuàng)建一個 JAR 文件

      jar cf jar-file dir-name

      創(chuàng)建一個未壓縮的 JAR 文件

      jar cf0 jar-file dir-name

      更新一個 JAR 文件

      jar uf jar-file input-file...

      查看一個 JAR 文件的內(nèi)容

      jar tf jar-file

      提取一個 JAR 文件的內(nèi)容

      jar xf jar-file

      從一個 JAR 文件中提取特定的文件

      jar xf jar-file archived-file...

      運(yùn)行一個打包為可執(zhí)行 JAR 文件的應(yīng)用程序

      java -jar app.jar

       

      可執(zhí)行的 JAR

      一個 可執(zhí)行的 jar 文件是一個自包含的 Java 應(yīng)用程序,它存儲在特別配置的JAR 文件中,可以由 JVM 直接執(zhí)行它而無需事先提取文件或者設(shè)置類路徑。要運(yùn)行存儲在非可執(zhí)行的 JAR 中的應(yīng)用程序,必須將它加入到您的類路徑中,并用名字調(diào)用應(yīng)用程序的主類。但是使用可執(zhí)行的 JAR 文件,我們可以不用提取它或者知道主要入口點(diǎn)就可以運(yùn)行一個應(yīng)用程序。可執(zhí)行 JAR 有助于方便發(fā)布和執(zhí)行 Java 應(yīng)用程序。

      創(chuàng)建可執(zhí)行 JAR

      創(chuàng)建一個可執(zhí)行 JAR 很容易。首先將所有應(yīng)用程序代碼放到一個目錄中。假設(shè)應(yīng)用程序中的主類是com.mycompany.myapp.Sample 。您要創(chuàng)建一個包含應(yīng)用程序代碼的 JAR 文件并標(biāo)識出主類。為此,在某個位置(不是在應(yīng)用程序目錄中)創(chuàng)建一個名為 manifest 的文件,并在其中加入以下一行:

      Main-Class: com.mycompany.myapp.Sample

       

      然后,像這樣創(chuàng)建 JAR 文件:

      jar cmf manifest ExecutableJar.jar application-dir

       

      所要做的就是這些了 -- 現(xiàn)在可以用 java -jar 執(zhí)行這個 JAR 文件 ExecutableJar.jar

      一個可執(zhí)行的 JAR 必須通過 menifest 文件的頭引用它所需要的所有其他從屬 JAR。如果使用了 -jar 選項,那么環(huán)境變量 CLASSPATH 和在命令行中指定的所有類路徑都被 JVM 所忽略。

      啟動可執(zhí)行 JAR

      既然我們已經(jīng)將自己的應(yīng)用程序打包到了一個名為 ExecutableJar.jar 的可執(zhí)行 JAR 中了,那么我們就可以用下面的命令直接從文件啟動這個應(yīng)用程序:

      java -jar ExecutableJar.jar

      包密封

      密封 JAR 文件中的一個包意味著在這個包中定義的所有類都必須在同一個 JAR 文件中找到。這使包的作者可以增強(qiáng)打包類之間的版本一致性。密封還提供了防止代碼篡改的手段。

      要密封包,需要在 JAR  manifest 文件中為包添加一個 Name 頭,然后加上值為“true” Sealed 頭。與可執(zhí)行的 JAR 一樣,可以在創(chuàng)建 JAR 時,通過指定一個具有適當(dāng)頭元素的 manifest 文件密封一個 JAR,如下所示:

      Name: com/samplePackage/

      Sealed: true

       

      Name 頭標(biāo)識出包的相對路徑名。它以一個“/”結(jié)束以與文件名區(qū)別。在 Name 頭后面第一個空行之前的所有頭都作用于在 Name 頭中指定的文件或者包。在上述例子中,因為 Sealed 頭出現(xiàn)在 Name 頭后并且中間沒有空行,所以 Sealed 頭將被解釋為只應(yīng)用到包 com/samplePackage 上。

      如果試圖從密封包所在的 JAR 文件以外的其他地方裝載密封包中的一個類,那么 JVM 將拋出一個SecurityException 

      擴(kuò)展打包 
      擴(kuò)展為 Java 平臺增加了功能,在 JAR 文件格式中已經(jīng)加入了擴(kuò)展機(jī)制。擴(kuò)展機(jī)制使得 JAR 文件可以通過manifest 文件中的 Class-Path 頭指定所需要的其他 JAR 文件。

      假設(shè) extension1.jar  extension2.jar 是同一個目錄中的兩個 JAR 文件,extension1.jar  manifest 文件包含以下頭:

      Class-Path: extension2.jar

       

      這個頭表明 extension2.jar 中的類是 extension1.jar 中的類的 擴(kuò)展類extension1.jar 中的類可以調(diào)用extension2.jar 中的類,并且不要求 extension2.jar 處在類路徑中。

      在裝載使用擴(kuò)展機(jī)制的 JAR 時,JVM 會高效而自動地將在 Class-Path 頭中引用的 JAR 添加到類路徑中。不過,擴(kuò)展 JAR 路徑被解釋為相對路徑,所以一般來說,擴(kuò)展 JAR 必須存儲在引用它的 JAR 所在的同一目錄中。

      例如,假設(shè)類 ExtensionClient 引用了類 ExtensionDemo ,它捆綁在一個名為 ExtensionClient.jar  JAR 文件中,而類 ExtensionDemo 則捆綁在 ExtensionDemo.jar 中。為了使 ExtensionDemo.jar 可以成為擴(kuò)展,必須將ExtensionDemo.jar 列在 ExtensionClient.jar  manifest  Class-Path 頭中,如下所示:

      Manifest-Version: 1.0

      Class-Path: ExtensionDemo.jar

       

      在這個 manifest  Class-Path 頭的值是沒有指定路徑的 ExtensionDemo.jar,表明 ExtensionDemo.jar ExtensionClient JAR 文件處在同一目錄中。

      JAR 文件中的安全性

      JAR 文件可以用 jarsigner 工具或者直接通過 java.security API 簽名。一個簽名的 JAR 文件與原來的 JAR 文件完全相同,只是更新了它的 manifest,并在 META-INF 目錄中增加了兩個文件,一個簽名文件和一個簽名塊文件。

      JAR 文件是用一個存儲在 Keystore 數(shù)據(jù)庫中的證書簽名的。存儲在 keystore 中的證書有密碼保護(hù),必須向jarsigner 工具提供這個密碼才能對 JAR 文件簽名。


       1. Keystore 數(shù)據(jù)庫 

      JAR 的每一位簽名者都由在 JAR 文件的 META-INF 目錄中的一個具有 .SF 擴(kuò)展名的簽名文件表示。這個文件的格式類似于 manifest 文件 -- 一組 RFC-822 頭。如下所示,它的組成包括一個主要部分,它包括了由簽名者提供的信息、但是不特別針對任何特定的 JAR 文件項,還有一系列的單獨(dú)的項,這些項也必須包含在 menifest 文件中。在驗證一個簽名的 JAR 時,將簽名文件的摘要值與對 JAR 文件中的相應(yīng)項計算的摘要值進(jìn)行比較。


      清單 1. 簽名 JAR 中的 Manifest  signature 文件

      Contents of signature file META-INF/MANIFEST.MF

      Manifest-Version: 1.0

      Created-By: 1.3.0 (Sun Microsystems Inc.)

      Name: Sample.java

      SHA1-Digest: 3+DdYW8INICtyG8ZarHlFxX0W6g=

      Name: Sample.class

      SHA1-Digest: YJ5yQHBZBJ3SsTNcHJFqUkfWEmI=

      Contents of signature file META-INF/JAMES.SF

      Signature-Version: 1.0

      SHA1-Digest-Manifest: HBstZOJBuuTJ6QMIdB90T8sjaOM=

      Created-By: 1.3.0 (Sun Microsystems Inc.)

      Name: Sample.java

      SHA1-Digest: qipMDrkurQcKwnyIlI3Jtrnia8Q=

      Name: Sample.class

      SHA1-Digest: pT2DYby8QXPcCzv2NwpLxd8p4G4=

       

      數(shù)字簽名

      一個數(shù)字簽名是.SF 簽名文件的已簽名版本。數(shù)字簽名文件是二進(jìn)制文件,并且與 .SF 文件有相同的文件名,但是擴(kuò)展名不同。根據(jù)數(shù)字簽名的類型 -- RSADSA 或者 PGP -- 以及用于簽名 JAR 的證書類型而有不同的擴(kuò)展名。

      Keystore

      要簽名一個 JAR 文件,必須首先有一個私鑰。私鑰及其相關(guān)的公鑰證書存儲在名為 keystores 的、有密碼保護(hù)的數(shù)據(jù)庫中。JDK 包含創(chuàng)建和修改 keystores 的工具。keystore 中的每一個密鑰都可以用一個別名標(biāo)識,它通常是擁有這個密鑰的簽名者的名字。

      所有 keystore (密鑰和信任的證書項)都是用唯一別名訪問的。別名是在用 keytool -genkey 命令生成密鑰對(公鑰和私鑰)并在 keystore 中添加項時指定的。之后的 keytool 命令必須使用同樣的別名引用這一項。

      例如,要用別名“james”生成一個新的公鑰/私鑰對并將公鑰包裝到自簽名的證書中,要使用下述命令:

      keytool -genkey -alias james -keypass jamespass

              -validity 80 -keystore jamesKeyStore

              -storepass jamesKeyStorePass

       

      這個命令序列指定了一個初始密碼“jamespass”,后續(xù)的命令在訪問 keystore “jamesKeyStore”中與別名“james”相關(guān)聯(lián)的私鑰時,就需要這個密碼。如果 keystore“jamesKeyStore”不存在,則 keytool 會自動創(chuàng)建它。

      jarsigner 工具

      jarsigner 工具使用 keystore 生成或者驗證 JAR 文件的數(shù)字簽名。

      假設(shè)像上述例子那樣創(chuàng)建了 keystore “jamesKeyStore”,并且它包含一個別名為“james”的密鑰,可以用下面的命令簽名一個 JAR 文件:

      jarsigner -keystore jamesKeyStore -storepass jamesKeyStorePass

                -keypass jamespass -signedjar SSample.jar Sample.jar james

       

      這個命令用密碼“jamesKeyStorePass”從名為“jamesKeyStore” keystore 中提出別名為“james”、密碼為“jamespass”的密鑰,并對 Sample.jar 文件簽名、創(chuàng)建一個簽名的 JAR -- SSample.jar

      jarsigner 工具還可以驗證一個簽名的 JAR 文件,這種操作比簽名 JAR 文件要簡單得多,只需執(zhí)行以下命令:

      jarsigner -verify SSample.jar

       

      如果簽名的 JAR 文件沒有被篡改過,那么 jarsigner 工具就會告訴您 JAR 通過驗證了。否則,它會拋出一個SecurityException  表明哪些文件沒有通過驗證。

      還可以用 java.util.jar  java.security API 以編程方式簽名 JAR(有關(guān)細(xì)節(jié)參閱 參考資料)。也可以使用像Netscape Object Signing Tool 這樣的工具。

      JAR 索引

      如果一個應(yīng)用程序或者 applet 捆綁到多個 JAR 文件中,那么類裝載器就使用一個簡單的線性搜索算法搜索類路徑中的每一個元素,這使類裝載器可能要下載并打開許多個 JAR 文件,直到找到所要的類或者資源。如果類裝載器試圖尋找一個不存在的資源,那么在應(yīng)用程序或者 applet 中的所有 JAR 文件都會下載。對于大型的網(wǎng)絡(luò)應(yīng)用程序和 applet,這會導(dǎo)致啟動緩慢、響應(yīng)遲緩并浪費(fèi)帶寬。

       JDK 1.3 以后,JAR 文件格式開始支持索引以優(yōu)化網(wǎng)絡(luò)應(yīng)用程序中類的搜索過程,特別是 appletJarIndex 機(jī)制收集在 applet 或者應(yīng)用程序中定義的所有 JAR 文件的內(nèi)容,并將這些信息存儲到第一個 JAR 文件中的索引文件中。下載了第一個 JAR 文件后,applet 類裝載器將使用收集的內(nèi)容信息高效地裝載 JAR 文件。這個目錄信息存儲在根 JAR 文件的 META-INF 目錄中的一個名為 INDEX.LIST 的簡單文本文件中。

      創(chuàng)建一個 JarIndex 
      可以通過在 jar 命令中指定 -i 選項創(chuàng)建一個 JarIndex。假設(shè)我們的目錄結(jié)構(gòu)如下圖所示:


       2. JarIndex 

      您將使用下述命令為 JarIndex_Main.jarJarIndex_test.jar  JarIndex_test1.jar 創(chuàng)建一個索引文件:

      jar -i JarIndex_Main.jar JarIndex_test.jar SampleDir/JarIndex_test1.jar

       

      INDEX.LIST 文件的格式很簡單,包含每個已索引的 JAR 文件中包含的包或者類的名字,如清單 2 所示:


      清單 2. JarIndex INDEX.LIST 文件示例

      JarIndex-Version: 1.0

      JarIndex_Main.jar

      sp

      JarIndex_test.jar

      Sample

      SampleDir/JarIndex_test1.jar

      org

      org/apache

      org/apache/xerces

      org/apache/xerces/framework

      org/apache/xerces/framework/xml4j

       

      結(jié)束語

      JAR 格式遠(yuǎn)遠(yuǎn)超出了一種壓縮格式,它有許多可以改進(jìn)效率、安全性和組織 Java 應(yīng)用程序的功能。因為這些功能已經(jīng)建立在核心平臺 -- 包括編譯器和類裝載器 -- 中了,所以開發(fā)人員可以利用 JAR 文件格式的能力簡化和改進(jìn)開發(fā)和部署過程

       

      posted @ 2017-08-05 13:56  DavidGandy  閱讀(69782)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 国产中年熟女高潮大集合| 日韩精品无遮挡在线观看| 国产精品中文字幕在线| 无码人妻黑人中文字幕| 亚洲综合色区另类av| 秋霞电影院午夜无码免费视频| 性高湖久久久久久久久| 亚洲岛国成人免费av| 久久精品免视看国产成人| 欧美老熟妇喷水| 鲁一鲁一鲁一鲁一澡| 丁香五月亚洲综合在线国内自拍 | 欧美日产国产精品| 西西人体44WWW高清大胆| 亚洲一区二区精品偷拍| 97久久精品人人澡人人爽| 亚洲精品在线二区三区| 无码一区二区三区久久精品| A毛片终身免费观看网站| 97在线视频人妻无码| 国产一区二区三区小说| 人人人澡人人肉久久精品| 国产一卡2卡三卡4卡免费网站| 成年无码av片完整版| 97在线精品视频免费| 国产首页一区二区不卡| 富川| 亚洲av无码专区在线亚| 久久人人97超碰精品| 少妇人妻偷人精品视蜜桃| 亚洲老熟女一区二区三区| 精品无码成人久久久久久| 国产在线精品一区二区夜色| 国产v亚洲v天堂a无码99 | 在线免费观看视频1区| 中文字幕国产精品综合| 欧美变态另类牲交| 日韩中文字幕有码av| 少妇久久久久久久久久| 日本一区二区三区在线播放| 4399理论片午午伦夜理片|