第6章Struts2之?dāng)?shù)據(jù)校驗與國際化_第1頁
第6章Struts2之?dāng)?shù)據(jù)校驗與國際化_第2頁
第6章Struts2之?dāng)?shù)據(jù)校驗與國際化_第3頁
第6章Struts2之?dāng)?shù)據(jù)校驗與國際化_第4頁
第6章Struts2之?dāng)?shù)據(jù)校驗與國際化_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第6章章 Struts2高級應(yīng)用高級應(yīng)用l6.1 類型轉(zhuǎn)換l6.2 數(shù)據(jù)校驗的方法l6.3 Struts2實現(xiàn)國際化的方法6.1 類型轉(zhuǎn)換器類型轉(zhuǎn)換器 lStruts2已經(jīng)內(nèi)建了字符串類型和如下類型之間相互轉(zhuǎn)已經(jīng)內(nèi)建了字符串類型和如下類型之間相互轉(zhuǎn)換的轉(zhuǎn)換器換的轉(zhuǎn)換器。lBoolean和booleanl完成字符串和布爾值之間的轉(zhuǎn)換lCharacter和charl完成字符串和字符值之間的轉(zhuǎn)換lLong和longl完成字符串和長整型值之間的轉(zhuǎn)換lFloat和floatl完成字符串和單精度浮點值之間的轉(zhuǎn)換lDouble和doublel完成字符串和雙精度浮點值之間的轉(zhuǎn)換lDatel完成字符串和日期類

2、型之間的轉(zhuǎn)換,默認(rèn)采用請求本地Locale的SHORT格式l數(shù)組l默認(rèn)情況下,數(shù)組元素是字符串l集合l在默認(rèn)情況下,假定集合元素類型為String,則創(chuàng)建一個新的ArrayList封裝所有字符串如果需要將HTTP請求參數(shù)轉(zhuǎn)換成上面這些類型,則無需開發(fā)者進(jìn)行任何特殊的處理6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式l借助于內(nèi)置的類型轉(zhuǎn)換器,Struts2可以完成字符串與基本類型之間的類型轉(zhuǎn)換l借助于OGNL表達(dá)式,Struts2允許以另一種方式將請求參數(shù)轉(zhuǎn)換成復(fù)合類型l示例代碼(ognlConvert)lUser.javalloginAction.javalstruts.xmllinput.

3、jsp6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式lUser.javapublic class User private String name; private String pass;/name屬性的setter和getter方法public void setName(String name) = name; public String getName() return ; /pass屬性的setter和getter方法public void setPass(String pass) this.pass = pass; public String

4、getPass() return this.pass;public class LoginAction implements Action/User類型屬性封裝請求參數(shù)private User user;private String tip;/user屬性的setter和getter方法public void setUser(User user) this.user = user; public User getUser() return this.user; /tip屬性的setter和getter方法public void setTip(String tip) this.tip = tip

5、;public String getTip() return this.tip;6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式lLoginAction.jsppublic String execute() throws Exception/通過user屬性的name屬性和pass屬性來判斷控制邏輯if (getUser().getName().equals(“j2ee)& getUser().getPass().equals(“tust) )setTip(登錄成功);return SUCCESS;elsesetTip(登錄失??!);return ERROR;6.1.1 引用類型的轉(zhuǎn)換方式引用

6、類型的轉(zhuǎn)換方式6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式lstruts.xml(片段)/welcome.jsp/error.jsp6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式linput.jsp(片段) 6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式lwelcome.jsp(片段)轉(zhuǎn)換成功用戶名為:密碼為:6.1.1 引用類型的轉(zhuǎn)換方式引用類型的轉(zhuǎn)換方式lStruts2會把參數(shù)的值賦給Action實例的user屬性的name屬性l并將user.pass參數(shù)的值賦值給Action實例的user屬性的pass屬性。l注意:l系統(tǒng)必須為復(fù)合類(User類)提供無參構(gòu)造方

7、法l如果希望使用請求參數(shù)的形式為Action實例的user屬性的name屬性賦值,則必須為user屬性對應(yīng)的復(fù)合類(User類)提供setName()方法。因為Struts2是通過調(diào)用該方法來為該屬性賦值的。當(dāng)然Action中還應(yīng)該包含getUser()方法。6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l需要把一個字符串轉(zhuǎn)換成一個復(fù)合對象l電話號碼:User對象: abc, xyzlStruts2不知道如何完成字符串和復(fù)合對象之間的轉(zhuǎn)換。l例子:localConverterlinput.jsplLoginAction.java6.1.2 自定義類型轉(zhuǎn)換

