《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第8章_第1頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第8章_第2頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第8章_第3頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第8章_第4頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第8章_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8章分頁顯示

8.1用戶管理的分頁顯示

8.2在界面完成分頁控制

8.3在UserBean中完成分頁控制

8.4共享連接數(shù)據(jù)庫的代碼

小結(jié)

習題8實訓8:圖書信息分頁顯示

8.1用戶管理的分頁顯示

8.1.1功能描述

假設(shè)每次只顯示10個用戶,這10個用戶使用表格顯示。在表格的上面或者下面添加分頁顯示的功能。每一頁包括提示信息,即共有多少頁,這是第幾頁;包括4個超鏈接,可以鏈接到第一頁、上一頁、下一頁和最后一頁(如果已經(jīng)在第一頁了,則不能使用“上一頁”和“第一頁”超鏈接。如果已經(jīng)在最后一頁了,則不能使用“下一頁”和“最后一頁”超鏈接);還包括一個輸入框和按鈕,可以直接跳轉(zhuǎn)到某一頁。8.1.2運行效果

第一次訪問的時候,默認顯示第一頁,如圖8.1所示。其中,“第一頁”和“上一頁”超鏈接不能使用。

當點擊下一頁的時候,會顯示第二頁的內(nèi)容,而且4個超鏈接都可以使用,如圖8.2所示。

圖8.1第一頁

圖8.2不是第一頁也不是最后頁

圖8.3最后頁

8.1.3思路分析

分頁顯示與顯示全部記錄的功能相比,相同之處是同樣都需要先得到所有的數(shù)據(jù)。不同之處在于,后者顯示所有記錄,前者顯示部分記錄。

如何控制只顯示部分記錄呢?這就需要知道要顯示哪一部分記錄,也就是從哪條記錄開始顯示,顯示到哪條記錄。要想知道要顯示哪些記錄,就需要知道每次顯示多少記錄,要顯示第幾頁,有了這些信息才能算出從哪條記錄開始顯示,顯示到哪條記錄。所以這里需要知道兩項信息:每頁顯示的記錄數(shù)和顯示第幾頁。

每頁顯示的記錄數(shù)通常是定義好的,直接使用即可。顯示第幾頁則是動態(tài)的,第一次沒有人告訴你顯示第幾頁,就顯示第一頁,以后顯示第幾頁需要用戶選擇(通過超鏈接)或者輸入(輸入框和按鈕)。

所以需要設(shè)計傳遞頁碼的“第一頁”、“上一頁”、“下一頁”和“最后一頁”以及輸入框等。

另外,前面提到要顯示“共有多少頁”,需要根據(jù)總的記錄數(shù)以及每頁顯示的記錄數(shù)進行計算。最后一頁的控制也需要知道共有多少頁。

分頁顯示要顯示部分數(shù)據(jù),可以有三種處理方式:第一種,把所有信息全部查詢出來,然后在顯示的時候進行控制;第二種,只把要顯示的信息返回給界面,在界面上不用控制;第三種,只查詢滿足條件的記錄(例如第11條記錄到第20條記錄),通過查詢語句進行控制。

對于第三種方式,不同的數(shù)據(jù)庫的支持是不相同的,并且通常比較復雜,所以本書只討論前兩種方式。下面是MySQL數(shù)據(jù)庫提供的實現(xiàn)方式:

select*fromusertablelimitm,n

其中,m是要顯示的第一條記錄,n是要顯示的最后一條記錄。

8.2在界面完成分頁控制

在界面完成分頁控制,也就是在循環(huán)顯示的時候進行控制。前面介紹的顯示信息的代碼是通過<c:forEach>控制的,所以需要在<c:forEach>中添加代碼,只顯示滿足條件的記錄。<c:forEach>標簽提供了兩個屬性begin和end,可以控制集合中的記錄從什么地方開始顯示以及顯示到什么地方結(jié)束。

