亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JSP標(biāo)簽庫(kù)介紹

瀏覽:50日期:2024-07-04 16:04:19

我用JSP和ASP編程已經(jīng)有一段頗長(zhǎng)的時(shí)間了,在這兩種服務(wù)器端的編程解決方案中,我越來(lái)越覺(jué)得JSP的功能要比ASP強(qiáng)大得多。我為什么要把JSP選作首選服務(wù)器端web應(yīng)用程序開(kāi)發(fā)工具呢?當(dāng)然,JSP迷人的特性和功能不少,但JSP的標(biāo)簽庫(kù)是讓我做出這一決定的最重要誘因之一。;

為什么這樣說(shuō)呢?原因有兩個(gè)方面:維護(hù)和開(kāi)發(fā)的速度。服務(wù)器端腳本語(yǔ)言其實(shí)就像是開(kāi)發(fā)Internet的熔爐。在一個(gè)服務(wù)器頁(yè)面上,你可以很方便地混合各種不同的腳本方法和對(duì)象。這種頁(yè)面簡(jiǎn)直就是建筑Web的混凝土。正是這種“材料的混合給予了服務(wù)器端腳本強(qiáng)大的信息處理能力。它可以讓服務(wù)器端程序設(shè)計(jì)人員開(kāi)發(fā)出動(dòng)態(tài)的、靈活的Web頁(yè)面。但是,另一方面,腳本的自由混合也有其缺點(diǎn),那就是維護(hù)起來(lái)非常麻煩,特別是隨著項(xiàng)目規(guī)模的不斷增長(zhǎng)而顯得尤其嚴(yán)重。更糟糕的是,隨著代碼的復(fù)雜性增加,開(kāi)發(fā)的速度就會(huì)變慢,不利于開(kāi)發(fā)中等和大型的web應(yīng)用,許多中等規(guī)模或者大型的服務(wù)器端Web應(yīng)用程序很晚才得以推出而且成本也無(wú)法控制。此外,一旦開(kāi)發(fā)完,站點(diǎn)還要找合格的編程者來(lái)維護(hù)這些頗為復(fù)雜的代碼,結(jié)果讓這些程序員成為了一般的Web設(shè)計(jì)人員,服務(wù)器端應(yīng)用程序在最終的圖形設(shè)計(jì)和實(shí)現(xiàn)這兩方面上就弱化了。

為了克服這個(gè)問(wèn)題,ASP引進(jìn)了COM對(duì)象技術(shù),而JSP則提供了J2EE作為對(duì)策。這些解決方案都是建立在集中的、可重用代碼庫(kù)的機(jī)制之上。但是,他們使用起來(lái)可就太難了,學(xué)習(xí)所耗費(fèi)的時(shí)間也很多。還有,這些解決方案并沒(méi)有減少建立混亂代碼的誘惑,結(jié)果,我們只能組織起大型的、內(nèi)部結(jié)構(gòu)良好的開(kāi)發(fā)團(tuán)隊(duì)來(lái)使用這些技術(shù)。對(duì)于中等的項(xiàng)目來(lái)說(shuō),通常都較少使用這樣的方法,但事實(shí)上,中等的web應(yīng)用項(xiàng)目才是最多的。因此,許多項(xiàng)目都不得不使用一個(gè)不符合它們需要的開(kāi)發(fā)和維護(hù)環(huán)境。

幸好,JSP提供了一個(gè)解決這一問(wèn)題的更好的辦法。標(biāo)簽庫(kù)(Tag libraries)提供了一個(gè)建立可重用代碼塊的簡(jiǎn)單方式。一旦標(biāo)簽庫(kù)設(shè)計(jì)好,它就可以在許多項(xiàng)目中再次使用。更方便的是,與COM和J2EE不同,只要你懂得寫JSP,你無(wú)需學(xué)習(xí)任何其它的技巧就可以建立一個(gè)標(biāo)簽庫(kù)!最后,標(biāo)簽庫(kù)還改進(jìn)了Web應(yīng)用程序的維護(hù)性。這種對(duì)維護(hù)性的改進(jìn)表現(xiàn)在:輕易地在 JSP頁(yè)面上就實(shí)現(xiàn)了基于XML的可定制接口。結(jié)果可想而知,Web設(shè)計(jì)人員可以建立JSP Web應(yīng)用程序而無(wú)需知道JSP是怎么回事。這樣一來(lái),Web開(kāi)發(fā)就成為一項(xiàng)非常富有效率的團(tuán)隊(duì)開(kāi)發(fā)任務(wù)了。JSP程序員可以建立定制的標(biāo)簽和后端代碼模塊,而Web設(shè)計(jì)人員則可以使用定制標(biāo)簽并且全力關(guān)注于Web設(shè)計(jì)本身。標(biāo)簽庫(kù)解決了代碼混亂的問(wèn)題,而且做得干凈漂亮(事實(shí)上,XML才是解決這些問(wèn)題的本質(zhì)所在,但是標(biāo)簽庫(kù)還是起到了相當(dāng)關(guān)鍵的作用)。