8、自定義類型轉(zhuǎn)換6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換public class LoginAction implements Action/User類型屬性封裝請求參數(shù)private User user;private String tip;/屬性的setter和getter方法public String execute() throws Exception /通過user屬性的name屬性和pass屬性來判斷控制邏輯if (getUser().getName().equals(“j2ee)& getUser().getPass().equals(“tust) ) setTip(登錄成功);

9、return SUCCESS; else setTip(登錄失??!);return ERROR;6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l1、定義類型轉(zhuǎn)換器l2、在Web應(yīng)用中注冊類型轉(zhuǎn)換器6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l自定義類型轉(zhuǎn)換l1、實現(xiàn)TypeConverter接口 Xpublic interface TypeConverterpublic Object convertValue(Map context,Object target,Member member,String propertyName,Object value,Class toType);6.1.2 自定義類型

10、轉(zhuǎn)換自定義類型轉(zhuǎn)換l2、繼承DefaultTypeConverterl重寫convertValue()方法l負(fù)責(zé)完成類型的轉(zhuǎn)換,雙向轉(zhuǎn)換:字符串 User實例l通過判斷參數(shù)toType(需要轉(zhuǎn)換的目標(biāo)類型)的類型ltoType=String.classltoType=User.classlconvertValue()方法的參數(shù)和返回值的意義lcontext:類型轉(zhuǎn)換的上下文,即Action的上下文lvalue:需要轉(zhuǎn)換的參數(shù),根據(jù)轉(zhuǎn)換方向不一樣,其值亦不同ltoType:轉(zhuǎn)換的目標(biāo)類型6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l UserConverter.javapublic class Us

11、erConverter extends DefaultTypeConverter /類型轉(zhuǎn)換器必須重寫convertValue方法,該方法需要完成雙向轉(zhuǎn)換public Object convertValue(Map context, Object value, Class toType)/當(dāng)需要將字符串向User類型轉(zhuǎn)換時if (toType = User.class )/系統(tǒng)的請求參數(shù)是一個字符串?dāng)?shù)組String params = (String)value;/創(chuàng)建一個User實例User user = new User();/只處理請求參數(shù)數(shù)組第一個數(shù)組元素,并將該字符串以英文逗號分割成兩

12、個字符串String userValues = params0.split(,);/為User實例賦值user.setName(userValues0);user.setPass(userValues1);/返回轉(zhuǎn)換來的User實例return user;為何是字符串?dāng)?shù)組而不是字符串?文本框:用戶輸入一個普通字符串下拉列表框(可選多項):對應(yīng)的請求參數(shù)是字符串?dāng)?shù)組。為了考慮到所有情形,因而把請求參數(shù)視為字符串?dāng)?shù)組。對于文本框中提供的請求參數(shù),轉(zhuǎn)換器把它當(dāng)成長度為1的數(shù)組。6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換else if (toType = String.class )/將需要轉(zhuǎn)換的值強制

13、類型轉(zhuǎn)換為User實例User user = (User) value;return ; return null ; 6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l配置類型轉(zhuǎn)換器的方式:l配置局部類型轉(zhuǎn)換器l僅僅對某個Action的屬性起作用l配置全局類型轉(zhuǎn)換器l對所有Action的特定類型的屬性都會生效局部類型轉(zhuǎn)換器的配置文件的名稱為“類名-perties”,其中類名為使用該類型轉(zhuǎn)換器的Action類的名稱。如 LoginAperties 需要創(chuàng)建一個名為“perties”的配置文件。6.

14、1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l局部類型轉(zhuǎn)換器 (LoginAperties)l與Action所在路徑一致l增加的配置內(nèi)容l=l:需要進(jìn)行類型轉(zhuǎn)換的屬性l:類型轉(zhuǎn)換器的實現(xiàn)類lLoginApertiesluser=org.crazyit.app.converter.UserConverter指定user屬性需要使用UserConverter類來完成類型轉(zhuǎn)換6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l局部類型轉(zhuǎn)換器l只能對指定Action、指定屬性起作用l如果應(yīng)用中有多個Action都包含了User類型的屬性,或者一