另外在分頁控制的時候需要得到總的頁數(shù),而總的頁數(shù)是由總的記錄數(shù)決定的,所以需要在UserBean中添加一個方法。

要在界面上完成分頁控制,需要完成下面的修改:

(1)修改UserBean,添加一個獲取總頁數(shù)的方法;

(2)修改FindAllUserServlet,添加調(diào)用獲取總頁數(shù)的方法的代碼以及傳遞總頁數(shù)的代碼;

(3)修改userlist.jsp,添加頁碼控制的代碼(上一頁、下一頁、最后一頁和第一頁等的控制代碼),以及控制信息顯示的代碼。

8.2.1修改UserBean.java

在UserBean中添加一個方法,該方法用于獲取記錄數(shù)。得到數(shù)據(jù)庫中記錄數(shù)的過程與查詢所有用戶信息的過程是相同的,只是SQL語句不同,最后得到的結(jié)果集不同。

SQL語句是:

selectcount(*)fromusertable

結(jié)果集只有一行一列,所以遍歷和取值比較簡單。只要將指針指向第一行,然后取出第一列內(nèi)容即可,代碼如下:

rs.next();

intn=rs.getInt(1);

然后根據(jù)記錄數(shù)計算頁數(shù),假設(shè)每頁顯示10條記錄,則頁數(shù)為:

pageCount=(n-1)/10+1;

獲取總頁數(shù)的方法如下:

publicIntegergetPageCount()

{

intpageCount=1;

//連接對象

Connectioncon=null;

//語句對象

Statementstmt=null;

//結(jié)果集對象

ResultSetrs=null;

//查詢語句

Stringsql="selectcount(*)fromusertable";

try

{

//創(chuàng)建上下文環(huán)境

ContextinitContext=newInitialContext();

//查找數(shù)據(jù)源

ContextenvContext=(Context)initContext.lookup("java:/comp/env");

DataSourceds=(DataSource)envContext.lookup("jdbc/TestDB");

//從連接池中獲取連接

con=ds.getConnection();

//創(chuàng)建語句對象

stmt=con.createStatement();

//執(zhí)行select語句,返回結(jié)果集對象

rs=stmt.executeQuery(sql);

//指向結(jié)果集的第一條

rs.next();

//得到第一列

intn=rs.getInt(1);

//計算總頁數(shù)

pageCount=(n-1)/10+1;

}catch(Exceptione)

{

}

finally

{

//關(guān)閉對象的順序:rsstmtcon

//與創(chuàng)建對象的順序相反

try{rs.close();}catch(Exceptione){}

try{stmt.close();}catch(Exceptione){}

try{con.close();}catch(Exceptione){}

}

//返回計算的結(jié)果

returnnewInteger(pageCount);

}8.2.2修改FindAllUserServlet

使用分頁顯示,每次處理的時候需要知道要訪問第幾頁,還需要知道一共有多少頁。

要顯示第幾頁是用戶在界面上點擊上一頁、下一頁、第一頁、最后一頁或者輸入第幾頁來確定的,所以需要獲取。第1次訪問的時候,不知道顯示第幾頁,默認顯示第1頁??梢允褂孟旅娴拇a:

intpageNo=1;//設(shè)置默認值

//獲取從頁面中傳遞的

第幾頁

信息

StringstrPageNo=request.getParameter("pageNo");

if(strPageNo!=null)

{

pageNo=Integer.parseInt(strPageNo);//把字符串轉(zhuǎn)換成數(shù)字

}另外需要把總的頁數(shù)傳遞到顯示頁面,獲取的方式和傳遞的方式與所有用戶信息的獲取和傳遞方式相同。下面是完整的代碼:

packagebookstore.servlets;

importjavax.servlet.*;

importjavax.servlet.http.*;

importjava.io.*;

importjava.util.*;

importbookstore.bean.*;

publicclassFindAllUserServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsIOException,ServletException

