一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

J2ME編程實踐之聯(lián)網(wǎng)開發(fā)1_JSP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:對SUN定義的四種JDBC驅(qū)動程序標(biāo)準(zhǔn)簡介
SUN定義的四種JDBC驅(qū)動程序標(biāo)準(zhǔn): Type1 JDBC-ODBC橋 作為JDK1.1后的一部分,是sun.jdbc.odbc包的一部分 ApplicationJDBC-ODBC Bridge(Type1 jdbc driver)-JDBC-ODBC LibraryODBC D

由于無線設(shè)備所能支持的網(wǎng)絡(luò)協(xié)議非常有限,僅限于HTTP,Socket,UDP等幾種協(xié)議,不同的廠家可能還支持其他網(wǎng)絡(luò)協(xié)議,但是,MIDP 1.0規(guī)范規(guī)定,HTTP協(xié)議是必須實現(xiàn)的協(xié)議,而其他協(xié)議的實現(xiàn)都是可選的。 因此,為了能在不同類型的手機(jī)上移植,我們盡量采用HTTP作為網(wǎng)絡(luò)連接的首選協(xié)議,這樣還能重用服務(wù)器端的代碼。但是,由于HTTP是一個基于文本的效率較低的協(xié)議,因此,必須仔細(xì)考慮手機(jī)和服務(wù)器端的通信內(nèi)容,盡可能地提高效率。

對于MIDP應(yīng)用程序,應(yīng)當(dāng)盡量做到:

1.發(fā)送請求時,附加一個User-Agent頭,傳入MIDP和自身版本號,以便服務(wù)器能識別此請求來自MIDP應(yīng)用程序,并且根據(jù)版本號發(fā)送相應(yīng)的相應(yīng)。

2.連接服務(wù)器時,顯示一個下載進(jìn)度條使用戶能看到下載進(jìn)度,并能隨時中斷連接。

3.由于無線網(wǎng)絡(luò)連接速度還很慢,因此有必要將某些數(shù)據(jù)緩存起來,可以存儲在內(nèi)存中,也可以放到RMS中。

對于服務(wù)器端而言,其輸出響應(yīng)應(yīng)當(dāng)盡量做到:

1. 明確設(shè)置Content-Length字段,以便MIDP應(yīng)用程序能讀取HTTP頭并判斷自身是否有能力處理此長度的數(shù)據(jù),如果不能,可以直接關(guān)閉連接而不必繼續(xù)讀取HTTP正文。

2. 服務(wù)器不應(yīng)當(dāng)發(fā)送HTML內(nèi)容,因為MIDP應(yīng)用程序很難解析HTML,XML雖然能夠解析,但是耗費(fèi)CPU和內(nèi)存資源,因此,應(yīng)當(dāng)發(fā)送緊湊的二進(jìn)制內(nèi)容,用DataOutputStream直接寫入并設(shè)置Content-Type為application/octet-stream。

3. 盡量不要重定向URL,這樣會導(dǎo)致MIDP應(yīng)用程序再次連接服務(wù)器,增加了用戶的等待時間和網(wǎng)絡(luò)流量。

4. 如果發(fā)生異常,例如請求的資源未找到,或者身份驗證失敗,通常,服務(wù)器會向瀏覽器發(fā)送一個顯示出錯的頁面,可能還包括一個用戶登錄的Form,但是,向MIDP發(fā)送錯誤頁面毫無意義,應(yīng)當(dāng)直接發(fā)送一個404或401錯誤,這樣MIDP應(yīng)用程序就可以直接讀取HTTP頭的響應(yīng)碼獲取錯誤信息而不必繼續(xù)讀取相應(yīng)內(nèi)容。

5. 由于服務(wù)器的計算能力遠(yuǎn)遠(yuǎn)超過手機(jī)客戶端,因此,針對不同客戶端版本發(fā)送不同響應(yīng)的任務(wù)應(yīng)該在服務(wù)器端完成。例如,根據(jù)客戶端傳送的User-Agent頭確定客戶端版本。這樣,低版本的客戶端不必升級也能繼續(xù)使用。

MIDP的聯(lián)網(wǎng)框架定義了多種協(xié)議的網(wǎng)絡(luò)連接,但是每個廠商都必須實現(xiàn)HTTP連接,在MIDP 2.0中還增加了必須實現(xiàn)的HTTPS連接。因此,要保證MIDP應(yīng)用程序能在不同廠商的手機(jī)平臺上移植,最好只使用HTTP連接。雖然HTTP是一個基于文本的效率較低的協(xié)議,但是由于使用特別廣泛,大多數(shù)服務(wù)器應(yīng)用的前端都是基于HTTP的Web頁面,因此能最大限度地復(fù)用服務(wù)器端的代碼。只要控制好緩存,仍然有不錯的速度。