15、個Action中包含了多個User類型的屬性,更適合用全局類型轉(zhuǎn)換器l全局類型轉(zhuǎn)換器l提供文件perties,置于應(yīng)用程序的類加載路徑下lorg.crazyit.app.domain.User=org.crazyit.app.converter.UserConverter指定org.crazyit.app.domain.User類型需要使用UserConverter來完成類型轉(zhuǎn)換6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l3、繼承StrutsTypeConverterlStrutsTypeConverter類是DefaultTypeConverter類的子

16、類l實現(xiàn)了convertValue()方法,將兩個不同轉(zhuǎn)換方向替換成不同方法lconvertFromString()l當(dāng)需要把字符串轉(zhuǎn)換成復(fù)合類型時lconvertToString()l當(dāng)需要把復(fù)合類型轉(zhuǎn)換為字符串時l改寫的 UserConverter類l參數(shù)說明l注冊方法6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換l改寫的UserConverter類public class UserConverter extends StrutsTypeConverter /實現(xiàn)將字符串類型轉(zhuǎn)換成復(fù)合類型的方法public Object convertFromString(Map context, String

17、 values , Class toClass)/創(chuàng)建一個User實例User user = new User();/只處理請求參數(shù)數(shù)組第一個數(shù)組元素,/并將該字符串以英文逗號分割成兩個字符串String userValues = values0.split(,);/為User實例賦值user.setName(userValues0);user.setPass(userValues1);/返回轉(zhuǎn)換來的User實例return user;6.1.2 自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換/實現(xiàn)將復(fù)合類型轉(zhuǎn)換成字符串類型的方法public String convertToString(Map context

18、, Object o)/將需要轉(zhuǎn)換的值強制類型轉(zhuǎn)換為User實例User user = (User) o;return ;6.1.3 類型轉(zhuǎn)換中的錯誤處理類型轉(zhuǎn)換中的錯誤處理l在表示層處理數(shù)據(jù)過程中,經(jīng)常會出現(xiàn)沒有嚴(yán)格按照頁面要求進(jìn)行的數(shù)據(jù)錄入操作l輸入電話號碼 :02260274469l實際上,表現(xiàn)層數(shù)據(jù)涉及兩個處理l數(shù)據(jù)校驗&類型轉(zhuǎn)換l只有當(dāng)輸入數(shù)據(jù)時有效數(shù)據(jù)時,才可以進(jìn)行有效地類型轉(zhuǎn)換l有效類型轉(zhuǎn)換是基礎(chǔ),然后才做數(shù)據(jù)校驗l為了處理類型轉(zhuǎn)換錯誤,Strus 2提供了處理類型轉(zhuǎn)換錯誤的攔截器,名稱為“conversionError”,在“struts-default.xml”文件包含對該攔

19、截器的配置。l此攔截器負(fù)責(zé)將對應(yīng)錯誤封裝成表單域錯誤(FieldError),并將它們放入ActionContext中。l輸出出錯信息:6.1.3 類型轉(zhuǎn)換中的錯誤處理類型轉(zhuǎn)換中的錯誤處理輸出的錯誤提示Struts2的表單標(biāo)簽使用xhtml主題時,本身就會輸出錯誤提示6.2 數(shù)據(jù)校驗的方法數(shù)據(jù)校驗的方法l6.2.1 數(shù)據(jù)校驗的必要性l6.2.2 通過Action中的validate()方法實現(xiàn)校驗l6.2.3通過Xwork框架實現(xiàn)校驗6.2.1 輸入校驗的必要性l用戶在客戶端的瀏覽器中輸入信息,通過網(wǎng)絡(luò)提交到服務(wù)器,服務(wù)器對接收的信息進(jìn)行處理并將結(jié)果返回給用戶。l要想保證這一過程能夠順利執(zhí)行就

20、必須保證用戶提交信息的合法性。l輸入校驗l確保數(shù)據(jù)信息的有效性l保證Web應(yīng)用的安全性6.2.1 輸入校驗的必要性l輸入校驗分為兩部分:l客戶端校驗:l通常使用腳本語言校驗,例如JavaScript。l校驗輸入信息是否滿足一定的要求或滿足一定的結(jié)構(gòu),如 校驗輸入的文本是否為空校驗輸入的文本是否是數(shù)字校驗E-mail的格式是否正確l優(yōu)點:可以快速提示用戶輸入錯誤,提高響應(yīng)速度。防止將無效數(shù)據(jù)發(fā)送到服務(wù)器,從而減輕服務(wù)器的負(fù)擔(dān)。6.2.1 輸入校驗的必要性l服務(wù)端校驗:l通過檢查HTTP請求信息以校驗輸入是否正確l有些數(shù)據(jù)必須通過程序交給服務(wù)器去處理,l校驗注冊的用戶名是否存在l校驗登錄的密碼是否