{

intpageNo=1;

//獲取從頁面中傳遞的

第幾頁

信息

StringstrPageNo=request.getParameter("pageNo");

if(strPageNo!=null)

{

pageNo=Integer.parseInt(strPageNo);//把字符串轉(zhuǎn)換成數(shù)字

}

//創(chuàng)建模型對象

UserBeanuser=newUserBean();

try{

//調(diào)用業(yè)務(wù)方法得到所有用戶列表

ArrayListuserlist=user.findAllUser();

//保存到request中

request.setAttribute("userlist",userlist);

//得到總的頁數(shù)

IntegerpageCount=user.getPageCount();

//把總頁數(shù)保存到request中request.setAttribute("pageCount“,pageCount);

//把當前頁傳遞過去

request.setAttribute(”pageNo“,pageNo);

//轉(zhuǎn)向顯示界面

RequestDispatcherrd=request.getRequestDispatcher(”userlist.jsp“);

rd.forward(request,response);

}catch(Exceptione){

//設(shè)置文檔類型

response.setContentType("text/html;charset=gb2312");

//獲取輸出流對象

PrintWriterout=response.getWriter();

//輸出異常信息

out.println(e.toString());

}

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsIOException,ServletException

{

doGet(request,response);

}

}8.2.3修改userlist.jsp

需要在顯示的時候增加提示信息“共有多少頁,這是第幾頁”。當前頁碼和共有多少頁的信息是通過FindAllUserServlet生成的,直接通過表達式語言顯示即可:

共有${pageCount}頁,這是第${pageNo}頁。

要添加到第一頁的超鏈接,可以使用下面的代碼:

<ahref="findAllUser?pageNo="1">第一頁</a>

findAllUser后面的問號表示要傳遞參數(shù),pageNo是參數(shù)的名字,1是參數(shù)的值,通過這種方式傳遞值與通過表單提交信息的方式的效果完全相同,相當于有一個表單元素,表單元素的名字是pageNo,表單元素的值是1。

要添加到上一頁的超鏈接,可以使用下面的代碼:

<ahref="findAllUser?pageNo=${pageNo-1}">上一頁</a>

要添加到下一頁的超鏈接,可以使用下面的代碼:

<ahref="findAllUser?pageNo=${pageNo+1}">下一頁</a>

要添加到最后一頁的超鏈接,可以使用下面的代碼:

<ahref="findAllUser?pageNo=${pageCount}">最后一頁</a>

如果當前頁是第一頁,則不用顯示“第一頁”和“上一頁”超鏈接;如果是最后一頁,則不用顯示“最后一頁”和“下一頁”超鏈接。對這兩種情況需要控制,進行控制的代碼如下:

<!--如果是第一頁,則不顯示超鏈接-->

<c:iftest=“${pageNo==1}”>

第一頁

上一頁

</c:if>

<!--如果不是第一頁,則顯示超鏈接-->

<c:iftest="${pageNo!=1}">

<ahref="findAllUser?pageNo=1">第一頁</a><ahref=“findAllUser?pageNo=${pageNo-1}”>上一頁</a>

</c:if>

<!--如果是最后一頁,則不顯示超鏈接-->

<c:iftest="${pageNo==pageCount}">

下一頁

最后一頁

</c:if>

<!--如果不是最后一頁,則顯示超鏈接-->

<c:iftest="${pageNo!=pageCount}">

<ahref="findAllUser?pageNo=${pageNo+1}">下一頁</a>

<ahref="findAllUser?pageNo=${pageCount}">最后一頁</a>

</c:if>

另外需要添加一個能夠輸入頁碼的輸入框,就是一個簡單的表單。代碼如下:

<formaction="findAllUser">

跳轉(zhuǎn)到<inputtype="text"name="pageNo">頁<inputtype="submit"value="跳轉(zhuǎn)">

</form>在顯示信息的時候,需要進行控制,只要為<c:forEach>添加begin和end屬性即可,控制的代碼如下:

<c:forEachitems="${userlist}"var="user"begin="${(pageNo-1)*10}"

