欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
開(kāi)發(fā)基于JSR 168的開(kāi)發(fā)和部署
輕松進(jìn)行Java Portlets
  ——開(kāi)發(fā)基于JSR 168的開(kāi)發(fā)和部署
瀏覽次數: 1495 時(shí)間:2004-10-22
作者:Prakash Malani

  摘要
  Portlet是生成片段(遵守特定規范的標記語(yǔ)言(如HTML、XML)的片段)的Web組件。片段再合成一個(gè)完整的文檔。本文介紹了關(guān)于Java Portlet的Java Specification Request (JSR) 168規范。它說(shuō)明了如何使用BEA WebLogic Workshop 8.1 SP2來(lái)創(chuàng )建Java Portlet,以及如何將這些portlet部署到BEA WebLogic Portal 8.1 Sp2上。我將介紹一些關(guān)鍵概念,如門(mén)戶(hù)、桌面和portlet,并詳細描述多種portlet模式和窗口狀態(tài)。我還將介紹如何使用Workshop來(lái)設計、實(shí)現、配置和執行portlet。


  JSR 168定義了有關(guān)Java Portlet的規范。門(mén)戶(hù)是一個(gè)Web應用程序和一個(gè)portlet的聚合。Portlet容器運行portlet,并管理它們的生命周期。JSR 168定義了portlet與portlet容器之間的契約,它沒(méi)有定義portlet容器與門(mén)戶(hù)之間的契約。門(mén)戶(hù)的實(shí)現留給了門(mén)戶(hù)供應商。

  BEA WebLogic門(mén)戶(hù)
  BEA WebLogic Portal (8.1 SP2)的當前版本支持不同類(lèi)型的portlet:JSP/HTML portlet、Java PageFlow portlet、Struts portlet和Java portlet,將來(lái)還會(huì )支持其他portlet,如Web Services for Remote Portlets (WSRP)。我們將著(zhù)重介紹Java portlet。

  WebLogic Portal提供了JSR 168中未描述的門(mén)戶(hù)功能,包括但不限于:書(shū)和頁(yè)面中portlet的組織、多渠道支持和使用skin、skeleton和shell定制。

  為了能夠繼續下去,在進(jìn)行下一部分之前,請先完成以下內容:
   ·使用WebLogic Domain Configuration Wizard創(chuàng )建一個(gè)門(mén)戶(hù)域(如JSR168PortalDomain)。
   ·使用WebLogic Workshop創(chuàng )建一個(gè)使用上面所建立域的門(mén)戶(hù)應用程序(如JSR168PortalApp)。
   ·在門(mén)戶(hù)應用程序內創(chuàng )建一個(gè)門(mén)戶(hù)Web項目(如JSR168PortalWebProject)。
   ·在門(mén)戶(hù)Web項目中創(chuàng )建一個(gè)WebLogic Portal .portal文件(如JSR168.portal)。
   ·啟動(dòng)服務(wù)器實(shí)例。

  創(chuàng )建您的第一個(gè)Java Portlet
  下面的步驟描述了如何創(chuàng )建您的第一個(gè)JSR 168 portlet。
  ·在門(mén)戶(hù)Web項目(如JSR168PortalWebProject)中,使用WebLogic Workshop為portlet(入FirstPortlet)創(chuàng )建一個(gè)新文件夾。
  ·在新文件夾內使用Wizard通過(guò)創(chuàng )建相應的.portlet文件創(chuàng )建一個(gè)新portlet(如Firstportlet)。
  ·選擇portlet類(lèi)型為Java Portlet。
  ·指定標題(如First)。
  ·指定定義標簽(如first)。
  ·指定類(lèi)名稱(chēng)(如com.malani.examples.portlets.jsr168.FirstPortlet)。
  ·打開(kāi)門(mén)戶(hù)(如JSR168.portal)。
  ·將portlet(如Firstportlet)拖放到門(mén)戶(hù)中的頁(yè)面上(如JSR168.portal)。
  ·運行.portal文件進(jìn)行測試。

  您的第一個(gè)JSR 168 portlet已經(jīng)成功運行了!但向導在背后作了些什么呢?
  ·它創(chuàng )建了一個(gè)特定于WebLogic Workshop和WebLogic Portal的.portlet文件。.portlet文件構成了與特定于Workshop和WebLogic Portal的.portal文件的契約。
  ·向導創(chuàng )建了一個(gè).java文件(如com.malani.examples.portlets.jsr168.FirstPortlet.java),該文件放置在WEB-INF/src目錄中。
  ·向導創(chuàng )建了一個(gè)WEB-INF/portlet.xml配置文件,并為portlet在文件中插入了一個(gè)條目。該portlet的條目看上去如下:

<portlet>
<description>Description goes here</description>
<portlet-name>first</portlet-name>
<portlet-class>com.malani.examples.portlets.jsr168.FirstPortlet
</portlet-class>
<portlet-info>
<title>First</title>
</portlet-info>
</portlet>


  Java Portlet類(lèi)
  在該示例中,向導生成的Portlet Java文件擴展了javax.portlet.GenericPortlet類(lèi)。GenericPortlet類(lèi)實(shí)現了javax.portlet.Portlet接口。圖1是一個(gè)Unified Modeling Language (UML)類(lèi)圖,描述了這些關(guān)系。通過(guò)直接實(shí)現portlet接口,可以編寫(xiě)一個(gè)portlet。然而,GenericPortlet是一個(gè)創(chuàng )建portlet的更方便方法。首先,我們看一下portlet生命周期、portlet模式和window狀態(tài)。


圖 1

  Portlet生命周期
  為了成功地創(chuàng )建portlet,您必須遵照portlet生命周期。javax.portlet.Portlet接口中的方法定義了該生命周期,這些生命周期方法是init()、render()、processAction()和destroy()。當部署portlet的實(shí)例時(shí)調用init()方法。它用于獲得所需的任何昂貴資源(如后臺連接),并執行其他一次性活動(dòng)。當portlet的實(shí)例被撤銷(xiāo)部署時(shí),使用destroy()方法來(lái)釋放這些資源。

  Portlet規范清晰區別render請求和動(dòng)作請求。圖2描述了portlet請求和響應的一個(gè)UML類(lèi)圖。門(mén)戶(hù)頁(yè)面上的render請求會(huì )導致對所頁(yè)面上的每個(gè)portlet上調用render()方法,當用戶(hù)在特定portlet上調用某個(gè)動(dòng)作(通常是HTML表單提交)時(shí),將會(huì )調用該portlet的processAction()方法。這樣,用戶(hù)的動(dòng)作請求轉換為processAction()方法的一次調用和render()方法的多次調用。


圖 2

  圖3是一個(gè)序列圖,說(shuō)明了調用processAction()方法的效果,以及為同一頁(yè)面上的portlet進(jìn)行后續render()方法的調用。關(guān)于更多信息,請參閱關(guān)于處理動(dòng)作的一節。