21、正確l另一個原因就是如果用戶瀏覽器禁用了腳本執(zhí)行,客戶端校驗就會失效。l安全性校驗l錯誤登錄次數(shù)限制l使用訪問來源校驗l實現(xiàn)方式l通過Action中的validate()方法l使用xWork校驗框架6.2.2 編程方式編程方式實現(xiàn)實現(xiàn)輸入輸入校驗校驗l在Action類中手動創(chuàng)建校驗數(shù)據(jù)的代碼,包括:l在execute()方法中實現(xiàn)校驗:l使用validate()方法實現(xiàn)校驗:l實現(xiàn)校驗邏輯與業(yè)務(wù)邏輯的分離。lvalidate*()的使用:l可以為不同的方法配置其獨立的校驗代碼l只需將相同的校驗邏輯放在validate()方法即可。6.2.2 編程方式實現(xiàn)輸入校驗編程方式實現(xiàn)輸入校驗lvalid

22、ate*()使用的示例:public class ValidateTest extends ActionSupport /省略屬性及其set、get方法public String login() /用于登錄return login;public String regist() /用于注冊return regist;public void validate() /相同的校驗/省略校驗代碼public void validateLogin() /只對login()方法的請求執(zhí)行校驗/省略校驗代碼public void validateRegist() /只對regist()方法的請求執(zhí)行校驗/省略

23、校驗代碼6.2.2 編程方式編程方式實現(xiàn)實現(xiàn)輸入輸入校驗校驗lP.170 ch6-3工程6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l使用validate方法校驗時,如果Web應(yīng)用中存在大量Action就需要多次重寫validate方法,這使得代碼非常繁瑣。lStruts 2的校驗框架本質(zhì)上是基于XWork的validator框架,因此可以使用XWork的validator框架來對Struts 2進(jìn)行數(shù)據(jù)校驗, 以減少代碼量。l使用XWork的validator框架實現(xiàn)數(shù)據(jù)校驗,只需編寫一個簡單的驗證文件即可。 6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l修改ch6-3的

24、例子l將LoginAction.java中的validate()方法和validateLog()方法刪除l在com.action包下創(chuàng)建驗證文件LoginAction-validation.xml文件6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l驗證文件的幾個關(guān)鍵問題l命名規(guī)則l校驗配置方式l校驗器6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l命名規(guī)則lactionName-validation.xml,actionName是指需要校驗的Action的類名,且該文件與Action類同路徑l當(dāng)用戶提交請求后,系統(tǒng)會自動加載該文件完成對用戶請求的校驗。l當(dāng)一個Action中有多

25、個業(yè)務(wù)處理方法,需要多個校驗邏輯時,定義校驗文件actionName-methodName-validation.xml6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)lStruts2框架的數(shù)據(jù)校驗步驟lStruts2框架中的類型轉(zhuǎn)換器對HTTP請求的數(shù)據(jù)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,得到符合類型的值l使用Struts2中的Xwork校驗框架進(jìn)行校驗l調(diào)用validateX()方法進(jìn)行數(shù)據(jù)校驗l調(diào)用validate()方法進(jìn)行數(shù)據(jù)校驗6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l兩種配置校驗文件的方式l字段校驗方式(Field-valiator)l針對字段或?qū)傩?,在校驗時任何一個字段都能夠

26、返回一個明確的消息。l非字段校驗方式(Non-Field validator)l將字段有效地組合到一起,不能對一個字段返回一個明確的消息。6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l字段校驗方式1900-01-012050-02-21生日必須在$min到$max之間被校驗的字段校驗器名為校驗器指定校驗參數(shù)校驗失敗后的提示信息6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l非字段方式 birth 1900-01-01 2050-02-21 6.2.3 通過通過XWork校驗框架實現(xiàn)校驗框架實現(xiàn)l校驗器(valiator)lrequired validator(必填校驗器)lr