end="${pageNo*10-1}">

修改后的完整代碼如下:

<%@pagecontentType="text/html;charset=gb2312"%>

<%@taglibprefix="c"uri="/jsp/jstl/core"prefix="c"%>

<h2align=center>所有用戶信息<h2>

<fontsize=4>

共有${pageCount}頁,這是第${pageNo}頁。

<!--如果是第一頁,則不顯示超鏈接-->

<c:iftest="${pageNo==1}">

第一頁

上一頁

</c:if>

<!--如果不是第一頁,則顯示超鏈接-->

<c:iftest="${pageNo!=1}">

<ahref="findAllUser?pageNo=1">第一頁</a>

<ahref="findAllUser?pageNo=${pageNo-1}">上一頁</a>

</c:if>

<!--如果是最后一頁,則不顯示超鏈接-->

<c:iftest="${pageNo==pageCount}">

下一頁

最后一頁

</c:if>

<!--如果不是最后一頁,則顯示超鏈接-->

<c:iftest="${pageNo!=pageCount}">

<ahref="findAllUser?pageNo=${pageNo+1}">下一頁</a>

<ahref="findAllUser?pageNo=${pageCount}">最后一頁</a>

</c:if>

<formaction="findAllUser">

跳轉(zhuǎn)到<inputtype="text"name="pageNo">頁<inputtype="submit"value="跳轉(zhuǎn)">

</form>

</font>

<tablealign=center>

<tr>

<th>用戶編號</th>

<th>用戶名</th>

<th>用戶類型</th>

<th>生日</th>

<th>學歷</th>

<th>地區(qū)</th>

<th>Email</th>

<th>地址</th>

</tr>

<c:forEachitems="${userlist}"var="user"begin="${(pageNo-1)*10}"

end="${pageNo*10-1}">

<tr>

<td>${user.userid}</td>

<td>${user.username}</td>

<td>

<c:iftest="${user.type==0}">普通用戶</c:if>

<c:iftest="${user.type==1}">管理員</c:if>

</td>

<td>${user.birthday}</td>

<td>${user.degree}</td>

<td>${user.local}</td>

<td>${user.email}</td>

<td>${user.address}</td>

</tr>

</c:forEach>

</table> 8.3在UserBean中完成分頁控制

8.3.1修改UserBean.java

仍然需要在UserBean中添加獲取總頁數(shù)的方法,方法與前面編寫的方法相同,這里不再給出。

因為分頁顯示需要在這里完成,所以需要修改查詢所有用戶信息的方法。要進行分頁控制,需要知道顯示第幾頁,所以需要在方法中增加一個參數(shù),表示第幾頁。為了方便,參數(shù)的類型設(shè)置為String類型。方法的定義如下:

publicArrayListfindAllUser(StringpageNo)另外在遍歷的時候,我們需要進行控制,過程是:把當前頁面的記錄添加到集合中,在遍歷的過程中,如果當前記錄的序號小于要顯示的第一個記錄的序號,則忽略這個記錄,繼續(xù)遍歷;如果當前記錄的序號大于要顯示的最后一個記錄,則后面的記錄不需要再遍歷。

計算開始記錄和結(jié)束記錄的代碼如下:

//要顯示的頁碼,默認值為1

intiPageNo=1;

try

{

//把字符串轉(zhuǎn)換成整數(shù)

iPageNo=Integer.parseInt(pageNo);

}catch(Exceptione){}

//要顯示的第一條記錄

intbegin=(iPageNo-1)*10+1;

//要顯示的最后一條記錄

intend=iPageNo*10;

//循環(huán)計數(shù)器

intindex=0;在循環(huán)中進行控制,在while中要添加的控制代碼如下:

//循環(huán)到第index條

index++;

//如果還沒有到要顯示的第一條記錄,則不處理,繼續(xù)遍歷

if(index<=begin)

continue;

//如果已經(jīng)大于最后一條記錄,則結(jié)束循環(huán)