SUN的MIDP庫提供了javax.microediton.io包,能非常容易地實現(xiàn)HTTP連接。但是要注意,由于網(wǎng)絡(luò)有很大的延時,必須把聯(lián)網(wǎng)操作放入一個單獨(dú)的線程中,以避免主線程阻塞導(dǎo)致用戶界面停止響應(yīng)。事實上,MIDP運(yùn)行環(huán)境根本就不允許在主線程中操作網(wǎng)絡(luò)連接。因此,我們必須實現(xiàn)一個靈活的HTTP聯(lián)網(wǎng)模塊,能讓用戶非常直觀地看到當(dāng)前上傳和下載的進(jìn)度,并且能夠隨時取消連接。

一個完整的HTTP連接為:用戶通過某個命令發(fā)起連接請求,然后系統(tǒng)給出一個等待屏幕提示正在連接,當(dāng)連接正常結(jié)束后,前進(jìn)到下一個屏幕并處理下載的數(shù)據(jù)。如果連接過程出現(xiàn)異常,將給用戶提示并返回到前一個屏幕。用戶在等待過程中能夠隨時取消并返回前一個屏幕。

我們設(shè)計一個HttpThread線程類負(fù)責(zé)在后臺連接服務(wù)器,HttpListener接口實現(xiàn)Observer(觀察者)模式,以便HttpThread能提示觀察者下載開始、下載結(jié)束、更新進(jìn)度條等。HttpListener接口如下:

public interface HttpListener {

void onSetSize(int size);

void onFinish(byte[] data, int size);

void onProgress(int percent);

void onError(int code, String message);

}

實現(xiàn)HttpListener接口的是繼承自Form的一個HttpWaitUI屏幕,它顯示一個進(jìn)度條和一些提示信息,并允許用戶隨時中斷連接:

public class HttpWaitUI extends Form implements CommandListener,

HttpListener {

private Gauge gauge;

private Command cancel;

private HttpThread downloader;

private Displayable displayable;

public HttpWaitUI(String url, Displayable displayable) {

super("Connecting");

this.gauge = new Gauge("Progress", false, 100, 0);

this.cancel = new Command("Cancel", Command.CANCEL, 0);

append(gauge);

addCommand(cancel);

setCommandListener(this);

downloader = new HttpThread(url, this);

downloader.start();

}

public void commandAction(Command c, Displayable d) {

if(c==cancel) {

downloader.cancel();

ControllerMIDlet.goBack();

}

}

public void onFinish(byte[] buffer, int size) { … }

public void onError(int code, String message) { … }

public void onProgress(int percent) { … }

public void onSetSize(int size) { … }

}

HttpThread是負(fù)責(zé)處理Http連接的線程類,它接受一個URL和HttpListener:

class HttpThread extends Thread {

private static final int MAX_LENGTH = 20 * 1024; // 20K

private boolean cancel = false;

private String url;

private byte[] buffer = null;

private HttpListener listener;

public HttpThread(String url, HttpListener listener) {

this.url = url;

this.listener = listener;

}

public void cancel() { cancel = true; }

使用GET獲取內(nèi)容

我們先討論最簡單的GET請求。GET請求只需向服務(wù)器發(fā)送一個URL,然后取得服務(wù)器響應(yīng)即可。在HttpThread的run()方法中實現(xiàn)如下:

public void run() {

HttpConnection hc = null;

InputStream input = null;

try {

hc = (HttpConnection)Connector.open(url);

hc.setRequestMethod(HttpConnection.GET); // 默認(rèn)即為GET

hc.setRequestProperty("User-Agent", USER_AGENT);

// get response code:

int code = hc.getResponseCode();

if(code!=HttpConnection.HTTP_OK) {

listener.onError(code, hc.getResponseMessage());

return;

}

// get size:

int size = (int)hc.getLength();

// 返回響應(yīng)大小,或者-1如果大小無法確定

listener.onSetSize(size);

// 開始讀響應(yīng):

input = hc.openInputStream();

int percent = 0; // percentage

int tmp_percent = 0;

int index = 0; // buffer index

int reads; // each byte

if(size!=(-1))

buffer = new byte[size]; // 響應(yīng)大小已知,確定緩沖區(qū)大小

else

buffer = new byte[MAX_LENGTH];

// 響應(yīng)大小未知,設(shè)定一個固定大小的緩沖區(qū)

while(!cancel) {

int len = buffer.length - index;

len = len>128 ? 128 : len;

reads = input.read(buffer, index, len);

if(reads<=0)

break;

index = reads;

if(size>0) { // 更新進(jìn)度

tmp_percent = index * 100 / size;

if(tmp_percent!=percent) {

percent = tmp_percent;

listener.onProgress(percent);

}

}

}

if(!cancel && input.available()>0) // 緩沖區(qū)已滿,無法繼續(xù)讀取

listener.onError(601, "Buffer overflow.");

if(!cancel) {

if(size!=(-1) && index!=size)

listener.onError(102, "Content-Length does not match.");

else

listener.onFinish(buffer, index);

}

}

catch(IOException ioe) {

listener.onError(101, "IOException: " ioe.getMessage());

}

finally { // 清理資源

if(input!=null)

try { input.close(); } catch(IOException ioe) {}

if(hc!=null)

try { hc.close(); } catch(IOException ioe) {}

}

}

當(dāng)下載完畢后,HttpWaitUI就獲得了來自服務(wù)器的數(shù)據(jù),要傳遞給下一個屏幕處理,HttpWaitUI必須包含對此屏幕的引用并通過一個setData(DataInputStream input)方法讓下一個屏幕能非常方便地讀取數(shù)據(jù)。因此,定義一個DataHandler接口:

public interface DataHandler {

void setData(DataInputStream input) throws IOException;

}

HttpWaitUI響應(yīng)HttpThread的onFinish事件并調(diào)用下一個屏幕的setData方法將數(shù)據(jù)傳遞給它并顯示下一個屏幕:

public void onFinish(byte[] buffer, int size) {

byte[] data = buffer;

if(size!=buffer.length) {

data = new byte[size];

System.arraycopy(data, 0, buffer, 0, size);

}

DataInputStream input = null;

try {

input = new DataInputStream(new ByteArrayInputStream(data));

if(displayable instanceof DataHandler)

((DataHandler)displayable).setData(input);

else

System.err.println("[WARNING]

Displayable object cannot handle data.");

ControllerMIDlet.replace(displayable);

}

catch(IOException ioe) { … }

}

由于無線設(shè)備所能支持的網(wǎng)絡(luò)協(xié)議非常有限,僅限于HTTP,Socket,UDP等幾種協(xié)議,不同的廠家可能還支持其他網(wǎng)絡(luò)協(xié)議,但是,MIDP 1.0規(guī)范規(guī)定,HTTP協(xié)議是必須實現(xiàn)的協(xié)議,而其他協(xié)議的實現(xiàn)都是可選的。 因此,為了能在不同類型的手機(jī)上移植,我們盡量采用HTTP作為網(wǎng)絡(luò)連接的首選協(xié)議,這樣還能重用服務(wù)器端的代碼。但是,由于HTTP是一個基于文本的效率較低的協(xié)議,因此,必須仔細(xì)考慮手機(jī)和服務(wù)器端的通信內(nèi)容,盡可能地提高效率。

對于MIDP應(yīng)用程序,應(yīng)當(dāng)盡量做到:

1.發(fā)送請求時,附加一個User-Agent頭,傳入MIDP和自身版本號,以便服務(wù)器能識別此請求來自MIDP應(yīng)用程序,并且根據(jù)版本號發(fā)送相應(yīng)的相應(yīng)。

2.連接服務(wù)器時,顯示一個下載進(jìn)度條使用戶能看到下載進(jìn)度,并能隨時中斷連接。

3.由于無線網(wǎng)絡(luò)連接速度還很慢,因此有必要將某些數(shù)據(jù)緩存起來,可以存儲在內(nèi)存中,也可以放到RMS中。

對于服務(wù)器端而言,其輸出響應(yīng)應(yīng)當(dāng)盡量做到:

1. 明確設(shè)置Content-Length字段,以便MIDP應(yīng)用程序能讀取HTTP頭并判斷自身是否有能力處理此長度的數(shù)據(jù),如果不能,可以直接關(guān)閉連接而不必繼續(xù)讀取HTTP正文。

2. 服務(wù)器不應(yīng)當(dāng)發(fā)送HTML內(nèi)容,因為MIDP應(yīng)用程序很難解析HTML,XML雖然能夠解析,但是耗費(fèi)CPU和內(nèi)存資源,因此,應(yīng)當(dāng)發(fā)送緊湊的二進(jìn)制內(nèi)容,用DataOutputStream直接寫入并設(shè)置Content-Type為application/octet-stream。

3. 盡量不要重定向URL,這樣會導(dǎo)致MIDP應(yīng)用程序再次連接服務(wù)器,增加了用戶的等待時間和網(wǎng)絡(luò)流量。

4. 如果發(fā)生異常,例如請求的資源未找到,或者身份驗證失敗,通常,服務(wù)器會向瀏覽器發(fā)送一個顯示出錯的頁面,可能還包括一個用戶登錄的Form,但是,向MIDP發(fā)送錯誤頁面毫無意義,應(yīng)當(dāng)直接發(fā)送一個404或401錯誤,這樣MIDP應(yīng)用程序就可以直接讀取HTTP頭的響應(yīng)碼獲取錯誤信息而不必繼續(xù)讀取相應(yīng)內(nèi)容。

5. 由于服務(wù)器的計算能力遠(yuǎn)遠(yuǎn)超過手機(jī)客戶端,因此,針對不同客戶端版本發(fā)送不同響應(yīng)的任務(wù)應(yīng)該在服務(wù)器端完成。例如,根據(jù)客戶端傳送的User-Agent頭確定客戶端版本。這樣,低版本的客戶端不必升級也能繼續(xù)使用。

MIDP的聯(lián)網(wǎng)框架定義了多種協(xié)議的網(wǎng)絡(luò)連接,但是每個廠商都必須實現(xiàn)HTTP連接,在MIDP 2.0中還增加了必須實現(xiàn)的HTTPS連接。因此,要保證MIDP應(yīng)用程序能在不同廠商的手機(jī)平臺上移植,最好只使用HTTP連接。雖然HTTP是一個基于文本的效率較低的協(xié)議,但是由于使用特別廣泛,大多數(shù)服務(wù)器應(yīng)用的前端都是基于HTTP的Web頁面,因此能最大限度地復(fù)用服務(wù)器端的代碼。只要控制好緩存,仍然有不錯的速度。

SUN的MIDP庫提供了javax.microediton.io包,能非常容易地實現(xiàn)HTTP連接。但是要注意,由于網(wǎng)絡(luò)有很大的延時,必須把聯(lián)網(wǎng)操作放入一個單獨(dú)的線程中,以避免主線程阻塞導(dǎo)致用戶界面停止響應(yīng)。事實上,MIDP運(yùn)行環(huán)境根本就不允許在主線程中操作網(wǎng)絡(luò)連接。因此,我們必須實現(xiàn)一個靈活的HTTP聯(lián)網(wǎng)模塊,能讓用戶非常直觀地看到當(dāng)前上傳和下載的進(jìn)度,并且能夠隨時取消連接。

一個完整的HTTP連接為:用戶通過某個命令發(fā)起連接請求,然后系統(tǒng)給出一個等待屏幕提示正在連接,當(dāng)連接正常結(jié)束后,前進(jìn)到下一個屏幕并處理下載的數(shù)據(jù)。如果連接過程出現(xiàn)異常,將給用戶提示并返回到前一個屏幕。用戶在等待過程中能夠隨時取消并返回前一個屏幕。

我們設(shè)計一個HttpThread線程類負(fù)責(zé)在后臺連接服務(wù)器,HttpListener接口實現(xiàn)Observer(觀察者)模式,以便HttpThread能提示觀察者下載開始、下載結(jié)束、更新進(jìn)度條等。HttpListener接口如下:

public interface HttpListener {

void onSetSize(int size);

void onFinish(byte[] data, int size);

void onProgress(int percent);

void onError(int code, String message);

}

實現(xiàn)HttpListener接口的是繼承自Form的一個HttpWaitUI屏幕,它顯示一個進(jìn)度條和一些提示信息,并允許用戶隨時中斷連接:

public class HttpWaitUI extends Form implements CommandListener,

HttpListener {

private Gauge gauge;

private Command cancel;

private HttpThread downloader;

private Displayable displayable;

public HttpWaitUI(String url, Displayable displayable) {

super("Connecting");

this.gauge = new Gauge("Progress", false, 100, 0);

this.cancel = new Command("Cancel", Command.CANCEL, 0);

append(gauge);

addCommand(cancel);

setCommandListener(this);

downloader = new HttpThread(url, this);

downloader.start();

}

public void commandAction(Command c, Displayable d) {

if(c==cancel) {

downloader.cancel();

ControllerMIDlet.goBack();

}

}

public void onFinish(byte[] buffer, int size) { … }

public void onError(int code, String message) { … }

public void onProgress(int percent) { … }

public void onSetSize(int size) { … }

}

HttpThread是負(fù)責(zé)處理Http連接的線程類,它接受一個URL和HttpListener:

class HttpThread extends Thread {

private static final int MAX_LENGTH = 20 * 1024; // 20K

private boolean cancel = false;

private String url;

private byte[] buffer = null;

private HttpListener listener;

public HttpThread(String url, HttpListener listener) {

this.url = url;

this.listener = listener;

}

public void cancel() { cancel = true; }

使用GET獲取內(nèi)容

我們先討論最簡單的GET請求。GET請求只需向服務(wù)器發(fā)送一個URL,然后取得服務(wù)器響應(yīng)即可。在HttpThread的run()方法中實現(xiàn)如下:

public void run() {

HttpConnection hc = null;

InputStream input = null;

try {

hc = (HttpConnection)Connector.open(url);

hc.setRequestMethod(HttpConnection.GET); // 默認(rèn)即為GET

hc.setRequestProperty("User-Agent", USER_AGENT);

// get response code:

int code = hc.getResponseCode();

if(code!=HttpConnection.HTTP_OK) {

listener.onError(code, hc.getResponseMessage());

return;

}

// get size:

int size = (int)hc.getLength();

// 返回響應(yīng)大小,或者-1如果大小無法確定

listener.onSetSize(size);

// 開始讀響應(yīng):

input = hc.openInputStream();

int percent = 0; // percentage

int tmp_percent = 0;

int index = 0; // buffer index

int reads; // each byte

if(size!=(-1))

buffer = new byte[size]; // 響應(yīng)大小已知,確定緩沖區(qū)大小

else

buffer = new byte[MAX_LENGTH];

// 響應(yīng)大小未知,設(shè)定一個固定大小的緩沖區(qū)

while(!cancel) {

int len = buffer.length - index;

len = len>128 ? 128 : len;

reads = input.read(buffer, index, len);

if(reads<=0)

break;

index = reads;

if(size>0) { // 更新進(jìn)度

tmp_percent = index * 100 / size;

if(tmp_percent!=percent) {

percent = tmp_percent;

listener.onProgress(percent);

}

}

}

if(!cancel && input.available()>0) // 緩沖區(qū)已滿,無法繼續(xù)讀取

listener.onError(601, "Buffer overflow.");

if(!cancel) {

if(size!=(-1) && index!=size)

listener.onError(102, "Content-Length does not match.");

else

listener.onFinish(buffer, index);

}

}

catch(IOException ioe) {

listener.onError(101, "IOException: " ioe.getMessage());

}

finally { // 清理資源

if(input!=null)

try { input.close(); } catch(IOException ioe) {}

if(hc!=null)

try { hc.close(); } catch(IOException ioe) {}

}

}

當(dāng)下載完畢后,HttpWaitUI就獲得了來自服務(wù)器的數(shù)據(jù),要傳遞給下一個屏幕處理,HttpWaitUI必須包含對此屏幕的引用并通過一個setData(DataInputStream input)方法讓下一個屏幕能非常方便地讀取數(shù)據(jù)。因此,定義一個DataHandler接口:

public interface DataHandler {

void setData(DataInputStream input) throws IOException;

}

HttpWaitUI響應(yīng)HttpThread的onFinish事件并調(diào)用下一個屏幕的setData方法將數(shù)據(jù)傳遞給它并顯示下一個屏幕:

public void onFinish(byte[] buffer, int size) {

byte[] data = buffer;

if(size!=buffer.length) {

data = new byte[size];

System.arraycopy(data, 0, buffer, 0, size);

}

DataInputStream input = null;

try {

input = new DataInputStream(new ByteArrayInputStream(data));

if(displayable instanceof DataHandler)

((DataHandler)displayable).setData(input);

else

System.err.println("[WARNING]

Displayable object cannot handle data.");

ControllerMIDlet.replace(displayable);

}

catch(IOException ioe) { … }

}

  

分享:JSP頁面自動生成html頁面或任何格式頁面
先建立一個模本頁面:template.htm ###title### ###title### 作者:###author### ###content###=========================================再寫一個JSP頁面: buildhtml.jsp

來源:模板無憂//所屬分類:JSP教程/更新時間:2008-08-22
相關(guān)JSP教程
国产精品视频自在线| 亚洲精品日韩一| 九九热国产在线| 91成人一区二区三区| 国产精品久久婷婷| 国产女人18水真多毛片18精品| 黄色99视频| 日韩精品中文字| 欧美激情在线观看视频免费| 亚洲成人第一网站| 奇米888一区二区三区| 国产精品区一区| 精品国产一区二区三区久久狼黑人| 欧美性猛交xxxx乱大交| 中文字幕一区二区三区av| 久久人妻无码一区二区| 精品日韩在线播放| 亚洲欧美另类动漫| 香蕉视频免费看| 色又黄又爽网站www久久| 精品国产欧美一区二区| 精品国产不卡一区二区三区| 国产伦理精品不卡| 久热综合在线亚洲精品| a在线观看免费视频| 久久中文字幕在线视频| 99精品欧美一区二区蜜桃免费| 高跟丝袜一区二区三区| 麻豆国产欧美一区二区三区| 天天色棕合合合合合合合| 懂色av蜜臀av粉嫩av分享吧最新章节| 大陆极品少妇内射aaaaa| 日本一区视频在线观看免费| 国产精品成人无码专区| 久久丁香综合五月国产三级网站| 欧美性xxxxx极品少妇| 国产成人综合久久| 久久久久久草| 国产成一区二区| 欧美激情在线视频二区| 国产日韩精品入口| 精品女厕一区二区三区| 风间由美性色一区二区三区 | 美女脱光内衣内裤视频久久网站| 国产探花视频在线播放| 欧美日韩一区二区视频在线观看| 成人免费在线视频网址| 亚洲欧洲一二三| 国产情侣在线视频| 一区二区视频在线| 国产精品久久久久高潮| 国产免费一区二区视频| 久久久亚洲精品无码| 久久久久久av无码免费网站下载| 一区二区冒白浆视频| 美女黄色片网站| 国产欧美久久一区二区| 成人性生交大片免费观看嘿嘿视频 | xxav国产精品美女主播| 91日本在线观看| 欧美午夜精品久久久久久浪潮| 欧美精品一区二区三区很污很色的| 亚洲欧美中文另类| 51久久精品夜色国产麻豆| 色哟哟免费网站| 91黄色在线看| 亚洲人成人77777线观看| 茄子视频成人在线| 国产一区不卡在线观看| 中文字幕精品久久| 日韩电影免费在线观看中文字幕 | 成人精品久久av网站| 国产精品一区二区三区不卡| 国产精华一区二区三区| 91亚洲va在线va天堂va国| 中文字幕av日韩精品| a天堂视频在线| 久久不射电影网| 国产福利在线免费| 天天干免费视频| 国产福利一区二区三区视频在线| 亚洲欧洲国产日韩| 日韩激情第一页| 国产精品国产三级国产有无不卡| 亚洲美女精品一区| 亚洲精选视频在线| 欧美日韩免费视频| www.国产视频.com| 国产午夜麻豆影院在线观看| 成人污污视频在线观看| 欧美日韩在线播放三区| 国产午夜精品美女毛片视频| 伦理中文字幕亚洲| aa免费在线观看| 亚洲 激情 在线| 亚洲最新视频在线播放| 午夜啪啪福利视频| 日本成人在线一区| av资源一区二区| 国产成人一级片| 美女看a上一区| 久久久精品视频免费| 国产97免费视频| 喷水视频在线观看| 亚洲AV无码片久久精品| 久久综合影音| 久热精品视频在线免费观看| 亚洲乱码一区二区三区三上悠亚| 激情深爱一区二区| 视频一区二区在线| 高清shemale亚洲人妖| 欧美一区二区三区电影在线观看| 亚洲欧美在线视频免费| 成人av免费播放| 亚洲缚视频在线观看| 国产极品尤物在线| 亚洲天堂一二三| 亚洲成人黄色片| 欧美日韩在线免费| 欧美视频在线观看网站| av电影在线不卡| www激情久久| 91香蕉电影院| 国产精品久久久久久久久免费看| 天堂av.com| 不卡一区二区中文字幕| 最新av免费在线观看| 亚洲精品美女免费| 青青草视频在线观看免费| 日韩精品亚洲精品| 国产精品国产三级国产专区51| 综合激情网五月| 日韩欧美一区二区三区| 国产欧美一区二区三区在线看| 中文字幕永久在线| 久久99精品久久久久久动态图 | 福利一区福利二区微拍刺激| 日韩精品一区二区三区四区| 女人又爽又黄免费女仆| 欧美在线观看一区| 久久精彩视频| 日韩电影在线看| 欧美在线一区二区三区四区| 国产精品沙发午睡系列990531| 亚洲第一黄色网址| 97精品一区二区三区| 18岁成人毛片| 亚洲日本在线观看| 亚洲欧洲国产精品久久| 粉嫩av一区二区夜夜嗨| 国产一区二区三区日韩欧美| 最近免费中文字幕中文高清百度| 免费不卡av网站| 国产男女猛烈无遮挡| 成人免费视频app| 国产丝袜高跟一区| 永久免费看片直接| 欧美岛国在线观看| 一区二区三区免费播放| 一区二区久久久久久| 亚洲黄色成人久久久| 亚洲一区二区在线免费观看视频| 日韩av一区二区在线播放| 91精品国产综合久久香蕉的用户体验 | 亚洲欧美国产三级| 国产精品乱子乱xxxx| 日本xxxx黄色| 中文字幕佐山爱一区二区免费| 波多野在线播放| 91精品一区二区三区久久久久久 | 精品国产污污免费网站入口| 日韩无码精品一区二区三区| 日本成人一级片| 欧美一区激情视频在线观看| 国产片一区二区三区| 国产无套精品一区二区三区| 日本在线观看一区二区| 欧美精品一区视频| 久久av老司机精品网站导航| 亚洲国产精品一区在线观看不卡 | 91偷拍精品一区二区三区| 奇米色一区二区三区四区| 1区2区3区欧美| aa成人免费视频| 在线观看免费国产视频| 欧美日韩在线播放三区| 日本爱爱小视频| 99理论电影网| 六月丁香婷婷久久| 中文字幕剧情在线观看一区| 国产精品久久久久桃色tv| jizz18女人| 欧美多人爱爱视频网站| aa视频在线免费观看| 不卡影院免费观看| 国产三级精品在线不卡| 最新欧美精品一区二区三区| jizzjizz国产精品喷水| 国产高潮在线观看| 毛片精品免费在线观看| 俄罗斯黄色录像| 午夜欧美视频在线观看| 艳妇乳肉豪妇荡乳xxx| 国产欧美日韩亚洲精品| 欧美日韩国产大片| 国产一级做a爱片久久毛片a| 伊人久久99| 精品国产成人系列| 久草视频在线资源站| 亚洲国产一区二区三区在线播| 亚洲一区二区三区四区在线播放| 一本久久综合亚洲鲁鲁| 欧美一级夜夜爽| 亚洲人吸女人奶水| 国产一区二区在线观看免费| 女人十八毛片嫩草av| 日本最新高清不卡中文字幕| 国产丝袜美腿一区二区三区| 在线视频日韩一区 | 欧美福利视频导航| 国产一区二区在线视频观看| 国产精品成人一区二区三区吃奶| 天堂中文网在线| 羞羞在线观看视频| 97精品视频在线观看| 一本在线高清不卡dvd| 中文字幕在线日本| 日本一区免费看| 亚洲天堂av女优| 久草成人在线视频| 久久国产精品久久久久| 国产人伦精品一区二区| 亚洲国产精品国自产拍久久| 丰满人妻一区二区三区大胸| 99久久无色码| 欧美肥胖老妇做爰| 国产精品一区二区x88av| 亚洲欧美日韩综合网| 国产精品久久久久久久久久免费 | 99国产精品久久久久久久久久| 播放灌醉水嫩大学生国内精品| 日韩欧美国产一区二区在线播放| 91丨九色丨海角社区| 黄色99视频| 日韩在线观看免费高清| 在线免费观看一区| 国产精品99久久久| 男女啊啊啊视频| 成人免费无遮挡无码黄漫视频| 亚洲精品鲁一鲁一区二区三区| 国产精品jizz| 国产成人亚洲精品自产在线 | 久久精品一区蜜桃臀影院| 成人精品鲁一区一区二区| 91在线你懂的| 18禁裸乳无遮挡啪啪无码免费| 免费在线黄网站| 91久久久国产精品| 久久久久久伊人| 日韩在线免费观看视频| 国产精品久久久一本精品| 人妻无码一区二区三区| 成人性生交大片免费看小说| 色猫猫国产区一区二在线视频| 怡春院在线视频| 久草福利视频在线| 在线观看欧美亚洲| 国产成人精品免费视频大全最热| 精品欧美一区二区在线观看| 中日韩免费视频中文字幕| 97精品久久久午夜一区二区三区| 国产精品自拍网站| 欧美性猛交xxxx富婆| 日韩电视剧免费观看网站| 久精品国产欧美| 亚洲综合在线网站| 深田咏美中文字幕| 久草免费资源站| 男人舔女人下部高潮全视频| www.桃色.com| 欧美牲交a欧美牲交aⅴ免费真| 亚洲黄色网址在线观看| 国产二区视频在线播放| 日韩色在线观看| 国产裸体歌舞团一区二区| 久久久久久天堂| 中文字幕第10页| 欧美一区亚洲二区| 国产精品日韩在线观看| 亚洲人成在线电影| 久久精品国产2020观看福利| 国产精品美女无圣光视频| 欧美最顶级的aⅴ艳星| 久久九九国产精品怡红院| 欧洲亚洲免费在线| 中文字幕在线中文| 亚洲s码欧洲m码国产av| 国产亚洲精品久| 国产午夜精品免费一区二区三区 | 国内精品久久影院| 欧美一区二区三区免费观看| 欧日韩不卡在线视频| 国产精品9999| 精品日本一区二区| 三级视频中文字幕| 国产精品第157页| 国产精品伊人日日| 国产精品免费观看在线| 精品中文字幕视频| 欧美成aaa人片免费看| 久久av.com| 成人国产精品免费视频| 国产欧美综合一区| 四虎国产精品成人免费入口| 亚洲熟妇一区二区| 丝袜美腿小色网| 国产精品视频a| 国产精品亚洲人在线观看| 日韩中文字幕在线| 精品无码国产一区二区三区av| 日产电影一区二区三区| 日本韩国视频一区二区| 欧美精品在线一区| 国产精品九九视频| 中文字幕手机在线视频| 日本欧美一区二区三区乱码| 26uuu亚洲| 欧美mv日韩mv国产| 欧洲精品在线视频| 国产传媒免费观看| 婷婷伊人五月天| 青娱乐国产盛宴| 成人免费视频国产| 色欧美片视频在线观看| 久久久久九九九九| 国产精品自产拍高潮在线观看| 欧洲一区二区日韩在线视频观看免费 | 在线亚洲人成电影网站色www| 久久在精品线影院精品国产| 青青青在线观看视频| 国产无套精品一区二区三区| 精品中文字幕在线播放| 91黑人精品一区二区三区| 国产麻豆午夜三级精品| 色8久久精品久久久久久蜜 | 亚洲福利在线播放| 欧美成人久久久| 无码人妻精品一区二区蜜桃百度| 波多野结衣毛片| 亚洲va在线va天堂| 在线播放精品一区二区三区 | 国产资源第一页| 久久久久99精品成人片试看| 久久久综合激的五月天| 成人疯狂猛交xxx| 国产精品污视频| 欧美黄色性视频| 波多野结衣一区二区三区在线 | 国产精品免费av| 日韩av综合网站| 国产一区精品视频| 久久精品国产av一区二区三区| 国产精品国产三级国产普通话蜜臀 | 精品久久久久久亚洲综合网| www.国产区| 日韩vs国产vs欧美| 精品久久久中文| 亚洲综合社区网| 99电影网电视剧在线观看| 中文字幕在线观看成人| 久久99国产精品免费网站| 2020国产精品自拍| 91地址最新发布| 亚洲一二三四五六区| 亚洲欧美日韩国产综合在线| 精品一区在线播放| 十八禁一区二区三区| 久久黄色av网站| 久久久久国产精品夜夜夜夜夜| 亚洲午夜精品网| 不卡一区二区三区四区五区| 青青青视频在线播放| 国产麻豆视频精品| 色99之美女主播在线视频| 最新不卡av| 欧美成人精品欧美一级乱黄| 欧美在线色视频| 91av免费看| 日韩字幕在线观看| 欧美视频自拍偷拍| 国产精品19p| 欧美日韩不卡一区| 夜夜爽99久久国产综合精品女不卡| 国产婷婷在线视频| 色综合久久88色综合天天6| 精品无码久久久久国产| 欧美激情国产精品日韩| 香蕉影院在线观看| 中文字幕亚洲一区| 亚洲精品国产一区二区三区| 国产精品久久毛片av大全日韩| 欧美一级二级三级| 卡一卡二国产精品 | 欧美午夜影院一区| 日本一区视频在线观看| 国产视频在线观看视频| 国产精品成久久久久三级| 精品乱码一区内射人妻无码| 国产视频一区在线| 国产五月天婷婷|