寒江雪
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年10月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
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
31
1
2
3
4
5
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(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---企業應用的開源構件庫
搜索
積分與排名
積分 - 116238
排名 - 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)
主站蜘蛛池模板:
亚洲AV无码国产精品永久一区
|
国产成人精品免费大全
|
亚洲国产精品久久久天堂
|
99视频在线精品免费观看6
|
成人无码WWW免费视频
|
国产在亚洲线视频观看
|
亚洲国产精品日韩在线
|
亚洲V无码一区二区三区四区观看
|
四虎1515hm免费国产
|
桃子视频在线观看高清免费完整
|
免费无码作爱视频
|
国产高清视频免费在线观看
|
精品国产日韩亚洲一区在线
|
亚洲国产日韩综合久久精品
|
亚洲第一页中文字幕
|
亚洲今日精彩视频
|
亚洲AV无码久久精品色欲
|
中文字幕精品亚洲无线码一区应用
|
欧洲精品99毛片免费高清观看
|
国产精品免费久久久久久久久
|
国产成人免费午夜在线观看
|
男人j进入女人j内部免费网站
|
亚洲日韩国产精品乱
|
免费女人18毛片a级毛片视频
|
最好免费观看韩国+日本
|
久久久久国色AV免费看图片
|
亚洲av无码专区在线电影天堂
|
亚洲综合丁香婷婷六月香
|
亚洲人成电影院在线观看
|
亚洲熟妇无码久久精品
|
亚洲人成影院77777
|
亚洲13又紧又嫩又水多
|
亚洲人成小说网站色
|
亚洲熟女综合色一区二区三区
|
tom影院亚洲国产一区二区
|
亚洲无mate20pro麻豆
|
亚洲欧美成人一区二区三区
|
亚洲爆乳无码专区www
|
黄色三级三级免费看
|
青青青视频免费观看
|
高清永久免费观看
|