什么是標(biāo)簽庫(kù)?

JSP標(biāo)簽庫(kù)(也稱自定義標(biāo)簽庫(kù))可看成是一種通過(guò)JavaBean生成基于XML的腳本的方法。從概念上講,標(biāo)簽就是很簡(jiǎn)單而且可重用的代碼結(jié)構(gòu)。比方說(shuō),在我們最新發(fā)布的JSPKit(在JSP Insider內(nèi))中,使用XML標(biāo)簽實(shí)現(xiàn)了對(duì)XML文檔的輕松訪問(wèn)。請(qǐng)看以下的清單A。

清單A:執(zhí)行XML/XSL 轉(zhuǎn)換的示例標(biāo)簽及其所在的HTML頁(yè)面 <%@ taglib uri="http://www.jspinsider.com/jspkit/JAXP" prefix="JAXP"%> <JAXP:TransformerTag> <JAXP:XMLFile>c:/xml/example.xml</JAXP:XMLFile> <JAXP:XSLFile>c:/xml/example.xsl</JAXP:XSLFile> </JAXP:TransformerTag>

以上的示例使用了簡(jiǎn)單的標(biāo)簽來(lái)訪問(wèn)處在幕后的更強(qiáng)大代碼,標(biāo)簽部分的語(yǔ)句首先裝載了一個(gè)XML文件,然后應(yīng)用了一個(gè)XSL文件來(lái)將XML文件中的內(nèi)容轉(zhuǎn)換成某個(gè)表現(xiàn)格式,并發(fā)送給客戶端,這一切僅僅只是用了一個(gè)很簡(jiǎn)單的標(biāo)簽。定制標(biāo)簽使得JSP項(xiàng)目中很容易創(chuàng)建重用的開(kāi)放源代碼模塊,而你所需要的只是標(biāo)簽庫(kù)和它的文檔說(shuō)明。

標(biāo)簽庫(kù)的重要特性

1.易于安裝在多個(gè)項(xiàng)目上

標(biāo)簽很容易從一個(gè)JSP項(xiàng)目遷移到其他項(xiàng)目。一旦建立了一個(gè)標(biāo)簽庫(kù),則只需要將所有的東西打包為一個(gè)JAR文件,你就可以在任何的JSP項(xiàng)目中重新使用。因?yàn)闃?biāo)簽可以重新使用,標(biāo)簽庫(kù)可以輕松地用于你自己的項(xiàng)目,所以標(biāo)簽庫(kù)越來(lái)越通行。目前,最好的標(biāo)簽資源可以在JSPTags.com這個(gè)站點(diǎn)找到。

2.擴(kuò)展JSP;;;標(biāo)簽庫(kù)可以具備JSP規(guī)范(JSP 1.2)中的任何特性和功能,你可以無(wú)限制地?cái)U(kuò)展和增加JSP的功能,而無(wú)需要等待下一版本JSP的出現(xiàn)。例如,你對(duì)JSP的include調(diào)用不太滿意。你可以建立自己的include標(biāo)簽,該標(biāo)簽執(zhí)行的是你自己的規(guī)范。

3.容易維護(hù)

標(biāo)簽庫(kù)使得JSP的web應(yīng)用程序非常易于維護(hù),原因有:

(1)標(biāo)簽應(yīng)用簡(jiǎn)單,對(duì)任何人而言都很容易使用、易于理解。