27、equiredstring validator(必填字符串校驗器)lstringlength validator(字符串長度校驗器)lregex validator(表達(dá)式校驗器)lemail validator(郵件校驗器)lurl validator(網(wǎng)址校驗器)lint validator(整數(shù)校驗器)ldouble validator(雙精度數(shù)校驗器)6.2.2 編寫校驗規(guī)則文件編寫校驗規(guī)則文件l利用Struts2的校驗框架進(jìn)行輸入驗證l例子:basicValidatel無需對程序代碼做任何改變,只需編寫校驗規(guī)則文件。lregist.jsplRegistAction.javalRegi

28、stAction-validation.xmllstruts.xml6.3 國際化支持國際化支持l程序國際化是商業(yè)系統(tǒng)的一個基本要求l今天的軟件系統(tǒng)不再是簡單的單機(jī)程序,往往都是一個開放系統(tǒng)。l需要面對來自全世界各個地方的瀏覽者。l因此,國際化是商業(yè)系統(tǒng)中不可缺少的一部分。lStruts2的國際化是建立在Java國際化的基礎(chǔ)上l通過提供不同國家/語言環(huán)境的消息資源,l然后通過ResourceBuddle加載指定Locale對應(yīng)的資源文件,l再取得該資源文件中指定key對應(yīng)的消息。lStruts2框架對Java程序國際化進(jìn)行了進(jìn)一步的封裝,從而簡化了應(yīng)用程序的國際化。6.3.1 國際化實現(xiàn)原理l

29、國際化即通常所說的i18n(Internationalization),是指程序能夠在不修改內(nèi)部代碼的前提下,根據(jù)不同的語言以及地區(qū)顯示相應(yīng)的界面。l國際化中涉及到的幾個概念:l國際化資源文件:l保存各種版本語言編寫的消息。l程序擁有自動選擇國際化資源文件的功能。lLocale:l對應(yīng)區(qū)域/語言等信息。lResourceBundle:l用來加載國際化資源。lI18nInterceptor:lStruts 2提供的國際化攔截器,負(fù)責(zé)處理Locale相關(guān)信息。6.3.1 國際化實現(xiàn)原理i18n攔截器ActionResult你好確定LocalResourceBundlehello=bonjourhe

30、llo=你好hello=hello中文國際化資源英文國際化資源法文國際化資源其他國際化資源請求頁面顯示結(jié)果頁面修改瀏覽器語言設(shè)置修改瀏覽器語言設(shè)置修改瀏覽器語言設(shè)置修改瀏覽器語言設(shè)置6.3.2 準(zhǔn)備國際化資源文件lStruts 2的國際化資源文件以.properties結(jié)尾,文件名前綴可以任意命名。習(xí)慣上命名方式有以下3種:l文件名前綴.properties。l文件名前綴_語言種類.properties。l文件名前綴_語言種類_國家代碼.propertiesl語言代碼字段必須是有效的ISO(International Standardization Organization,國際標(biāo)準(zhǔn)化組織)語

31、言代碼,ISO-639標(biāo)準(zhǔn)定義的這些代碼格式為英文小寫、雙字符。6.3.2 準(zhǔn)備國際化資源文件l國家代碼字段語言語言語言代碼語言代碼國家代碼國家代碼漢語(漢語(Chinese)ZhCN英語(英語(English)EnUS法語(法語(French)FrFR德語(德語(German)deDE日語(日語(Japanese)jaJP意大利語(意大利語(Italian)itIT6.3.2 準(zhǔn)備國際化資源文件l國際化資源文件的內(nèi)容結(jié)構(gòu)l“key”=“value” l“key”對應(yīng)消息名,可以任意命名,l“value”則應(yīng)該是同一信息不同的語言表示,l對于不同語言的配置文件,“key”都是一致的而“value”的內(nèi)容不同。漢語的配置文件內(nèi)容為:hello=你好英語的配置文件內(nèi)容為:hello=hello法語的配置文件內(nèi)容為:hello=bonjour6.3.2 準(zhǔn)備國際化資源文件l根據(jù)國際化信息的作用范圍可以將國際化資源文件分為3種:l全局范圍:l包范圍lAction范圍6.3.2 準(zhǔn)備國際化資源文件l全局范圍:l該資源文件被放置在WEB-INF/classes路徑下,文件信息可以在整個工程范圍內(nèi)被使用。它在“struts.xml”中配置方式的為:ll屬性value的值為全局范圍資源文件的文件名前綴6.4.2 準(zhǔn)備國際化資源文件l包范圍:l該資源文件被放置在對應(yīng)包的根路徑下,且文件名前

溫馨提示

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

評論

0/150

提交評論