寒江雪
BlogJava
首頁
新隨筆
聯系
聚合
管理
posts - 8, comments - 174, trackbacks - 0
struts 2.0 + 原始 AJAX + XML
實現邏輯:
???? 實現user對象的select、delete,動態的將數據更新到表格中。
?????select: 服務端返回xml數據,在頁面進行數據顯示。
?????delete :服務端將刪除信息以xml格式返回,包含刪除狀態和刪除信息。
實現技術:
?????????struts 2.0 + AJAX + XML
主要文件:
?????????index.jsp????? user.java(數據模型)?????? UserAction.java(業務邏輯)?? struts.xml(struts2.0配置文件)
index.jsp頁面:
<%
@?page?language
=
"
java
"
?pageEncoding
=
"
UTF-8
"
%>
<%
????String?path?
=
?request.getContextPath();
????String?basePath?
=
?request.getScheme()?
+
?
"
://
"
????????????
+
?request.getServerName()?
+
?
"
:
"
?
+
?request.getServerPort()
????????????
+
?path?
+
?
"
/
"
;
%>
<!
DOCTYPE?HTML?PUBLIC?
"
-//W3C//DTD?HTML?4.01?Transitional//EN
"
>
<
html
>
????
<
head
>
????????
<
base?href
=
"
<%=basePath%>
"
>
????????
<
title
>
test?javascript
</
title
>
????
</
head
>
????
<
script?defer
=
"
defer
"
>
????
????????var?xmlHttp;???????
//
XMLHTTP對象
????????var?deleteRowId;???
//
刪除數據所在的行
????????
//
url:訪問的URL??afterMothod:請求返回時所調用的方法(回調方法)
????????function?showHint(url,afterMothod)?
{
????????????
try
{
????????????????xmlHttp?
=
?GetXmlHttpObject(afterMothod);
????????????????xmlHttp.open(
"
GET
"
,url,
false
);
????????????????xmlHttp.send(
null
);
????????????}
catch
(e)
{
????????????????alert(e);
????????????}
????????}
????????
????????
//
創建XMLHTTP對象
????????function?GetXmlHttpObject(handler)?
{
????????????var?objXmlHttp?
=
?
null
;
????????????
if
?(navigator.userAgent.indexOf(
"
Opera
"
)?
>=
?
0
)?
{
????????????????alert(
"
This?example?doesn't?work?in?Opera
"
);
????????????????
return
;
????????????}
????????????
if
?(navigator.userAgent.indexOf(
"
MSIE
"
)?
>=
?
0
)?
{
????????????????var?strName?
=
?
"
Msxml2.XMLHTTP
"
;
????????????????
if
?(navigator.appVersion.indexOf(
"
MSIE?5.5
"
)?
>=
?
0
)?
{
????????????????????strName?
=
?
"
Microsoft.XMLHTTP
"
;
????????????????}
????????????????
try
?
{
????????????????????objXmlHttp?
=
?
new
?ActiveXObject(strName);
????????????????????objXmlHttp.onreadystatechange?
=
?handler;
????????????????????
return
?objXmlHttp;
????????????????}
????????????????
catch
?(e)?
{
????????????????????alert(
"
Error.?Scripting?for?ActiveX?might?be?disabled
"
);
????????????????????
return
;
????????????????}
????????????}
????????????
if
?(navigator.userAgent.indexOf(
"
Mozilla
"
)?
>=
?
0
)?
{
????????????????objXmlHttp?
=
?
new
?XMLHttpRequest();
????????????????objXmlHttp.onload?
=
?handler;
????????????????objXmlHttp.onerror?
=
?handler;
????????????????
return
?objXmlHttp;
????????????}
????????}
????????
//
刷新數據
????????function?flush()?
{
????????????
try
{
????????????????
if
?(xmlHttp.readyState?
==
?
4
?
||
?xmlHttp.readyState?
==
?
"
complete
"
)?
{
????????????????????var?xmlDoc?
=
?
new
?ActiveXObject(
"
Microsoft.XMLDOM
"
);
????????????????????xmlDoc.async
=
false
;
????????????????????xmlDoc.loadXML(xmlHttp.responseText)??
????????????????
????????????????????
//
返回錯誤代碼
????????????????????
//
var?error?=?xmlDoc.parseError.errorCode;
????????????????????
//
alert(error?xmlDoc.parseError.reason:"XML格式正確");
????????????????????
????????????????????var?users
=
xmlDoc.getElementsByTagName(
"
user
"
);
????????????????????clearTable(userTable);
????????????????????
for
(var?i
=
0
;i
<
users.length;i
++
)
{
????????????????????????var?userRow
=
userTable.insertRow();
????????????????????????var?rowId
=
userRow.rowIndex;
????????????????????????
????????????????????????var?user
=
users[i];
????????????????????????var?userId
=
userRow.insertCell();
????????????????????????userId.innerHTML?
=
?user.getAttribute(
"
userId
"
);
????????????????????????var?userName
=
userRow.insertCell();
????????????????????????userName.innerHTML
=
user.getAttribute(
"
userName
"
);
????????????????????????var?userTel
=
userRow.insertCell();
????????????????????????userTel.innerHTML
=
user.getAttribute(
"
userTel
"
);
????????????????????????var?userOp
=
userRow.insertCell();
????????????????????????var?deleteUrl
=
"
user!delete.action?user.userId=
"
+
user.getAttribute(
"
userId
"
);
????????????????????????userOp.innerHTML
=
"
<a?href=javascript:deleteRowId=
"
+
rowId
+
"
;showHint('
"
+
deleteUrl
+
"
',drop);>刪除</a>
"
;
????????????????????}
????????????????}
????????????}
catch
(e)
{
????????????????alert(e.description);
????????????}
????????}
????????
//
刪除數據
????????function?drop()
{
????????????
????????????
if
?(xmlHttp.readyState?
==
?
4
?
||
?xmlHttp.readyState?
==
?
"
complete
"
)?
{
????????????????var?xmlDoc?
=
?
new
?ActiveXObject(
"
Microsoft.XMLDOM
"
);
????????????????xmlDoc.async
=
false
;
????????????????xmlDoc.loadXML(xmlHttp.responseText);
????????????????var?msg
=
xmlDoc.getElementsByTagName(
"
msg
"
)[
0
];
????????????????
????????????????
if
(msg.getAttribute(
"
isSuccess
"
)
==
"
false
"
)
{
????????????????????alert(msg.getAttribute(
"
msgString
"
));
????????????????}
else
{
????????????????????userTable.deleteRow(deleteRowId);
????????????????????alert(msg.getAttribute(
"
msgString
"
));
????????????????}
????????????}
????????}
????????
????????
//
清空表數據
????????function?clearTable(opTable)
{
????????????
????????????var?size
=
opTable.rows.length;
????????????
for
(var?i
=
2
;i
<
size;i
++
)
{
????????????????opTable.deleteRow(
2
);
????????????}
????????????
????????}
????????????
????
</
script
>
????
<
body
>
????????
<
center
>
????????????
<
h3
>
????????????????用戶列表
????????????
</
h3
>
????????????
<
br
>
????????????
<
table?id
=
"
userTable
"
?title
=
"
用戶列表
"
?width
=
"
50%
"
>
????????????????
<
tbody
>
????????????????????
<
tr?bgcolor
=
"
#54821f
"
>
????????????????????????
<
td?width
=
"
15%
"
>
????????????????????????????ID
????????????????????????
</
td
>
????????????????????????
<
td?width
=
"
15%
"
>
????????????????????????????姓名
????????????????????????
</
td
>
????????????????????????
<
td?width
=
"
20%
"
>
????????????????????????????電話
????????????????????????
</
td
>
????????????????????????
<
td?width
=
"
5%
"
>
????????????????????????????操作
????????????????????????
</
td
>
????????????????????
<
tr
>
????????????????
</
tbody
>
????????????
</
table
>
????????????
<
br
>
????????????
<
br
>
????????????
<
br
>
????????????
<
button?onclick
=
"
showHint('user!list.action',flush);
"
>
????????????????刷新
????????????
</
button
>
????????
</
center
>
????
</
body
>
</
html
>
user.java
package
?com.wen.test;
public
?
class
?User?
{
????
private
?String?userId;
????
private
?String?userName;
????
private
?String?userTel;
????
public
?String?getUserId()?
{
????????
return
?userId;
????}
????
public
?
void
?setUserId(String?userId)?
{
????????
this
.userId?
=
?userId;
????}
????
public
?String?getUserName()?
{
????????
return
?userName;
????}
????
public
?
void
?setUserName(String?userName)?
{
????????
this
.userName?
=
?userName;
????}
????
public
?String?getUserTel()?
{
????????
return
?userTel;
????}
????
public
?
void
?setUserTel(String?userTel)?
{
????????
this
.userTel?
=
?userTel;
????}
}
UserAction.java
package
?com.wen.test;
import
?java.util.List;
import
?java.util.Vector;
import
?com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings(
"
serial
"
)
public
?
class
?UserAction?
extends
?ActionSupport
{
????
private
?User?user;
????
private
?List
<
User
>
?userList;
????
private
?List
<
String
>
?msgList;
????
????
public
?String?flush()
{
????????
return
?SUCCESS;
????}
????
????
public
?String?delete()
{
????????
????????
int
?id
=
Integer.parseInt(user.getUserId());
????????msgList
=
new
?Vector
<
String
>
();
????????
if
(id
<
0
||
id
>
3
)
{
????????????msgList.add(
"
false
"
);
????????????msgList.add(
"
刪除ID為:
"
+
id
+
"
用戶失敗!!
"
);
????????}
else
{
????????????
//
做刪除操作
????????????msgList.add(
"
true
"
);
????????????msgList.add(
"
刪除ID為:
"
+
id
+
"
用戶成功!!
"
);
????????}
????????
return
?SUCCESS;
????}
????
????
public
?String?list()
{
????????
????????userList
=
new
?Vector
<
User
>
();
????????
????????user
=
new
?User();
????????user.setUserId(
"
0
"
);
????????user.setUserName(
"
wen
"
);
????????user.setUserTel(
"
029-82507114
"
);
????????userList.add(user);
????????
????????user
=
new
?User();
????????user.setUserId(
"
1
"
);
????????user.setUserName(
"
peng
"
);
????????user.setUserTel(
"
029-34650060
"
);
????????userList.add(user);
????????
????????user
=
new
?User();
????????user.setUserId(
"
2
"
);
????????user.setUserName(
"
tao
"
);
????????user.setUserTel(
"
13570854091
"
);
????????userList.add(user);
????????
????????user
=
new
?User();
????????user.setUserId(
"
2
"
);
????????user.setUserName(
"
tao
"
);
????????user.setUserTel(
"
13570854091
"
);
????????userList.add(user);
????????
????????user
=
new
?User();
????????user.setUserId(
"
2
"
);
????????user.setUserName(
"
tao
"
);
????????user.setUserTel(
"
13570854091
"
);
????????userList.add(user);
????????
????????user
=
new
?User();
????????user.setUserId(
"
2
"
);
????????user.setUserName(
"
tao
"
);
????????user.setUserTel(
"
13570854091
"
);
????????userList.add(user);
????????
????????user
=
new
?User();
????????user.setUserId(
"
2
"
);
????????user.setUserName(
"
tao
"
);
????????user.setUserTel(
"
13570854091
"
);
????????userList.add(user);
????????
????????
return
?SUCCESS;
????}
????
????
public
?User?getUser()?
{
????????
return
?user;
????}
????
public
?
void
?setUser(User?user)?
{
????????
this
.user?
=
?user;
????}
????
public
?List?getMsgList()?
{
????????
return
?msgList;
????}
????
public
?List?getUserList()?
{
????????
return
?userList;
????}
}
struts.xml
<?
xml?version="1.0"?encoding="UTF-8"
?>
<!
DOCTYPE?struts?PUBLIC
????????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"
????????"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<
struts
>
????
<
constant?
name
="struts.enable.DynamicMethodInvocation"
????????value
="true"
?
/>
????
<
constant?
name
="struts.devMode"
?value
="true"
?
/>
????
<
package?
name
="users"
?extends
="struts-default"
>
????????
<
result-types
>
????????????
<
result-type?
name
="userInfo"
?class
="com.wen.test.User"
?
/>
????????????
<
result-type?
name
="userList"
?class
="java.util.List"
?
/>
????????????
<
result-type?
name
="msgList"
?class
="java.util.List"
?
/>
????????
</
result-types
>
????????
<
action?
name
="user"
?class
="com.wen.test.UserAction"
>
????????????
<
result
>
/result.jsp
</
result
>
????????
</
action
>
????
</
package
>
</
struts
>
END
????希望對初學著有所幫助,歡迎大家一起探討java 問題!!
posted on 2007-08-15 13:05
月月鳥
閱讀(1825)
評論(9)
編輯
收藏
所屬分類:
ajax
FeedBack:
#
re: struts 2.0 + 原始 AJAX + XML
2007-08-15 17:18 |
編程、設計是職業更是愛好
不錯,大道至簡。對于WEB開發,濫用的Tag是災難。
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML
2009-02-12 23:09 |
繼文
上面的樓主:你上面的例子能正常測試嗎?我怎么得到action中返回的一個頁面呢,希望在解釋一下。
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML
2011-10-19 12:22 |
ww
最突出的功能自然是調試(Debug),可以對Java代碼,JavaScript,JQuery,Ajax等技術進行調試。 其他編輯功能拋開不看,這點遠勝Eclipse。 首先查看Map類型的對象,如果實現類采用的是哈希映射,則會自動過濾空的Entry實例。 不像Eclipse,只能在默認的toString()方法中尋找你所要的key。 其次,需要動態Evaluate一個表達式的值,比如我得到了一個類的實例,但是并不知曉它的API,可以通過Code Completion點出它所支持的方法,這點Eclipse無法比擬。 最后,在多線程調試的情況下,Log on console的功能可以幫你檢查多線程執行的情況。 前面已經說過了IDEA所提倡的是智能編碼,是減少程序員的工作,那么IDEA具體又有哪些值得推崇呢?總結以下25點,希望能有個比較全面的介紹。 1. 智能的選取。在很多時候我們要選取某個方法,或某個循環或想一步一步從一個變量到整個類慢慢擴充著選取,IDEA就提供這種基于語法的選擇,在默認設置中Ctrl+w,可以實現選取范圍的不斷擴充,這種方式在重構的時候尤其顯得方便。 2. 豐富的導航模式。IDEA提供了豐富的導航查看模式,例如ctrl+e顯示最近打開過的文件,ctrl+n顯示你希望顯示的類名查找框 (該框同樣有智能補充功能,當你輸入字母后IDEA將顯示所有候選類名)。在最基本的project試圖中,你還可以選擇多種的試圖方式。 3. 歷史記錄功能。不用通過版本管理服務器,單純的IDEA就可以查看任何工程中文件的歷史記錄,但版本恢復時你可以很容易的將其恢復。 4. JUnit的完美支持。 5. 對重構的優越支持。IDEA是所有IDE中最早支持重構的,其優秀的重構能力一直是其主要賣點之一。 6. 編碼輔助。java規范中提倡的tostring(),hashcode(),equals(),以及所有的get/set方法,你可以不用進行任何的輸入就可以實現代碼的自動生成,從而把你從無聊的基本方法編碼中解放出來。 7. 靈活的排版功能。基本所有的IDE都有重排版功能,但僅有IDEA的是人性的,因為她支持排版模式的定制,你可以根據不同的項目要求采用不同的排版方式。 8. XML的完美支持。 9. 簡潔易用的GUI界面。 10. 與文件系統自動同步。當你最小化IDEA,直接對文件進行編輯之后,重新打開IDEA后IDEA將自動的完成文件的更新,而不用重新導入工程或刷新工程。 11. 自定義的快捷鍵。強大的快捷鍵設置,基本可以讓程序員離開鼠標工作。 12. 動態語法檢測。任何不符合java規范,自己預定義的規范,累贅都將在頁面中加亮顯示。 13. 代碼檢查。對代碼進行自動分析,檢測不符合規范的,存在風險的代碼,并加亮顯示。 14. 對JSP的完全支持。不需要任何的插件,完全支持JSP。 15. 智能編輯。代碼輸入過程中,自動補充方法或類。 16. EJB支持。不需要任何插件完全支持EJB(6.0 支持ejb3.0) 17. 列編輯模式。用過UtralEdit的肯定對其的列編輯模式贊賞不已,因為她減少了很多很多的無聊重復工作,而IDEA完全支持該模式,從而更加提高了編碼效率。 18. 智能模板。預置模板可以讓你把經常用到的方法編輯進模板,使用時你只用輸入簡單的幾個字母就可以完成全部代碼的編寫。例如使用比較高的public static void main(String[] args){}你可以在模板中預設pm為該方法,輸入時你只要輸入pm再按代碼輔助鍵,IDEA將完成代碼的自動輸入。 19. 完美的自動代碼完成。智能檢查類中方法,當發現方法名只有一個時自動完成代碼輸入,從而減少剩下代碼的編寫工作。 20. Ant 支持。不需要任何的第三方插件。 21. 不使用代碼檢查。自動檢查代碼中不使用的代碼,并給出提示,從而使代碼更高效。 22. 智能代碼。自動檢查代碼,發現與預置規范有出入的代碼給出提示,若程序員同意修改自動完成修改。例如代碼:String str = "Hello Intellij " + "IDEA"; IDEA將給出優化提示,若程序員同意修改IDEA將自動將代碼修改為:String str = "Hello Intellij IDEA"; 23. 正則表達的查找和替換功能。查找替代支持正則表達,從而提高效率。 24. JavaDoc預覽支持。支持JavaDoc的預覽功能,在JavaDoc代碼中ctrl+q顯示JavaDoc的結果,從而提高doc文檔的質量。 25. 程序員意圖支持。當程序員編碼時IDEA時時檢測你的意圖,或提供建議,或直接幫你完成代碼。
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML[未登錄]
2011-10-27 17:46 |
pp
http://www.aqee.net/docs/draw-a-stickman/
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML[未登錄]
2011-11-02 10:55 |
pp
2011-9-29 2
2011-10-10 0.5
2011-10-11 0.5
2011-10-12 2
2011-10-13 0.5
2011-10-17 0.5
2011-10-18 1
2011-10-19 3
2011-10-20 1
2011-10-23 12
2011-10-24 0.5
2011-10-25 1
2011-10-29 7.5
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML[未登錄]
2011-11-03 09:19 |
qq
2011/10/12 2
2011/10/17 0.5
2011/10/18 1
2011/10/19 0.5
2011/10/20 1
2011/10/23 11
2011/10/25 1
2011/10/29 7.5
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML
2012-02-18 08:22 |
月月鳥
http://blog.csdn.net/ocelight/article/details/4510192
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML
2012-02-18 08:26 |
月月鳥
http://topic.csdn.net/u/20110113/10/801168dd-a390-40cb-b381-53021e3d4e4e.html?26658
回復
更多評論
#
re: struts 2.0 + 原始 AJAX + XML[未登錄]
2013-05-30 11:05 |
bb
http://blog.csdn.net/lihongzhai/article/details/2074031
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
struts2.0 + ajax + xml (附源碼)
struts 2.0 + 原始 AJAX + XML
Copyright ©2025 月月鳥 Powered By:
博客園
模板提供:
滬江博客
<
2011年11月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(5)
給我留言
查看公開留言
查看私人留言
隨筆分類
(8)
ajax(2)
eclipse
flex(1)
hibernate
ibatis
J2EE(1)
J2SE(1)
javascript
jsf
spring
struts
webwork
其他(3)
報表(report)
隨筆檔案
(8)
2007年8月 (8)
文章分類
(1)
flex
其他(1)
新技術
文章檔案
(1)
2012年4月 (1)
其他
ext 中文文檔中心
javascirpt封裝庫API中文文檔
Flex中文網站
ORM Tool
中間件技術
娛樂
技術
dhtml學習
ext中文學習中心
Flex程序示例
prototype1.5.0中文API在線版
SpringSide---企業應用的開源構件庫
搜索
積分與排名
積分 - 116234
排名 - 504
最新隨筆
1.?PostgreSQL 數據庫性能提升的幾個方面
2.?收藏微軟面試智力題 (附答案)
3.?struts2.0 + ajax + xml (附源碼)
4.?經典收藏----和大家一同分享
5.?嘗試Flex3 令人振奮的新功能——framework持久化緩存
6.?LOG4J 之經典篇
7.?swing 選擇日期控件
8.?探討J2EE開發框架-----高手留言
9.?struts 2.0 + 原始 AJAX + XML
最新評論
1.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--月月鳥
2.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--月月鳥
3.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--pt
4.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--pt
5.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--pt
6.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--pt
7.?re: PostgreSQL 數據庫性能提升的幾個方面
黃金時時彩全能計劃王
黃金時時彩全能計劃王
--pt
8.?re: swing 選擇日期控件
@交口稱贊 郵箱arvinsw521403@163.com
--zhangyi
9.?re: swing 選擇日期控件
@交口稱贊 求下拉出時間的代碼!感激不盡
--zhangyi
10.?re: PostgreSQL 數據庫性能提升的幾個方面
評論內容較長,點擊標題查看
--pt
評論排行榜
1.?收藏微軟面試智力題 (附答案)(104)
2.?struts2.0 + ajax + xml (附源碼)(17)
3.?swing 選擇日期控件(13)
4.?探討J2EE開發框架-----高手留言(10)
5.?struts 2.0 + 原始 AJAX + XML(9)
6.?LOG4J 之經典篇(7)
7.?嘗試Flex3 令人振奮的新功能——framework持久化緩存(3)
8.?經典收藏----和大家一同分享(1)
主站蜘蛛池模板:
国产一级淫片视频免费看
|
亚洲国产精品乱码在线观看97
|
大地资源免费更新在线播放
|
久久免费观看视频
|
亚洲成a∨人片在无码2023
|
亚洲视频在线观看地址
|
久久综合亚洲色HEZYO国产
|
在线永久免费观看黄网站
|
足恋玩丝袜脚视频免费网站
|
久久一区二区免费播放
|
美女免费视频一区二区
|
亚洲AV日韩综合一区尤物
|
亚洲国产综合精品中文第一区
|
亚洲国产中文v高清在线观看
|
成年女人男人免费视频播放
|
亚洲中文字幕无码永久在线
|
性xxxx黑人与亚洲
|
亚洲日本在线看片
|
亚洲爆乳无码专区
|
在线亚洲精品自拍
|
国产成人精品日本亚洲专区
|
2022免费国产精品福利在线
|
午夜在线亚洲男人午在线
|
亚洲日韩av无码中文
|
亚洲国产系列一区二区三区
|
亚洲人成网站日本片
|
亚洲福利一区二区三区
|
中文字幕亚洲免费无线观看日本
|
污污网站18禁在线永久免费观看
|
国产福利电影一区二区三区,免费久久久久久久精
|
亚洲欧美日韩中文无线码
|
亚洲精品免费网站
|
亚洲人成色4444在线观看
|
亚洲欧美日韩中文二区
|
亚洲免费综合色在线视频
|
亚洲欧美国产日韩av野草社区
|
亚洲综合av一区二区三区不卡
|
亚洲免费观看视频
|
国产免费一区二区三区在线观看
|
日韩免费高清播放器
|
久久久高清日本道免费观看
|