if(index>end)

break;修改后的方法如下:

publicArrayListfindAllUser(StringpageNo)

{

ArrayListuserlist=newArrayList();

//連接對象

Connectioncon=null;

//語句對象

Statementstmt=null;

//結(jié)果集對象

ResultSetrs=null;

//查詢語句

Stringsql="select*fromusertable";

try

{

//創(chuàng)建上下文環(huán)境

ContextinitContext=newInitialContext();

//查找數(shù)據(jù)源

ContextenvContext=(Context)initContext.lookup("java:/comp/env");

DataSourceds=(DataSource)envContext.lookup("jdbc/TestDB");

//從連接池中獲取連接

con=ds.getConnection();

//創(chuàng)建語句對象

stmt=con.createStatement();

//執(zhí)行select語句,返回結(jié)果集對象

rs=stmt.executeQuery(sql);

//要顯示的頁碼,默認值為1

intiPageNo=1;

try

{

//把字符串轉(zhuǎn)換成整數(shù)

iPageNo=Integer.parseInt(pageNo);

}catch(Exceptione){}

//要顯示的第一條記錄

intbegin=(iPageNo-1)*10+1;

//要顯示的最后一條記錄

intend=iPageNo*10;

//循環(huán)計數(shù)器

intindex=0;

//對結(jié)果集進行遍歷

while(rs.next())

{

//循環(huán)到第index條

index++;

//如果還沒有到要顯示的第一條記錄,則不處理,繼續(xù)遍歷

if(index<begin)

continue;

//如果已經(jīng)大于最后一條記錄,則結(jié)束循環(huán)

if(index>end)

break;

//獲取結(jié)果集中的信息

StringtmpUserid=rs.getString(1);

StringtmpUsername=rs.getString(2);

//進行編碼轉(zhuǎn)換

tmpUsername=newString(tmpUsername.getBytes("8859_1"));

StringtmpUserpass=rs.getString(3);

StringtmpType=rs.getString(4);

java.util.DatetmpBirthday=rs.getDate(5);

StringtmpDegree=rs.getString(6);

tmpDegree=newString(tmpDegree.getBytes("8859_1"));

StringtmpLocal=rs.getString(7);

tmpLocal=newString(tmpLocal.getBytes("8859_1"));

StringtmpEmail=rs.getString(8);

StringtmpAddress=rs.getString(9);

//進行編碼轉(zhuǎn)換

tmpAddress=newString(tmpAddress.getBytes("8859_1"));

StringtmpComment=rs.getString(10);

//創(chuàng)建用戶對象

UserBeanuser=newUserBean();

//根據(jù)獲取的用戶信息初始化用戶對象

user.setUserid(tmpUserid);

user.setUsername(tmpUsername);

user.setUserpass(tmpUserpass);

user.setType(tmpType);

user.setBirthday(tmpBirthday);

user.setDegree(tmpDegree);

user.setLocal(tmpLocal);

user.setEmail(tmpEmail);

user.setAddress(tmpAddress);

user.setComment(tmpComment);

//把對象添加到集合中

userlist.add(user);

}

}catch(Exceptione)

{

}

finally

{

//關(guān)閉對象的順序:rsstmtcon

//與創(chuàng)建對象的順序相反

try{rs.close();}catch(Exceptione){}

try{stmt.close();}catch(Exceptione){}

try{con.close();}catch(Exceptione){}

}

//返回查詢到的所有對象

returnuserlist;

}8.3.2修改FindAllUserServlet

修改FindAllUserServlet時只需要修改調(diào)用業(yè)務(wù)方法的代碼,增加一個參數(shù)即可。

原來的代碼:

ArrayListuserlist=user.findAllUser();

修改后的代碼:

ArrayListuserlist=user.findAllUser(String.valueOf(pageNo));8.3.3修改userlist.jsp

原來的代碼如下:

<c:forEachitems="${userlist}"var="user"begin="${(pageNo-1)*10}"