圖 3

  有兩種重載的init()方法,一個(gè)沒(méi)有參數,另一個(gè)有一個(gè)javax.portlet.PortletConfig類(lèi)的實(shí)例。注意:關(guān)于init(PortletConfig)有一個(gè)特殊的caveat。調用super.init(aPortletConfig)失敗將導致一個(gè)NullPointerException。所包含的源代碼示例中的Init portlet說(shuō)明了這種行為(源代碼可以在www.sys-con.com/weblogic/source.cfm中找到)。

  Portlet模式
  JSR 168定義了三種Portlet模式:VIEW、EDIT和HELP。一個(gè)portlet實(shí)例在任何時(shí)候都可以恰巧在一種 portlet模式下。其他自定義portlet模式(如配置和源)都是可能的。VIEW模式是默認的模式。Portlet規范建議EDIT模式允許portlet用戶(hù)定制portlet實(shí)例,以及HELP模式顯示關(guān)于portlet的用法信息。Portlet必須支持VIEW模式,但在portlet中對EDIT模式和HELP模式的支持是可選的。例如,portlet First portlet示例不支持EDIT模式和HELP模式。

  window狀態(tài)
  JSR 168定義了三種Window狀態(tài):NORMAL、MINIMIZED和MAXIMIZED。Portlet實(shí)例任何時(shí)候都可以恰好是一種window狀態(tài)。其他自定義window狀態(tài)(如半頁(yè))也是可能的。在NORMAL狀態(tài)下,portlet占了屏幕區的一小部分。屏幕狀態(tài)與其他portlet共享。在MINIMIZED狀態(tài)下,portlet的內容被隱藏。在MAXIMIZED狀態(tài)下,portlet的內容占屏幕區的大部分。其他共享同一頁(yè)面的portlet在MAXIMIZED狀態(tài)下被隱藏。例如,portlet First示例支持所有三種window狀態(tài)。

  GenericPortlet類(lèi)
  您創(chuàng )建的大多數portlet將會(huì )擴展javax.portlet.GenericPortlet類(lèi),而不是直接實(shí)現javax.portlet.Portlet接口。GenericPortlet類(lèi)實(shí)現了render()方法。如果portlet的window狀態(tài)被最小化,那么render()方法不能做任何事情。如果portlet的window狀態(tài)不是最小化,那么render()方法設置在portlet.xml文件中指定的標題,并調用doDispatch()方法。根據Portlet模式, doDispatch()方法適當地調用doView()、doEdit()和doHelp()方法。這樣,由于GenericPortlet類(lèi)幫助實(shí)現render()方法,并且提供doView()、doEdit()和doHelp()方法來(lái)覆蓋,因此GenericPortlet類(lèi)比Portlet接口更便于擴展。

  考慮一下First portlet示例。FirstPortlet類(lèi)擴展了GenericPortlet,FirstPortlet改寫(xiě)了doView()方法。

public void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
response.setContentType("text/html");
response.getWriter().write("<p>Hello World</p>");
}


  注意:調用setContentType()方法前調用getWriter()方法會(huì )導致java.lang.IllegalStateException。

  實(shí)現Portlet模式
  VIEW模式是強制的,但EDIT和HELP模式是可選的。為了實(shí)現EDIT和HELP portlet模式,需要在portlet類(lèi)中實(shí)現適當的doEdit()和doHelp()方法。請參考包含在源代碼示例(本文的源代碼可以在www.sys-con.com/wldj/sourcec.cfm找到)中的portlet Mode。此外,必須在portlet.xml中如下配置各模式:

<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>


  注意:修改portlet.xml配置文件,但不實(shí)現portlet類(lèi)中的相應方法,會(huì )導致javax.portlet.PortletException。

  實(shí)現window狀態(tài)
  JSR 168沒(méi)有描述禁用window狀態(tài)支持的方法。然而,WebLogic Portal實(shí)現了對它們的禁用。為了禁用portlet對window狀態(tài)的支持,需要在weblogic-portlet.xml文件中排除window狀態(tài):

<portlet>
<portlet-name>state</portlet-name>
<supports>
<mime-type>text/html</mime-type>
<excluded-window-state>minimized</excluded-window-state>
<excluded-window-state>maximized</excluded-window-state>
</supports>
</portlet>


  請參考源代碼示例中的portlet State。

  包含JavaServer Pages (JSPs)
  考慮portlet First的doView()方法,該方法獲得了Writer的實(shí)例,并直接輸出HTML片段。由于多種原因(如為了達到Java邏輯與HTML視圖表現的分離),往往不推薦輸出直接的HTML片段。推薦的方法是使用JSP來(lái)顯示視圖。portlet類(lèi)中的方法執行業(yè)務(wù)邏輯、設置render參數以及包含JSP。為了包含一個(gè)特定的JSP,應首先獲得PortletContext。從PortletContext實(shí)例中,通過(guò)調用getRequestDispatcher()方法獲得一個(gè)PortletRequestDispatcher的實(shí)例。通過(guò)調用include()方法來(lái)包含JSP。例如:

// execute the necessary logic here...
PortletRequestDispatcher aDispatcher =
getPortletContext().getRequestDispatcher(
"/IncludePortlet/includeView.jsp"
);
aDispatcher.include(aRequest, aResponse);


  注意:在執行render()方法時(shí),portlet可能只使用一個(gè)PortletRequestDispatcher對象。
  請參考包含在源代碼中的portlet Include。JSP頁(yè)面(如includeView.jsp)不包含根HTML標簽(如<html>、<title>和<body>),因為這些標簽由門(mén)戶(hù)框架提供。JSP頁(yè)面只包含顯示portlet所必需的HTML片段。

  處理動(dòng)作
  在一個(gè)標準的Web應用程序中,一個(gè)HTML表單提交將導致執行一些業(yè)務(wù)邏輯。業(yè)務(wù)處理的結果,要么作為屬性而被設置在請求或會(huì )話(huà)中并轉發(fā),要么包含到下一個(gè)JSP。

  在一個(gè)JSR 168 portlet中,一個(gè)HTML表單的動(dòng)作URL應該是什么樣呢?JSR 168定義了一個(gè)JSP標簽庫,稱(chēng)為portlet taglib。HTML表單的動(dòng)作URL可以使用actionURL portlet標簽生成。例如(請參考favoriteColorEdit.jsp文件):

<form action="<portlet:actionURL/>" method="post">
...
</form>


  提交該HTML表單將會(huì )導致調用portlet的processAction(ActionRequest aRequest, ActionResponse aResponse)方法。像通常一樣,可以通過(guò)調用request對象的getParameter()方法來(lái)獲得表單參數。注意:通過(guò)提交表單調用動(dòng)作,但portlet中卻沒(méi)有processAction()方法,將會(huì )導致javax.portlet.PortletException。

  processAction()方法設置response對象中的值。不要使用ActionRequest或ActionResponse對象的setAttribute()方法。值不會(huì )從processAction()傳遞到render()方法,而且在JSP中是不可用的。相反要使用ActionResponse對象的setRenderParameter()方法。這些render參數將對所有后續render請求可用,這一點(diǎn)與典型的Web應用程序請求屬性很不相同。典型的Web application請求屬性只對于一個(gè)請求可用。另一方面,render請求參數對于許多后續render請求可用。render參數保持可用直到值被動(dòng)作的重新執行顯式地修改或刪除。

  考慮portlet FavoriteColor。它在VIEW模式顯示了一個(gè)用戶(hù)偏好的顏色,但是可以在EDIT模式下更改。在EDIT模式下提交偏好的顏色選擇將調用processAction()方法。該方法獲得偏好的顏色請求參數,并將其設置為render參數。這樣,偏好的的顏色render參數將在所有后續render請求中都可用。

  所呈現的參數是怎樣顯示在JSP上的呢?應使用來(lái)自portlet標簽庫的defineObjects標簽來(lái)定義portlet對象。該標簽使renderRequest、renderResponse和portletConfig portlet對象在頁(yè)面中可用。參數通過(guò)調用renderRequest對象的getParameter()方法來(lái)顯示。請參考與所包含的源代碼示例中的favoriteColorView.jsp。

  portlet FavoriteColor也展示了其他概念。第一個(gè)是如何在processAction()方法中用編程的方法改變portlet模式。調用ActionResponse對象的setPortletMode()方法來(lái)修改portlet模式。第二個(gè)概念是如何使用一個(gè)HTML鏈接來(lái)修改portlet模式。該鏈接使用來(lái)自portlet標簽庫的renderURL標簽生成。根據希望的portlet模式指定portletMode屬性的值。請參考源代碼示例中的FavoriteColorPortlet類(lèi)和favoriteColorView.jsp頁(yè)面。

  Portlet Preferences
  Portlet Preferences(Portlet首選項)是portlet的基本配置數據。一個(gè)preference是一個(gè)“名稱(chēng)和值”對。名稱(chēng)的類(lèi)型是一個(gè)字符串,而值的類(lèi)型是字符串或字符串數組。Portlet Preference不適于存儲任意數據。portlet容器為portlet preferences提供持久性。在WebLogic Portal中,preference的持久性只在下面兩個(gè)條件都為真時(shí)才起作用:
  ·門(mén)戶(hù)運行在桌面中,而不是DOT門(mén)戶(hù)模式。
  ·用戶(hù)已經(jīng)登錄。

  桌面與DOT門(mén)戶(hù)模式
  在WebLogic Workshop中創(chuàng )建.portal文件時(shí),像書(shū)、頁(yè)面和portlet等項都可以被拖放到.portal文件中,.portal文件能夠直接從Workshop內運行。然而,某些功能,如preferences的存儲,在這種DOT門(mén)戶(hù)模式下運行時(shí)是不可用的(DOT門(mén)戶(hù)模式也稱(chēng)為單文件模式(Single File Mode))。

  其他模式稱(chēng)為桌面模式。創(chuàng )建一個(gè)門(mén)戶(hù)時(shí)使用Portal Administrator。在門(mén)戶(hù)內,一個(gè)桌面被創(chuàng )建。像圖書(shū)、頁(yè)面和portlet等項被創(chuàng )建,并放置在桌面中。在這種模式下,某些功能,像preferences的存儲,是可用的(桌面模式也被稱(chēng)為流模式(Streamed Mode))。