(2)所有的程序邏輯代碼都集中放在的標(biāo)簽處理器和JavaBeans中。這意味著你在升級(jí)代碼時(shí),無(wú)需要對(duì)每個(gè)使用該代碼的頁(yè)面進(jìn)行修改,你只需要修改集中的代碼文件便可。(3)如果需要加入新的功能,你也無(wú)需修改任何已經(jīng)存在的頁(yè)面,可以在標(biāo)簽中加入額外的屬性,從而引進(jìn)新的行為,而其它舊的屬性不變,這樣所有舊的頁(yè)面還可以正常工作。 例如你有一個(gè)讓所有文本變藍(lán)的標(biāo)簽: <BlueText>My Text</BlueText> 但在后來(lái)項(xiàng)目中,你又想讓藍(lán)色變暗。你可以保留原有的標(biāo)簽,只要為其增加一個(gè)新的屬性:shade ,如下所示:<BlueText shade="teal">My Text</BlueText> 所有舊的標(biāo)簽仍然可以產(chǎn)生藍(lán)色的文本,但現(xiàn)在你可以使用同一標(biāo)簽來(lái)產(chǎn)生變暗的藍(lán)色文本了。 (4)標(biāo)簽提升了代碼的重用性。那些經(jīng)過(guò)多次測(cè)試和使用的代碼肯定具有更少的bug。所以,使用定制標(biāo)簽的JSP頁(yè)面也同樣具有更少的缺陷,維護(hù)起來(lái)自然方便多了。

4.快速的開(kāi)發(fā)時(shí)間

