<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
    作者: 高科華∣來源:Matrix

    J2EE 1.4簡介
    2003年11月24日,J2EE的JCP(Java Community Process)委員會投票一致通過了J2EE 1.4,這是過去兩年內(nèi)發(fā)布的第一個主要版本。這個最新版的企業(yè)Java標準開放平臺增加了許多新的服務(wù),J2EE 1.4 SDK支持這些服務(wù),現(xiàn)在可以下載這個SDK了。這個SDK包括J2EE 1.4 應(yīng)用服務(wù)器、J2SE 1.4.2和J2EE 1.4示例代碼。你可以下載整個SDK或單獨下載應(yīng)用服務(wù)器或示例代碼。
    下面的技巧介紹了J2EE 1.4的一些新特點。也包括如何在Solaris、 Windows、 Linux、和 Mac OS X上安裝J2EE 1.4 SDK。但是沒有完全覆蓋這個平臺的所有新內(nèi)容。關(guān)于J2EE 1.4新內(nèi)容的更全面的介紹,請看J2EE v1.4 Application Server Release Notes。
    對Web Service的支持
    J2EE 1.4最重要、最受爭議的特點是對標準的Web Service的端對端的支持。有了J2EE 1.4,現(xiàn)在可以用HTTP之上的SOAP(Simple Object Access Protocol)使得J2EE組件(例如企業(yè)Bean和servlet)成為Web Service。
    J2EE 1.4要求應(yīng)用服務(wù)器必須遵守WS-I Basic Profile 1.0,這個規(guī)范定義了Web service的傳輸和協(xié)議。這使得Web service是可以互操作的。
    與J2EE中Web service有關(guān)的關(guān)鍵技術(shù)如下:
    · Web Services for J2EE 1.1。結(jié)合單個J2EE技術(shù)創(chuàng)建Web service的主要是Web Services for J2EE。它定義了客戶端、service端以及容器之間的部署協(xié)議。新的部署描述符文件,webservices.xml,為每一種組件定義了部署模式。Web Services for J2EE 還定義了編程模型(JAX-RPC)、 使用JNDI查找提供service的對象、和安全。最后,它還提供了一個新的Handler對象,開發(fā)者可以用這種對象阻止和操作SOAP消息。
    · JAX-RPC 1.1 (Java API for XML-Remote Procedure Calls)。JAX-RPC是一個標準的遠程過程調(diào)用接口,它使用XML作為方法調(diào)用和返回值的序列化協(xié)議。JAX-RPC 把servlet和無狀態(tài)會話Beans定義為在SOAP和 WSDL (Web Services Description Language)的基礎(chǔ)上的XML Web service的service端。Service端是實現(xiàn)了Web service邏輯的軟件組件。JAX-RPC 的client接口定義了對Web service的遠程調(diào)用是如何發(fā)生的,以及參數(shù)和返回值(包括collection)是如何序列化的。JAX-RPC 1.1 還支持對安全Web services的基于SSL的驗證。
    · JAXR 1.0 (Java API for XML Registries)。 JAXR 把不同的XML注冊表統(tǒng)一到單個模型。程序員可以利用XML注冊表發(fā)現(xiàn)和查找service,訪問它們的內(nèi)容和元數(shù)據(jù)。例如,你可以用應(yīng)用創(chuàng)建工具訪問指定服務(wù)器上的注冊表,找出服務(wù)器提供了哪些service,設(shè)計SOAP客戶端使用其中的一個service。JARX還使得外部Web service客戶端可以訪問J2EE Web service。
    · SAAJ 1.2 (SOAP with Attachments API for Java)。SAAJ用具有MIME附件的SOAP消息處理客戶端和Web service之間的SOAP消息傳遞。MIME附件既可以用來發(fā)送文檔(對基于文檔的Web service而言)又可以用來發(fā)送傳遞大量數(shù)據(jù)的參數(shù)(對 RPC式的Web service)。 SAAJ還為帶附件的SOAP消息定義了DOM(Document Object model,文檔對象模型)。它允許用戶對如何編碼SOAP消息進行控制, 為重復或復雜的任務(wù)提供了automation hook。
    · JAXP 1.2 (Java API for XML Parsing)。這個包統(tǒng)一了解析和處理XML的各種方法。負責解析的類可以在部署時與運行時之間切換。JAXP 1.2包含了SAX 2.0、 DOM Level 2、和XSLT。
    Web層增強
    不是所有的J2EE 1.4中的Web層增強都與Web service有關(guān)?,F(xiàn)有的核心技術(shù)也得到了更新。
    J2EE 1.4中的Web層最大的增強在于JSP 2.0。JSTL(JavaServer Pages Standard Tag Library)提供了范圍廣泛的通用tag,這些tag極大地方便了Web層的開發(fā)。JSTL還定義了新的表達式語言,這種語言可以用來編寫存儲在任何范圍內(nèi)的Web層JavaBean組件的表達式。下一個技巧說明了如何使用幾種這樣的tag。
    JSP另一個主要的增強是方便地定義定制tag的能力。在JSP 2.0以前的版本中,定義定制tag要求編寫實現(xiàn)Tag接口的類。JSP 2.0仍然支持這種方法,但是它還允許用JSP代碼片斷定義定制tag(在JSP文件中定義),然后在多個地方使用所定義的定制tag。
    EJB 2.1
    J2EE 1.4的另一個重要特點是EJB 2.1,EJB 2.1提供了幾個新的增強。這些包括:
    l 無狀態(tài)會話Bean可以用作Web service端。
    l 新的Timer service可以設(shè)置成定時調(diào)用企業(yè)Bean的ejbTimeout()方法??梢杂眠@個service定時調(diào)用商業(yè)邏輯。
    l EJB-QL增加了對結(jié)果集排序的ORDER BY子句和新的合計函數(shù)(AVG、MAX、MIN、SUM和COUNT)。
    l 現(xiàn)在消息驅(qū)動的Bean可以接受任何類型的消息,而不只是JMS消息(以前的版本只接受JMS消息)?,F(xiàn)在連接器可以直接與MDB通訊,通過適配器把從外部系統(tǒng)傳來的消息翻譯成對MDB的調(diào)用。
    企業(yè)Java BluePrint for J2EE 1.4
    Java BluePrint示例應(yīng)用是J2EE平臺的必要部分。示例應(yīng)用展示了應(yīng)用設(shè)計和開發(fā)的最佳實踐,提供了如何使用J2EE技術(shù)的例子。J2EE 1.4 SDK開發(fā)版本包含了AdventureBuilder,這是新增的J2EE的Web service示例應(yīng)用。它也包含了原有的Java Pet Store和無線游戲示例應(yīng)用。
    其他變化
    J2EE平臺其他的一些重要變化包括:
    l JACC 1.0(Java Authorization Contract for Containers ):允許自由選擇安全和基于角色的授權(quán)提供者。
    l Java Deployment API 1.1: 獨立于服務(wù)器的部署工具。
    l Java Message Service (1.1) 增強
    l J2EE Connectors 1.5:包括了對異步、雙向、多線程連接器的完全支持。
    l J2EE Deployment 1.1:包括了可代替DTD的用XML模式定義的部署描述符,為了向后兼容保留了DTD.
    l J2EE Management 1.0:用Java工具或非Java工具管理企業(yè)資源。
    l 新版JavaMail (1.3),Java Transaction API (JTA 版本1.01B), 和JDBC 3.0
    安裝服務(wù)器
    用J2EE 1.4新的GUI安裝程序安裝服務(wù)器很簡單。所支持的操作系統(tǒng)如下:
    l Solaris SPARC 8
    l Solaris SPARC 9
    l Windows 2000 Pro SP3+
    l Windows XP Pro SP1+
    l Windows 2000 Server SP3+
    l Windows Server 2003
    l Linux RedHat 8
    除了對Linux RedHat的支持以外,只需作很少的修改,甚至不需修改,服務(wù)器就能在許多其他的Linux版本環(huán)境運行。在Linux上安裝的主要要求是J2RE 1.4.1以上的版本。
    在所支持的任意一個操作系統(tǒng)上安裝服務(wù)器的步驟是:
    1. 下載適當?shù)能浖╤ttp://java.sun.com/j2ee/1.4/download-dr.html)。
    2. 運行下載的可執(zhí)行程序。
    在Macintosh OS X 或Darwin上安裝J2EE 1.4 SDK是可能的,盡管沒有宣稱對它們的支持。要在OS X 或Darwin上安裝J2EE 1.4 SDK,你必須有root訪問權(quán)限,J2RE必須是1.4.1以上的版本。
    在OS X 或Darwin上安裝J2EE 1.4 SDK的步驟如下:
    1. 下載SDK的Linux版本(http://java.sun.com/j2ee/1.4/download-dr.html)。下載的文件將是ELF二進制文件。
    2. 用unzip命令行實用程序?qū)嚎s文件解壓到一個空目錄。必須用unzip,用象StuffIt這樣的程序是不行的。在提示符(‘$’)后輸入:
    $ unzip j2eesdk-1_4-dr-linux-eval
    3. 開始安裝,輸入:
    $ java -cp package/PackageFormat.jar:. appserv
    安裝程序會開始安裝SDK。如果偶爾不能看到安裝時顯示的提示,這時可以調(diào)整窗口的大小。
    4. 安裝程序要求輸入Java路徑時,輸入:
    /Library/Java/Home
    安裝程序會給出一個提示信息“server requires JDK 1.4.2. Java 2 version 1.4.1 will work properly”,選擇<continue>。
    5. 安裝程序完成后,還必須做些工作。第一件要做的工作是改變安裝目錄img/bin的訪問權(quán)限。輸入:
    $ chmod a+x /Users/yourname/SUNWappserver/imq/bin
    這里yourname是你的用戶名。(這假定服務(wù)器安裝在/Users/yourname。)
    6. 最后一步要求root訪問權(quán)限。服務(wù)器在/Library/Java/Home/jre/bin內(nèi)查找java和javac,這個目錄還不存在。你必須創(chuàng)建這個目錄,創(chuàng)建這些程序的二進制代碼的符號連接。輸入:
    $ sudo mkdir -p /Library/Java/Home/jre/bin
    $ cd /Library/Java/Home/jre/bin
    $ sudo ln -s /Library/Java/Home/bin/java java
    $ sudo ln -s /Library/Java/Home/bin/javac javac
    sudo命令在第一次運行時會要求你輸入口令。如果你不是系統(tǒng)管理員,你必須以root身份登錄或su到root才能完成這些工作。
    7. 安裝到此已經(jīng)完成。啟動應(yīng)用服務(wù)器,輸入:
    $ cd /Users/yourname/SUNWappserver/bin
    $ asadmin start-domain

    JSTL(THE JAVA STANDARD TAG LIBRARY)
    過去幾年,我們一直自己編寫定制tag實現(xiàn)JSP頁面的顯示邏輯。已經(jīng)建立了幾個流行的tag庫,用來執(zhí)行迭代、處理XML、調(diào)用輔助函數(shù)和訪問Web層JavaBean。這些庫的功能有許多重疊,更主要的是它們互不兼容。
    為了解決這個不兼容問題,JCP就一個共用邏輯和現(xiàn)實tag集達成了一致。這些tag通常在創(chuàng)建Web應(yīng)用的視圖時非常有用。這個新的tag集被稱之為JSTL(JavaServer Pages Standard Tag Library)。
    JSTL不是J2EE 1.4必需的部分,因此,不要求應(yīng)用服務(wù)器供應(yīng)商對它的支持。然而,Sun的J2EE 1.4 SDK還是包含了JSTL,其他的供應(yīng)商也很可能支持它。JSTL并不都是新的---J2EE 1.3容器早就有了JSTL 1.0。JSTL 1.1對JSTL進行了升級,以便利用JSP 2.0和J2EE 1.4的新特點。
    這個技巧說明了如何使用幾個新的JSTL tag。為了使用這些tag,必須了解新的JSP表達式語言(JSP Expression Language,JSP EL)。
    JSP表達式語言
    JSTL的基本思想是,JSP頁面格式化的大多數(shù)數(shù)據(jù)都是JSP Page狀態(tài)的。這些狀態(tài)包括:
    l page、request、session或application范圍的對象。
    l Request參數(shù)
    l JSP隱含對象(例如,pageContext)
    l HTTP header、cookie、和request 參數(shù)
    l Servlet上下文初始化參數(shù)
    關(guān)于JSP頁面可以使用的數(shù)據(jù)的完整列表,請看J2EE 1.4教程(http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html)。
    用戶定義的JavaBean(包括JavaBean和對企業(yè)Bean的引用)可以綁定到任何范圍的狀態(tài)變量。如果你在一個頁面上用代碼片斷創(chuàng)建了一個新的Bean,你只需使用<jsp:useBean>tag。否則,只能在EL表達式中用名稱訪問Bean。JSP 2.0表達式語言使用JavaBean的命名機制操縱所連接的Bean。這個語言也為JSP tag中所用的表達式定義了語法。JSP頁面編譯器把分隔符${和}之間的JSP語句看成表達式。
    解釋JSP表達式是如何工作的最容易的方法是用例子,下面我們就看一看這個技巧的示例代碼。
    示例代碼
    示例代碼是一個使用了兩個JavaBean的Web應(yīng)用。JavaBean ColorScheme是一個映照,這個映照的鍵名是顏色名稱,鍵值是ColorBean對象。ColorBean有名稱(用這個名稱注冊到ColorScheme),red、green和blue顏色組件。ColorScheme繼承了javax.util.TreeMap。對ColorScheme迭代按名稱順序取得它的所有ColorBean對象。ColorBean繼承了java.awt.Color,因此,在JSP EL中可以使用它繼承的所有方法(包括JavaBean屬性)。
    應(yīng)用的歡迎頁面,index.jsp,操作有幾百個ColorBean對象的ColorScheme對象。這些對象的數(shù)據(jù)來源于Web歸檔文件中的文本文件(rgb.txt)。文件中的數(shù)據(jù)有下面的格式:
    R G B Name
    240 248 255 AliceBlue
    index.jsp前面的一段代碼初始化ColorScheme Bean,以名稱“scheme”用session狀態(tài)存儲這個Bean,如下所示:
    <jsp:useBean id="scheme"
    class="com.elucify.tips.dec2003.ColorScheme"
    scope="session">

    <!-- Initialize this bean -->
    <%
    // Open a stream to the init file
    InputStream stream =
    application.getResourceAsStream("/rgb.txt");

    // Get a reference to the scheme bean
    ColorScheme colorScheme =
    (ColorScheme)pageContext.findAttribute(
    "scheme");

    // Load colors from stream
    try {
    colorScheme.load(stream);
    } catch (IOException iox) {
    throw new JspException(iox);
    }
    %>
    </jsp:useBean>

    (注意,如果使用tag文件代替代碼片斷,這個應(yīng)用會更好。Tag文件是JSP 2.0的新特點,將在以后的使用技巧中介紹。)
    上面的代碼典型地使用了<jsp:useBean>tag初始化這個tag所創(chuàng)建的Bean。在index.jsp對scheme Bean初始化并把它放在session范圍內(nèi)以后,其他JSP頁面就可以對這個scheme Bean的數(shù)據(jù)進行格式化。
    打印ColorScheme集大小的JSP代碼可能是下面這個樣子:
    <%
    ColorScheme scheme =
    (ColorScheme)session.getAttribute("scheme");
    out.println("The current color scheme has " +
    scheme.size() + " colors.");
    %>
    使用JSTL和JSP表達式語言,這個任務(wù)會更簡單,可讀性也更強。示例頁面Count.jsp就是這樣做的:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions"
    prefix="fn" %>

    The current color scheme has ${fn:length(scheme)} colors.

    第一行為JSTL函數(shù)包中的tag定義了前綴fn(關(guān)于這個包的更多信息,請看教程)。第二行是包含了表達式${fn:length(scheme)}的模板文本。JSP頁面在運行時用scheme對象的長度代換這個表達式。因為scheme是一個映照,其長度返回的是其中條目的個數(shù)。Length函數(shù)對所有Collection類型都是可用的。
    更有趣的示例是示例頁面ListColorNames.jsp,它列出了ColorScheme bean中的所有顏色的名稱:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"
    prefix="c" %>

    This is a list of the names of all of the colors
    in the current color scheme:

    <ol>
    <c:forEach var="entry" items="${scheme}">
    <li>${entry.key}</li>
    </c:forEach>
    </ol>
    行<%@taglib%>定義c為JSTL Core tag的前綴。這個頁面的其他部分定義了一個有序列表。使用<c:forEach>對scheme集中的所有條目迭代。所有Collection類都可用ForEach tag。接著把在var屬性中給出名稱的page變量賦給這個集中的每個值。
    當forEach tag的item屬性中的表達式的值是java.util.Map時,在var中命名的變量被設(shè)置為類型是java.util.Map.Entry的item。這時,迭代變量被稱為entry,因此,用表達式${entry.key}取得鍵名。
    在下面的例子中你會看到,可以用表達式${entry.value}得到每個entry的值。這是因為java.util.Map.Entry對象有g(shù)etKey和getValue方法,表達式語言遵守JavaBean的命名約定。
    通常,JSP EL表達式${a.b.c.d}是用代碼a.getB().getC().getD()來計算的。這種表達式是對JavaBean屬性的相繼調(diào)用的簡化。
    示例頁面ShowColors.jsp顯示了scheme中包含的顏色,如下所示:

    This table demonstrates all of the colors
    in the current scheme.

    <TABLE BORDER="1" BGCOLOR="WHITE">
    <TR><TH>Name</TH><TH>Sample Text</TH><TH>Color Swatch</TH>
    <TH>Hex Code</TH><TH>Opposite Color</TH></TR>

    <!-- Loop over color entries in the scheme -->
    <c:forEach var="entry" items="${scheme}">

    <!-- Set two variables to improve -->
    <!-- readability of HTML below -->
    <c:set var="color"
    value="${entry.value.rgbHex}"/>
    <c:set var="name"
    value="${entry.key}"/>

    <TR>
    <TD>${name}</TD>
    <TD><FONT COLOR="${color}">${name}</FONT></TD>
    <TD BGCOLOR="${color}">${name}</FONT></TD>
    <TD>${color}</TD>
    <TD BGCOLOR="${entry.value.rgbComplement}">
    ${name}</TD>
    </TR>

    </c:forEach>

    如上所示,這個例子使用了<c:forEach>。兩個 <c:set> tag 把page屬性color和name分別設(shè)置到顏色和顏色名稱的hex表示。按照JavaBean命名約定,下面的行:
    <c:set var="color" value="${entry.value.rgbHex}"/>
    等效于Java代碼
    ColorBean cb = (ColorBean)entry.getValue();
    pageContext.setAttribute("color", cb.getRgbHex());
    模板文本中使用的color和name變量用來創(chuàng)建JSP頁面輸出中的table行。不用使用<c:get>tag,因為EL變量的值總是可以作為表達式引用,就象${color}這樣。
    最后一個示例頁面,ColorNameGrid.jsp,給出了JSTL tag更多的用法。它說明了如何使用JSTL tag進行下面的工作:
    l 訪問request參數(shù)
    l 用兩個不同的方法執(zhí)行有條件輸出
    l 使用EL比較和運算
    l 使用EL算術(shù)函數(shù)
    ColorNameGrid.jsp以多列的table打印ColorScheme中所有顏色的名稱。列數(shù)在1到10之間,根據(jù)request參數(shù)cols確定。如果列數(shù)超出了范圍就產(chǎn)生錯誤信息。
    ColorNameGrid.jsp的代碼如下:
    <!-- Initialize local variables -->
    <c:set var="cols" value="${param['cols']}"/>
    "c:set var="col" value="0"/>

    <!-- use the "choose" element to limit -->
    <!-- number of columns -->
    <c:choose>
    <c:when test="${cols > 0 && cols <= 10}">

    This is a grid of the names of all of the
    colors in the current color scheme:
    <p>

    <TABLE BORDER="0" BGCOLOR="#404040">
    <TR>
    <c:forEach var="entry" items="${scheme}">
    <c:set var="color" value="${entry.value}"/>

    <TD><FONT COLOR="${color.rgbHex}">${entry.key}
    </FONT></TD>

    <c:set var="col" value="${col+1}"/>

    <c:if test="${(col % cols) == 0}">
    </TR><TR>
    </c:if>

    </c:forEach>
    </TR>

    </TABLE>
    </c:when>

    <c:otherwise>
    <!-- Complain about unreasonable input -->

    ${cols} is an unreasonable number of columns.
    <p>
    Click <a href="index.jsp">here</a> to try again.
    </c:otherwise>

    </c:choose>
    第一個<c:set>tag取得request參數(shù)cols,把它賦給page屬性(屬性名也是cols),如下所示:
    <c:set var="cols" value="${param['cols']}"/>
    (這個頁面也可以不用page屬性cols,在需要的地方使用${param['cols']}。定義page屬性是為了使該頁面的可讀性更強。)
    第二個<c:set>tag用值1對page屬性col初始化。這個變量用來分隔列。
    <c:choose>tag很象Java中的if-else語句。<c:when>tag就象if and else if語句,<c:otherwise>tag就象最后的else語句。<c:choose>tag包含了一系列的<c:when>tag,每一個<c:when>tag都有一個包含表達式的test屬性。第一個<c:when>tag體的test表達式返回true,這個tag體執(zhí)行后包含在輸出中。如果沒有一個<c:when>的test表達式返回true,就執(zhí)行<c:otherwise>tag體,將結(jié)果送到輸出。
    在這個例子中,第一個<c:when>tag的test表達式是邏輯表達式:
    <c:when test="${cols > 0 && cols <= 10}">
    這里所用的變量cols是在上面討論的第一個<c:set>tag中定義的page屬性。如果所要求的列數(shù)在1到10之間,這個頁面就會產(chǎn)生一個顏色的table。否則(在<c:otherwise> tag中),這個頁面就顯示一個提示:
    <c:otherwise>
    <!-- Complain about unreasonable input -->
    ${cols} is an unreasonable number of columns.<p>
    Click <a href="index.jsp">here</a> to try again.
    </c:otherwise>
    在第一個<c:when>tag體內(nèi)的是建table的代碼。<c:forEach>tag對table內(nèi)的所有color迭代,把page屬性color賦給ColorScheme中的每個ColorBean:
    <c:if test="${(col % cols) == 0}">
    </TR><TR>
    </c:if>
    每個顏色名用它所代表的顏色打印出來,用表達式(${color.rgbHex})從color Bean得到顏色的hex表示。變量col在循環(huán)的末尾加1,以便正確分行:
    <c:set var="col" value="${col+1}"/>
    最后,循環(huán)在一行結(jié)束時用算術(shù)表達式和<c:if>tag強迫分行。
    上面的例子僅僅使我們對JSTL tag能做些什么有個初步印象。JSTL tag可以用來處理URL、傳遞請求、包含其他Web資源的內(nèi)容、處理XML、創(chuàng)建國際化內(nèi)容、執(zhí)行SQL查詢,還有很多。利用JSTL提供的強大的新工具可以使JSP的開發(fā)更容易。

    運行示例代碼
    下載以上兩個技巧的示例代碼的歸檔文件(http://java.sun.com/developer/EJTechTips/download/ttdec2003.war)。應(yīng)用上下文的root是ttdec2003。下載的war文件還包含了這個示例應(yīng)用的全部源代碼。
    你可以用deploytool程序或admin console在J2EE 1.4應(yīng)用服務(wù)器上部署應(yīng)用歸檔文件(ttdec2003.war)。你也可以用asadmin命令部署應(yīng)用,如下所示:
    asadmin deploy install_dir/ttdec2003.war
    用war文件所在的目錄代替install_dir。
    可以用http:// ://localhost:8000/ttdec2003訪問應(yīng)用。
    對于與J2EE 1.4兼容的其他應(yīng)用服務(wù)器,用你所用的服務(wù)器部署工具把應(yīng)用部署到你的平臺上。
    你應(yīng)該在啟動應(yīng)用時看到下面的頁面:


    posted on 2006-03-09 11:10 hopeshared 閱讀(1071) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲人成免费电影| 亚洲国产欧美一区二区三区| 免费无毒a网站在线观看| 5g影院5g天天爽永久免费影院| 中国好声音第二季免费播放| 日韩精品免费一区二区三区| 亚洲国产香蕉碰碰人人| 国产免费久久精品99久久| 国产成人免费A在线视频| 91亚洲性爱在线视频| 久久免费国产精品| 免费吃奶摸下激烈视频| 亚洲精品av无码喷奶水糖心| 91免费播放人人爽人人快乐| 亚洲色成人网一二三区| 一区二区在线免费观看| 亚洲第一AAAAA片| 精品97国产免费人成视频| 亚洲日本va午夜中文字幕久久| 亚洲综合久久成人69| 国产在线精品免费aaa片| 亚洲永久精品ww47| 国产精品99爱免费视频| 亚洲视频在线一区二区| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲第一区精品观看| 免费无码AV一区二区| 亚洲av麻豆aⅴ无码电影| 免费夜色污私人影院网站电影| 亚洲黄色片免费看| 亚洲国产夜色在线观看| 99久久久精品免费观看国产| 亚洲a视频在线观看| 成年18网站免费视频网站| 亚洲国产精品无码第一区二区三区| 两个人的视频www免费| 亚洲国产精品一区第二页 | 亚洲精品无码专区在线在线播放 | 99视频精品全部免费观看| 亚洲综合国产精品| 在线人成精品免费视频|