在繼續討論前,先創(chuàng )建一個(gè)桌面:
  啟動(dòng)Portal Administration(譬如,http://localhost:7001/JSR168PortalAppAdmin/)。一種啟動(dòng)Portal Administration的方法是直接從Workshop中啟動(dòng)。選擇Portal菜單,選中Portal Administration菜單項。
  ·登錄進(jìn)Portal Administration。
  ·創(chuàng )建一個(gè)新門(mén)戶(hù)(譬如,JSR168)。
  ·在門(mén)戶(hù)中,創(chuàng )建一個(gè)新桌面(如d1)。
  ·將LoginPortlet添加到桌面的一個(gè)頁(yè)面中。
  ·將ContactPortlet添加到桌面的一個(gè)文件中。

  Portlet Preferences示例
  Contact portlet演示了Portlet Preferences。Portlet Preferences可以是靜態(tài)的或動(dòng)態(tài)的。靜態(tài) preferences與portlet一起在portal.xml文件中指定。例如,ContactPortlet具有一個(gè)成為contact-preference的 preferences。contact-preference的默認值也被指定:

<portlet-preferences>
<preference>
<name>contact-preference</name>
<value>Email</value>
</preference>
</portlet-preferences>


  動(dòng)態(tài) preferences不在portlet.xml配置文件中預定義。當portlet運行時(shí),這些preferences被存儲和讀取。在運行期間,一個(gè)javax.portlet.PortletPreferences接口的實(shí)例包含這些preferences。該實(shí)例通過(guò)調用PortletRequest對象的getPreferences()方法獲得。特定preferences的值通過(guò)調用preferences實(shí)例上的getValue()方法來(lái)獲得。

  調用preferences實(shí)例的setValue()方法會(huì )更新一個(gè)preferences值。然而,需要一個(gè)額外的步驟來(lái)提交這些修改。preferences實(shí)例的store()方法被調用來(lái)使preferences持久化。preferences只能在processAction()方法中進(jìn)行修改。如果在processAction()方法中沒(méi)有調用store()方法,任何對preferences實(shí)例的修改都會(huì )被丟棄。注意:就如前面提到的,如果用戶(hù)沒(méi)有登錄或門(mén)戶(hù)處于DOT門(mén)戶(hù)模式,那么調用store()方法將會(huì )導致一個(gè)運行時(shí)異常。

  在portlet和servlet之間有很多相似點(diǎn)。然而,它們也存在著(zhù)重要區別。portlet規范建立在servlet規范之上。portlet容器存在于servlet容器中。就像servlet部署在一個(gè)Web應用程序中,portlet也是如此。Servlet和Web應用程序使用portlet.xml文件進(jìn)行配置。一個(gè)servlet具有顯式的生命周期:init()、doGet()、doPost()等。類(lèi)似地,一個(gè)portlet也具有顯式的生命周期:doView()、doEdit()、processAction()等。servlet和portlet類(lèi)的方法必須以安全線(xiàn)程的方式編碼。

  然而,也存在著(zhù)重要的區別。Servlet被允許進(jìn)行include、forward和redirect操作;然而portlet只被允許進(jìn)行include操作。Servlet能夠呈現一個(gè)完整的頁(yè)面,但portlet只提交頁(yè)面片段。portlet具有嚴格定義的portlet模式和Window狀態(tài),這方面不像servlet。Portlet具有更正式的請求,對render請求和動(dòng)作請求進(jìn)行處理,它們也具有preferences。portlet并不是servlet!

  結束語(yǔ)
  本文通過(guò)使用一個(gè)簡(jiǎn)單的向導描述portlet的創(chuàng )建而開(kāi)始,并說(shuō)明了portlet的生命周期以及portlet類(lèi)實(shí)現的內部工作方式,描述了portlet.xml配置文件和相應的weblogic-portlet.xml配置文件的結構和語(yǔ)義。對各種概念,如portlet模式和window狀態(tài),本文也進(jìn)行了解釋。本文演示了portlet標簽庫的用法和portlet中的表單處理。最后,我介紹了如何使用portletpreferences。理解了本文所介紹的這些知識和概念,您就可以在創(chuàng )建和部署自己的強大portlet的道路上前進(jìn)了。

  致謝
  感謝Subbu Allamaraju、Max Cooper、Steve Ditlinger、David Lu、Roshni Malani和Alex Toussaint,他們仔細閱讀了這篇文章,并提供了有價(jià)值的反饋意見(jiàn)。

  參考資料
  · 要討論這篇文章、并提問(wèn)問(wèn)題,從這里開(kāi)始: www.bartssandbox.com。需要免費成員資格。
  · 下載、閱讀JSR 168:www.jcp.org/en/jsr/detail?id=168
  · WebLogic Portal文檔的起始點(diǎn):e-docs.bea.com/wlp/docs81/index.html
  · 建立Workshop Help的Java Portlet部分:e-docs.bea.com/workshop/docs81/doc/en/core/index.html
  · 用WebLogic Portal 8.1開(kāi)發(fā)JSR 168 Portlet:dev2dev.bea.com/products/wlportal81/articles/JSR168.jsp
  · Web Services for Remote Portlets (WSRP)規范:www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp
  · 嘗試一下WSRP:dev2dev.bea.com/codelibrary/code/wsrp_supportkit.jsp
  · Single File Mode和Streamed Rendering Mode:單擊這里!
  · 有關(guān)Portlet規范上的文章:
- 介紹Portlet規范,第1部分:
www.javaworld.com/javaworld/jw-08-2003/jw-0801-portlet_p.html
-介紹Portlet規范,第2部分:
www.javaworld.com/javaworld/jw-09-2003/jw-0905-portlet2_p.html
  · 對JSR 168白皮書(shū)的介紹:?jiǎn)螕暨@里!
  · Java Passion Portlet演講筆記:www.javapassion.com/j2eeadvanced/Portlet4.pdf

  關(guān)于作者
  Prakash Malani在架構、設計和開(kāi)發(fā)面向對象的軟件方面具有廣泛的經(jīng)驗,曾經(jīng)在很多應用領(lǐng)域從事過(guò)軟件開(kāi)發(fā),如娛樂(lè )、零售、機械、通信和互動(dòng)電視等。他實(shí)踐和指導著(zhù)很多領(lǐng)先的技術(shù),如J2EE、UML和XML?!  rakash已經(jīng)在多個(gè)行業(yè)領(lǐng)先的出版物上發(fā)表了多篇文章。(更多內容

  源代碼
  源代碼-Zip文件
  英文原文:http://www.sys-con.com/story/?storyid=45565&DE=1

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
WebLogic portal中實(shí)現身份驗證
一些Portal門(mén)戶(hù)的介紹 - 專(zhuān)注開(kāi)源
Liferay系列文章(三)Portal產(chǎn)品介紹--商業(yè)Portal產(chǎn)品
實(shí)現AJAX風(fēng)格的Portal
Introducing the eXo Platform
基于 Struts 2 構建 WebSphere Portal 上的 Portlet 應用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久