標(biāo)簽庫(kù)提供一個(gè)簡(jiǎn)單的方式來(lái)重用代碼。在服務(wù)器端的語(yǔ)言中,其中一個(gè)標(biāo)準(zhǔn)的重用代碼方式是使用模板。相對(duì)于使用模板庫(kù),標(biāo)簽庫(kù)是一個(gè)更好的解決辦法。使用模板庫(kù),你必須為每個(gè)項(xiàng)目修改模板或者且建立嚴(yán)格的界面,而標(biāo)簽庫(kù)則沒(méi)有這些限制,并且擁有所有面向?qū)ο蟮暮锰帲梢宰龅届`活和更有擴(kuò)展性,而且,通過(guò)重用代碼,你可以花費(fèi)更少的時(shí)間來(lái)做開(kāi)發(fā),更多的時(shí)間可以用在設(shè)計(jì)你的web應(yīng)用上。標(biāo)簽庫(kù)的接口也很簡(jiǎn)單,非常容易做插入、使用和調(diào)試。

標(biāo)簽的組成結(jié)構(gòu)

雖然標(biāo)簽庫(kù)非常易于使用,不過(guò)要建立一個(gè)標(biāo)簽庫(kù)的內(nèi)部實(shí)現(xiàn)機(jī)制還是頗復(fù)雜的,起碼要比建立一個(gè)簡(jiǎn)單的JavaBean復(fù)雜。這個(gè)復(fù)雜是來(lái)自于標(biāo)簽庫(kù)是由幾部分構(gòu)成的。不過(guò),你只需要掌握了Java和JSP的知識(shí)就夠了。 一個(gè)簡(jiǎn)單的標(biāo)簽由下面的元素構(gòu)成: 1.JavaBean:為了得到Java與生具來(lái)的面向?qū)ο蟮暮锰帲芍赜玫拇a應(yīng)該放到一個(gè)獨(dú)立的代碼容器中,也就是JavaBean。這些JavaBeans并不是標(biāo)簽庫(kù)必不可少的一部分,但它們是標(biāo)簽庫(kù)用來(lái)執(zhí)行所分配任務(wù)的基礎(chǔ)代碼模塊。 2.標(biāo)簽處理器:標(biāo)簽處理器是標(biāo)簽庫(kù)的真正核心。一個(gè)標(biāo)簽處理器(tag handler)引用它所需要的任何外部資源(JavaBean)并且負(fù)責(zé)訪問(wèn)JSP頁(yè)面的信息(PageContext對(duì)象)。而JSP頁(yè)面則把頁(yè)面上設(shè)置的標(biāo)簽屬性和標(biāo)簽體中的內(nèi)容都傳遞給標(biāo)簽處理器,當(dāng)標(biāo)簽處理器完成其處理過(guò)程后,它就會(huì)把處理后的輸出結(jié)果回送給JSP頁(yè)面做進(jìn)一步處理。 3.標(biāo)簽庫(kù)描述符(TLD文件):這是一個(gè)簡(jiǎn)單的XML文件,它記錄著標(biāo)簽處理器的屬性、信息和位置等信息。JSP容器通過(guò)這個(gè)文件來(lái)得知從哪里及如何調(diào)用一個(gè)標(biāo)簽庫(kù)。4.Web站點(diǎn)的web.xml文件:這是Web站點(diǎn)的初始化文件,在這個(gè)文件中,需要定義了Web站點(diǎn)中用到的自定義標(biāo)簽,以及用來(lái)描述每個(gè)自定義標(biāo)簽的tld文件。 5.發(fā)布文件(WAR或JAR文件):如果你想重用自定義標(biāo)簽的話,你需要一個(gè)方法來(lái)將它由一個(gè)項(xiàng)目遷移到其他項(xiàng)目中去。將標(biāo)簽庫(kù)打包為一個(gè)JAR文件是一個(gè)簡(jiǎn)單而且有效的方式。 6.JSP頁(yè)面上的標(biāo)簽庫(kù)聲明:要在JSP頁(yè)面中的使用某個(gè)自定義標(biāo)簽的話,需要使用標(biāo)簽庫(kù)標(biāo)示符在頁(yè)面上進(jìn)行聲明。 

看來(lái)要做的工作很多,剛開(kāi)始用的時(shí)候當(dāng)然會(huì)有點(diǎn)棘手,不過(guò)其實(shí)并不是很難。它的要點(diǎn)并不在于編碼,而是在于如何將各部分正確地組織起來(lái)。這種層次性的結(jié)構(gòu)是很重要的,它令標(biāo)簽的使用靈活和更容易轉(zhuǎn)移。更重要的事,這些層次可以讓整個(gè)建立標(biāo)簽庫(kù)的過(guò)程都能通過(guò)JSP IDE(JSP的集成開(kāi)發(fā)環(huán)境)自動(dòng)完成。JSP IDE更可以自動(dòng)完成創(chuàng)建定制標(biāo)簽的大部分工作,而你自己則只需要負(fù)責(zé)建立代碼和標(biāo)簽處理器。

(注意:一個(gè)標(biāo)簽處理器僅定義一個(gè)自定義標(biāo)簽;一個(gè)標(biāo)簽庫(kù)是幾個(gè)處理相同任務(wù)的標(biāo)簽處理器的集合)

建立你的第一個(gè)標(biāo)簽

以下將一步一步地教你如何建立自定義的標(biāo)簽,具體的例子是擴(kuò)展JSP,令它擁有自己的HTML編碼功能。這個(gè)功能將所有的<和>字符用 HTML代碼來(lái)代替。它可以很容易地?cái)U(kuò)展為做其它的編碼處理。為了簡(jiǎn)化,這個(gè)例子只解釋了建立自定義標(biāo)簽的基本要素。

創(chuàng)建JavaBean

代碼中的任何可重用部分都應(yīng)該放到一個(gè)JavaBean中。這一點(diǎn)是很重要的。這樣你就可以在其他項(xiàng)目中重用這些代碼了。由于任何放置在標(biāo)簽處理器內(nèi)的代碼在標(biāo)簽外都是不可以重用的,因此將可重用的代碼部分獨(dú)立開(kāi)來(lái)是很重要的。在這個(gè)例子總,為HTML編碼的邏輯是常用的,因此放到JavaBean中,請(qǐng)參看清單B清單B:HTML編碼JavaBean /* HTML_Format.java */public class HTML_Format extends Object implements java.io.Serializable {

/** 創(chuàng)建新的HTML_Format */public HTML_Format() {}

/** 將一個(gè)字符串中所有的所有 < 和 > 字符用響應(yīng)的HTML編碼代替 */public String HTML_Encode(String as_data){int li_len = as_data.length();

/*string buffer的長(zhǎng)度要比原來(lái)的字符串長(zhǎng)*/StringBuffer lsb_encode = new StringBuffer(li_len + (li_len/10));

/* 循環(huán)替換全部的< 和 > 字符 */for( int li_count = 0 ; li_count < li_len ; li_count++){ String ls_next = String.valueOf(as_data.charAt(li_count));if (ls_next.equals("<")) ls_next = "<";if (ls_next.equals(">")) ls_next = ">";lsb_encode.append( ls_next );}

return( lsb_encode.toString() );}}

創(chuàng)建標(biāo)簽處理器標(biāo)簽處理器的代碼請(qǐng)參看清單C:清單C:HTML編碼標(biāo)簽處理器 import java.io.IOException;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;

public class HTML_FormatTag extends BodyTagSupport{/* 1) 在標(biāo)簽?zāi)?huì)調(diào)用這個(gè)函數(shù) */public int doEndTag() throws JspTagException{ try{ /* 2)得到標(biāo)簽中的文本 */BodyContent l_tagbody = getBodyContent();String ls_output = "";

/* 3)如果標(biāo)簽體有文本,就處理它 */if(l_tagbody != null){ HTML_Format l_format = new HTML_Format();/* 3a) 將標(biāo)簽體的內(nèi)容轉(zhuǎn)換為一個(gè)字符串 */String ls_html_text = l_tagbody.getString();ls_output = l_format.HTML_Encode(ls_html_text);}/* 4)將結(jié)果寫回到數(shù)據(jù)流中 */pageContext.getOut().write(ls_output.trim());}catch (IOException e){ throw new JspTagException("Tag Error:" + e.toString());}

/* 讓JSP繼續(xù)處理以下頁(yè)面的內(nèi)容 */return EVAL_PAGE;}}

這個(gè)處理很簡(jiǎn)單,它包括有:1.讀入位于開(kāi)始和結(jié)束標(biāo)簽間的文本2.調(diào)用html編碼函數(shù)3.將結(jié)果返回到JSP頁(yè)面。

創(chuàng)建標(biāo)簽描述符

我們需要描述自定義標(biāo)簽以讓系統(tǒng)知道如何處理。該描述文件的后綴為.tld,TLD文件通常就以標(biāo)簽處理器命名,并存放在“/WEB-INF/目錄之下。請(qǐng)參看清單D。 清單D:HTML編碼標(biāo)簽描述器<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN""http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"><TAGLIB><TLIBVERSION>1.0</TLIBVERSION><JSPVERSION>1.1</JSPVERSION><SHORTNAME>HTML_FormatTag</SHORTNAME><URI></URI><INFO>HTML Encoding Tag </INFO>

<TAG><NAME>HTMLEncode</NAME><TAGCLASS>HTML_FormatTag</TAGCLASS><INFO>Encode HTML</INFO></TAG>

</TAGLIB>

更新Web XML文件

現(xiàn)在可以告訴JSP容器如何使用標(biāo)簽庫(kù)了。為此要修改web.xml文件,具體說(shuō)來(lái)是要在其中加入一個(gè)taglib的項(xiàng)目來(lái)注冊(cè)該標(biāo)簽庫(kù),并為標(biāo)簽分配一個(gè)URI。URI是Web站點(diǎn)上唯一應(yīng)用于這一特定標(biāo)簽的索引。由于標(biāo)簽今后還可能用在不同的Web站點(diǎn)上,所以你最好采用完整的URL和/或者包名字(package name)來(lái)保證這一唯一性。這個(gè)例子是簡(jiǎn)化了,示例代碼請(qǐng)參看清單E。 清單E:修改web.xml文件 <?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN""http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<WEB-APP>

<TAGLIB><TAGLIB-URI>HTMLEncode</TAGLIB-URI><TAGLIB-LOCATION>/WEB-INF/HTML_FormatTag.tld</TAGLIB-LOCATION></TAGLIB>

</WEB-APP>

使用新的標(biāo)簽

自定義的標(biāo)簽設(shè)置好后,就可以用在你的JSP頁(yè)面上了。要做到這一點(diǎn),只需要在頁(yè)面上使用taglib指示命令聲明所要采用的標(biāo)簽即可。標(biāo)簽通過(guò)其唯一的 URI被索引,然后被分配給一個(gè)名字空間前綴(prefix)。這一前綴并沒(méi)有什么特別的意義,只要它不與其它的名字空間沖突便可,可以任意。請(qǐng)參看以下的清單F和G。

清單F:在一個(gè)JSP頁(yè)面上使用HTML編碼標(biāo)簽

<%@ taglib uri="HTMLEncode" prefix="Examples" %><PRE><?XML:NAMESPACE PREFIX = Examples /><Examples:HTMLEncode>< Hello , Simple sample ></Examples:HTMLEncode></PRE>

清單G:范例代碼的輸出< Hello , Simple sample >which displays as:< Hello , Simple sample >

通過(guò)這個(gè)標(biāo)簽,我就將該頁(yè)面的所有代碼編碼了。所有的自定義標(biāo)簽都是在服務(wù)器上處理的。這意味著你將不會(huì)在輸出的頁(yè)面上看到自定義的標(biāo)簽。

正如你所看到的那樣,建立標(biāo)簽并非難事。最麻煩的是學(xué)習(xí)標(biāo)簽處理器的整個(gè)細(xì)節(jié)。這是一個(gè)很強(qiáng)大的功能,我們不過(guò)是觸及了皮毛。由于這一過(guò)程需要采取的步驟很多,所以剛?cè)腴T的JSP程序員可能在建立標(biāo)簽的時(shí)候會(huì)覺(jué)得很困惑。

結(jié)論

標(biāo)簽庫(kù)是JSP最重要的特性之一,它還處在不斷的發(fā)展中。它的確是一個(gè)新事物,因此還沒(méi)有被廣泛采用,不過(guò)自定義標(biāo)簽庫(kù)已經(jīng)剝?nèi)チ怂纳衩孛婕啠絹?lái)越多的開(kāi)發(fā)者也開(kāi)始關(guān)注和使用它了。在2001年末,可預(yù)料標(biāo)簽庫(kù)將是許多JSP項(xiàng)目中的一個(gè)很常見(jiàn)的特性。

在這篇文章中只簡(jiǎn)要地討論了標(biāo)簽庫(kù)的好處。標(biāo)簽庫(kù)實(shí)際上還有許多其它強(qiáng)大的功能。標(biāo)簽庫(kù)促使JSP開(kāi)發(fā)進(jìn)入了前所未有的新天地。對(duì)JSP開(kāi)發(fā)人員來(lái)說(shuō)這確實(shí)是一種很令人振奮的新技術(shù),因?yàn)樗麄兊玫搅艘粋€(gè)可將JSP轉(zhuǎn)到各個(gè)應(yīng)用并且建立任何類型web應(yīng)用的工具。標(biāo)簽庫(kù)讓JSP變成了最豐富、最具動(dòng)態(tài)開(kāi)發(fā)能力的、強(qiáng)大的Web編程環(huán)境。它的功能只受我們的想象和創(chuàng)造力限制。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 看黄在线| 日本高清不卡一区久久精品 | 91好色视频| 自拍愉拍| 我要看黄色一级大片 | 韩国中文字幕在线观看 | 桃花综合 | 毛片大全在线观看 | 成人在线小视频 | 日日好吊妞 | 欧美亚洲国产另类在线观看 | 成年人网站黄 | 免费看a级片 | 欧美高清在线视频一区二区 | 日韩美女黄大片在线观看 | 欧美日韩亚洲综合 | 国产馆精品推荐在线观看 | 91免费视频网站 | 成人性色生活片免费看爆迷你毛片 | 亚洲一区二区观看 | 日本一级片免费观看 | 国产一级理论免费版 | 亚洲黄色网络 | 久久亚 | 成人看片黄a在线看 | 亚洲图片色| 在线观看国产wwwa级羞羞视频 | 一本无线乱码不卡一二三四 | 青青青国产精品国产精品久久久久 | 亚洲综合激情九月婷婷 | 欧美区一区二 | 久久综合九色综合97飘花 | 国产不卡一区二区三区免费视 | 三级视频网站在线观看播放 | 国产精品任我爽爆在线播放66 | 午夜网站在线观看 | 高清在线精品一区二区 | 成人中文字幕在线 | 精品国产三级a∨在线观看 精品国产三级在线观看 | 亚洲天堂色网站 | 黄网站免费观看 |