end="pageNo*10"><tr>

<td>${user.userid}</td>

<td>${user.username}</td>

<td>

<c:iftest="${user.type==0}">普通用戶</c:if>

<c:iftest="${user.type==1}">管理員</c:if>

</td>

<td>${user.birthday}</td>

<td>${user.degree}</td>

<td>${user.local}</td>

<td>${user.email}</td>

<td>${user.address}</td>

<td>${ment}</td>

</tr>

</c:forEach>修改后的代碼(不需要在循環(huán)的時候控制)如下:

<c:forEachitems="${userlist}"var="user">

<tr>

<td>${user.userid}</td>

<td>${user.username}</td>

<td>

<c:iftest="${user.type==0}">普通用戶</c:if>

<c:iftest="$user.type==1}">管理員</c:if>

</td>

<td>${user.birthday}</td> <td>${user.degree}</td>

<td>${user.local}</td>

<td>${user.email}</td>

<td>${user.address}</td>

<td>${ment}</td>

</tr>

</c:forEach>

8.4共享連接數(shù)據(jù)庫的代碼

8.4.1編寫DBBean

代碼如下:

packagebeans;

importjava.sql.*;

importjavax.naming.*;

publicclassDBBean{

privateConnectioncon;

privateStatementstmt;

privateResultSetrs;

publicDBBean(){}

//得到連接

publicConnectiongetConnection()

throwsException

{

if(con==null){

//創(chuàng)建上下文環(huán)境

ContextinitContext=newInitialContext();

//查找數(shù)據(jù)源

ContextenvContext=(Context)initContext.lookup("java:/comp/env");

DataSourceds=(DataSource)envContext.lookup("jdbc/TestDB");

//從連接池中獲取連接

con=ds.getConnection();

}

returncon;

}

//執(zhí)行有結(jié)果集返回的sql語句

publicResultSetexecuteQuery(Stringsql)throwsException{

if(con==null)

thrownewException("沒有連接對象可用");

//創(chuàng)建語句對象

stmt=con.createStatement();

rs=stmt.executeQuery(sql);

returnrs;

}

//執(zhí)行更新語句

publicintexecuteUpdate(Stringsql)throwsException{

if(con==null)

thrownewException("沒有連接可用");

//創(chuàng)建語句對象

stmt=con.createStatement();

//執(zhí)行sql語句

returnstmt.executeUpdate(sql);

}

publicvoidclose(){

try{if(rs!=null)rs.close();}catch(Exceptione){}

try{stmt.close();}catch(Exceptione){}

try{con.close();}catch(Exceptione){}

}

}上面的代碼主要包含4個方法,功能分別如下:

●?getConnection,加載驅(qū)動程序并創(chuàng)建連接。

●?executeQuery,執(zhí)行有結(jié)果集返回的查詢語句,主要是select語句。

●?executeUpdate,執(zhí)行插入、刪除和修改語句,返回操作成功的記錄數(shù)。

●?close,關(guān)閉相關(guān)對象。

8.4.2使用DBBean

使用DBBean的過程如下:

(1)創(chuàng)建DBBean的對象。

(2)調(diào)用getConnection方法獲取連接。

(3)執(zhí)行SQL語句。

●如果SQL語句是select語句,則調(diào)用executeQuery。

●如果SQL語句是update、insert或者delete語句,則調(diào)用executeUpdate。

(4)調(diào)用close方法關(guān)閉相關(guān)對象。

在分頁顯示功能中獲取總頁數(shù)的方法getPageCount可以使用上面的DBBean。修改后的代碼如下:

publicIntegergetPageCount()

{

intpageCount=1;

//連接對象

Connectioncon=null;

//結(jié)果集對象

ResultSetrs=null;

//創(chuàng)建DBBean對象

DBBeandb=newDBBean();

//查詢語句

Stringsql="selectcount(*)fromusertable";

try

{

//獲取連接

con=db.getConnection();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論