Struts2框架的工作原理與架構(gòu)分析課件_第1頁
Struts2框架的工作原理與架構(gòu)分析課件_第2頁
Struts2框架的工作原理與架構(gòu)分析課件_第3頁
Struts2框架的工作原理與架構(gòu)分析課件_第4頁
Struts2框架的工作原理與架構(gòu)分析課件_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Struts2框架的工作原理與架構(gòu)分析郭劍峰2012年11月Struts2框架的工作原理與架構(gòu)分析郭劍峰

Struts2的工作原理一個請求在Struts2框架中的處理分為以下幾個步驟

1客戶端初始化一個指向Servlet容器(如Tomcat)請求

2這個請求經(jīng)過一系列的過濾器(Filter)3接著FilterDispatcher被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個請是否需要調(diào)用某個Action

4如果ActionMapper決定需要調(diào)用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy

5ActionProxy通過ConfigurationManager詢問框架的配置文件,找到需要調(diào)用的Action類

6ActionProxy創(chuàng)建一個ActionInvocation的實例。

7ActionInvocation實例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

8一旦Action執(zhí)行完畢,ActionInvocation負責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2框架中繼承的標(biāo)簽。在這個過程中需要涉及到ActionMapper

Struts2的工作原理一個請求在Struts2框架中的處2

Struts2的架構(gòu)分析Struts2框架也是由兩部分組成:XWork2和Struts2。XWork是一個命令模式框架,它是Struts2的基礎(chǔ)。XWork提供了很多核心功能:IoC(Inversionofcontrol,控制反轉(zhuǎn))容器,強大的表達式語言(OGNL:ObjectGraphNavigationLanguage-----對象圖像導(dǎo)航語言)數(shù)據(jù)類型轉(zhuǎn)換,驗證和可插入的配置。XWork框架的核心概念包括action,攔截器(inerceptor)和result.

Struts2的架構(gòu)分析Struts2框架也是由兩部分組成3

struts-default.xml文件struts-default.xml文件是struts2框架默認加載的配置文件。它定義struts2一些核心的bean和攔截器。這些攔截器是以key-value對的形式配置在struts-default.xml中,其中name是攔截器名字,就是后面使用該攔截器的引用點,value則指定攔截器的實現(xiàn)類。struts-default.xml:struts2全局配置文件,struts2框架啟動時會自動加載該文件位置:struts2-core.jar/struts-default.xml作用:定義bean和一個抽象的包。包中定義了返回類型、攔截器、攔截器棧、默認的攔截器和默認的Action

struts-default.xml文件struts-de4

perties文件作用:覆蓋系統(tǒng)配置信息struts.custom.i18n.resources=globalMessages

國際化文件的前綴名配置struts.ui.theme=simple

使用struts2的simple模板生成html代碼struts.ui.templateDir=templateStruts2的模板目錄是通過struts.ui.templateDir常量來指定的,該常量的默認值是template,即意味著Struts2會從Web應(yīng)用的template目錄struts.ui.templateSuffix=ftl

去除struts2標(biāo)簽中的自動生成的布局樣式struts.multipart.saveDir=/tmp設(shè)置struts2的臨時文件上傳路徑struts.multipart.maxSize=1000000000struts2修改文件上傳大小限制

perties文件作用:覆蓋系統(tǒng)配置信5

Struts2中為應(yīng)用指定多個配置文件為了避免struts.xml文件過于龐大、臃腫,提高代碼的可讀性,我們可以將一個struts.xml配置文件分解成過個配置文件,然后在struts.xml文件中包含其他配置文件。1.配置一個名為department.xml文件<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd">

<struts>

<packagename="department"namespace="/department"extends="struts-default">

<actionname="department"class="com.qn.struts.HellowAction"

method="execute">

<paramname="savePath">/department</param>

<resultname="success">/index.jsp</result>

</action>

</package></struts>

Struts2中為應(yīng)用指定多個配置文件為了避免struts6

Struts2中為應(yīng)用指定多個配置文件2.配置一個名為employee.xml文件<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd">

<struts>

<packagename="employee"namespace="/employee"extends="struts-default">

<actionname="employee"class="com.qn.struts.HellowAction"

method="execute">

<paramname="savePath">/employee</param>

<resultname="success">/index.jsp</result>

</action>

</package>

</struts>

Struts2中為應(yīng)用指定多個配置文件2.配置一個名為em7

Struts2中為應(yīng)用指定多個配置文件3.在struts.xml中通過include進行配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><constantname="struts.enable.DynamicMethodInvocation"value="false"/><constantname="struts.devMode"value="false"/><constantname="struts.objectFactory"value="org.apache.struts2.spring.StrutsSpringObjectFactory"/><constantname="struts.multipart.maxSize"value="1000000000"/>

<includefile="department.xml"></include>

<includefile="employee.xml"></include> </struts>

Struts2中為應(yīng)用指定多個配置文件3.在struts.8

Struts2中的國際化

Struts2中的國際化9

Struts2中的國際化

Struts2中的國際化10

Struts2中的國際化

Struts2中的國際化11

Struts2中的國際化

Struts2中的國際化12

Struts2中的國際化

Struts2中的國際化13

Struts2中的國際化案例:struts2app—i18n/LoginAction

Struts2中的國際化案例:struts2app—i1814

Struts2中的表單校驗—Annotations驗證Struts2提供了注解的方式校驗

1)@Validation指明這個類或者接口將使用基于注解的校驗。

2)@Validations()在同一個方法上要使用多個注解校驗時。

3)@SkipValidation指定某個方法不需要校驗。否則所有方法都會使用校驗。也可以在檢驗攔截器中使用validateAnnotatedMethodOnly

4)13個內(nèi)置校驗器的注解版本:

@RequiredFieldValidator

@RequiredStringValidator

@StringLengthFieldValidator

@IntRangeFieldValidator

@DoubleRangeFieldValidator

@DateRangeFieldValidator

@ExpressionValidator

@FieldExpressionValidator

@RegexFieldValidator

@EmailValidator

@UrlValidator

@VisitorFieldValidator

@ConversionErrorFieldValidator

案例:

annotation/SimpleAnnotationAction,annotation/AnnotationValidationAction

Struts2中的表單校驗—Annotations驗證St15

Struts2單文件上傳上傳jsp:

Struts2單文件上傳上傳jsp:16

Struts2單文件上傳action:

Struts2單文件上傳action:17

Struts2單文件上傳xml:案例:SingleUpload.jsp

Struts2單文件上傳xml:案例:SingleUplo18

Struts2多文件上傳jsp:

Struts2多文件上傳jsp:19

Struts2多文件上傳action:

Struts2多文件上傳action:20

Struts2多文件上傳xml:案例:MultiUpload.jsp

Struts2多文件上傳xml:案例:MultiUploa21

Struts2動態(tài)方法調(diào)用Struts.xml:

Struts2動態(tài)方法調(diào)用Struts.xml:22

Struts2動態(tài)方法調(diào)用action:

Struts2動態(tài)方法調(diào)用action:23

Struts2動態(tài)方法調(diào)用action:案例:DynamicAction.action

Struts2動態(tài)方法調(diào)用action:案例:Dynami24

Struts2使用通配符定義actionxml:

Struts2使用通配符定義actionxml:25

Struts2使用通配符定義actionaction:案例:WildcardAction.java

Struts2使用通配符定義actionaction:案例26

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器27

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器28

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器29

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器30

Struts2局部自定義類型轉(zhuǎn)換器案例:localconverter.CircleAction.java

Struts2局部自定義類型轉(zhuǎn)換器案例:localconv31

Struts2全局自定義類型轉(zhuǎn)換器必須在src的目錄下建立perties文件:案例:globalconverter.CircleAction.java

Struts2全局自定義類型轉(zhuǎn)換器必須在src的目錄下建立32

Struts2的OGNL表達式1.OGNL表達式語言

OGNL是ObjectGraphicNavigationLanguage(對象圖導(dǎo)航語言)的縮寫,它是一個開源項目。Struts2框架使用OGNL作為默認的表達式語言。2.訪問上下文(Context)中的對象需要使用#符號標(biāo)注命名空間,如#application、#session3.由于ValueStack(值棧)是Struts2中OGNL的根對象,如果用戶需要訪問值棧中的對象,在JSP頁面可以直接通過下面的EL表達式訪問ValueStack(值棧)中對象的屬性:

${foo}//獲得值棧中某個對象的foo屬性

Struts2的OGNL表達式1.OGNL表達式語言

OG33

Struts2的OGNL表達式#application.userName或者#application['userName'],相當(dāng)于調(diào)用ServletContext的getAttribute("username")。session對象:用來訪問HttpSession,例如#session.userName或者#session['userName'],相當(dāng)于調(diào)用session.getAttribute("userName")。request對象:用來訪問HttpServletRequest屬性(attribute)的Map,例如#request.userName或者#request['userName'],相當(dāng)于調(diào)用request.getAttribute("userName")。parameters對象:用于訪問HTTP的請求參數(shù),例如#parameters.userName或者#parameters['userName'],相當(dāng)于調(diào)用request.getParameter("username")。

Struts2的OGNL表達式#application.u34

Struts2的OGNL表達式#application.userName或者#application['userName'],相當(dāng)于調(diào)用ServletContext的getAttribute("username")。session對象:用來訪問HttpSession,例如#session.userName或者#session['userName'],相當(dāng)于調(diào)用session.getAttribute("userName")。request對象:用來訪問HttpServletRequest屬性(attribute)的Map,例如#request.userName或者#request['userName'],相當(dāng)于調(diào)用request.getAttribute("userName")。parameters對象:用于訪問HTTP的請求參數(shù),例如#parameters.userName或者#parameters['userName'],相當(dāng)于調(diào)用request.getParameter("username")。

Struts2的OGNL表達式#application.u35

Struts2中為action屬性注入值Struts2中為Action中的屬性提供了依賴注入功能,在Struts2的配置文件中,我們可以方便的為action中的屬性注入值,注意:屬性必須提供setter方法Action:

Struts2中為action屬性注入值Struts2中為36

Struts2中為action屬性注入值jsp:

Struts2中為action屬性注入值jsp:37

Struts2中為action屬性注入值xml:案例:ioc.IocAction.java

Struts2中為action屬性注入值xml:案例:io38

Struts2自定義攔截器Struts2攔截器在訪問某個Action方法之前或之后實施攔截,Struts2攔截器是可插拔的,攔截器是AOP(AspectOrientedProgramming面向切面)的一種實現(xiàn)

Struts2自定義攔截器Struts2攔截器在訪問某個39

Struts2自定義攔截器Action:

Struts2自定義攔截器Action:40

Struts2自定義攔截器Interceptor:

Struts2自定義攔截器Interceptor:41

Struts2自定義攔截器xml:

Struts2自定義攔截器xml:42

Struts2自定義攔截器登錄jsp:

Struts2自定義攔截器登錄jsp:43

Struts2自定義攔截器執(zhí)行動作jsp:從攔截器得到message

Struts2自定義攔截器執(zhí)行動作jsp:從攔截器得到44

Struts2自定義攔截器退出jsp:

Struts2自定義攔截器退出jsp:45

Struts2自定義攔截器演示攔截過程:1.http://localhost:8080/struts2web/intercepter/user.jsp2.http://localhost:8080/struts2web/IntercepterAction.action

Struts2自定義攔截器演示攔截過程:1.http://46

Struts2自定義攔截器演示攔截過程:3.http://localhost:8080/struts2web/intercepter/quit.jsp4.http://localhost:8080/struts2web/IntercepterAction.action案例:IntercepterAction.action

Struts2自定義攔截器演示攔截過程:3.http://47

Struts2異常處理

Struts2異常處理48演講完畢,謝謝觀看!演講完畢,謝謝觀看!49Struts2框架的工作原理與架構(gòu)分析郭劍峰2012年11月Struts2框架的工作原理與架構(gòu)分析郭劍峰

Struts2的工作原理一個請求在Struts2框架中的處理分為以下幾個步驟

1客戶端初始化一個指向Servlet容器(如Tomcat)請求

2這個請求經(jīng)過一系列的過濾器(Filter)3接著FilterDispatcher被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個請是否需要調(diào)用某個Action

4如果ActionMapper決定需要調(diào)用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy

5ActionProxy通過ConfigurationManager詢問框架的配置文件,找到需要調(diào)用的Action類

6ActionProxy創(chuàng)建一個ActionInvocation的實例。

7ActionInvocation實例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

8一旦Action執(zhí)行完畢,ActionInvocation負責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2框架中繼承的標(biāo)簽。在這個過程中需要涉及到ActionMapper

Struts2的工作原理一個請求在Struts2框架中的處51

Struts2的架構(gòu)分析Struts2框架也是由兩部分組成:XWork2和Struts2。XWork是一個命令模式框架,它是Struts2的基礎(chǔ)。XWork提供了很多核心功能:IoC(Inversionofcontrol,控制反轉(zhuǎn))容器,強大的表達式語言(OGNL:ObjectGraphNavigationLanguage-----對象圖像導(dǎo)航語言)數(shù)據(jù)類型轉(zhuǎn)換,驗證和可插入的配置。XWork框架的核心概念包括action,攔截器(inerceptor)和result.

Struts2的架構(gòu)分析Struts2框架也是由兩部分組成52

struts-default.xml文件struts-default.xml文件是struts2框架默認加載的配置文件。它定義struts2一些核心的bean和攔截器。這些攔截器是以key-value對的形式配置在struts-default.xml中,其中name是攔截器名字,就是后面使用該攔截器的引用點,value則指定攔截器的實現(xiàn)類。struts-default.xml:struts2全局配置文件,struts2框架啟動時會自動加載該文件位置:struts2-core.jar/struts-default.xml作用:定義bean和一個抽象的包。包中定義了返回類型、攔截器、攔截器棧、默認的攔截器和默認的Action

struts-default.xml文件struts-de53

perties文件作用:覆蓋系統(tǒng)配置信息struts.custom.i18n.resources=globalMessages

國際化文件的前綴名配置struts.ui.theme=simple

使用struts2的simple模板生成html代碼struts.ui.templateDir=templateStruts2的模板目錄是通過struts.ui.templateDir常量來指定的,該常量的默認值是template,即意味著Struts2會從Web應(yīng)用的template目錄struts.ui.templateSuffix=ftl

去除struts2標(biāo)簽中的自動生成的布局樣式struts.multipart.saveDir=/tmp設(shè)置struts2的臨時文件上傳路徑struts.multipart.maxSize=1000000000struts2修改文件上傳大小限制

perties文件作用:覆蓋系統(tǒng)配置信54

Struts2中為應(yīng)用指定多個配置文件為了避免struts.xml文件過于龐大、臃腫,提高代碼的可讀性,我們可以將一個struts.xml配置文件分解成過個配置文件,然后在struts.xml文件中包含其他配置文件。1.配置一個名為department.xml文件<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd">

<struts>

<packagename="department"namespace="/department"extends="struts-default">

<actionname="department"class="com.qn.struts.HellowAction"

method="execute">

<paramname="savePath">/department</param>

<resultname="success">/index.jsp</result>

</action>

</package></struts>

Struts2中為應(yīng)用指定多個配置文件為了避免struts55

Struts2中為應(yīng)用指定多個配置文件2.配置一個名為employee.xml文件<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd">

<struts>

<packagename="employee"namespace="/employee"extends="struts-default">

<actionname="employee"class="com.qn.struts.HellowAction"

method="execute">

<paramname="savePath">/employee</param>

<resultname="success">/index.jsp</result>

</action>

</package>

</struts>

Struts2中為應(yīng)用指定多個配置文件2.配置一個名為em56

Struts2中為應(yīng)用指定多個配置文件3.在struts.xml中通過include進行配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><constantname="struts.enable.DynamicMethodInvocation"value="false"/><constantname="struts.devMode"value="false"/><constantname="struts.objectFactory"value="org.apache.struts2.spring.StrutsSpringObjectFactory"/><constantname="struts.multipart.maxSize"value="1000000000"/>

<includefile="department.xml"></include>

<includefile="employee.xml"></include> </struts>

Struts2中為應(yīng)用指定多個配置文件3.在struts.57

Struts2中的國際化

Struts2中的國際化58

Struts2中的國際化

Struts2中的國際化59

Struts2中的國際化

Struts2中的國際化60

Struts2中的國際化

Struts2中的國際化61

Struts2中的國際化

Struts2中的國際化62

Struts2中的國際化案例:struts2app—i18n/LoginAction

Struts2中的國際化案例:struts2app—i1863

Struts2中的表單校驗—Annotations驗證Struts2提供了注解的方式校驗

1)@Validation指明這個類或者接口將使用基于注解的校驗。

2)@Validations()在同一個方法上要使用多個注解校驗時。

3)@SkipValidation指定某個方法不需要校驗。否則所有方法都會使用校驗。也可以在檢驗攔截器中使用validateAnnotatedMethodOnly

4)13個內(nèi)置校驗器的注解版本:

@RequiredFieldValidator

@RequiredStringValidator

@StringLengthFieldValidator

@IntRangeFieldValidator

@DoubleRangeFieldValidator

@DateRangeFieldValidator

@ExpressionValidator

@FieldExpressionValidator

@RegexFieldValidator

@EmailValidator

@UrlValidator

@VisitorFieldValidator

@ConversionErrorFieldValidator

案例:

annotation/SimpleAnnotationAction,annotation/AnnotationValidationAction

Struts2中的表單校驗—Annotations驗證St64

Struts2單文件上傳上傳jsp:

Struts2單文件上傳上傳jsp:65

Struts2單文件上傳action:

Struts2單文件上傳action:66

Struts2單文件上傳xml:案例:SingleUpload.jsp

Struts2單文件上傳xml:案例:SingleUplo67

Struts2多文件上傳jsp:

Struts2多文件上傳jsp:68

Struts2多文件上傳action:

Struts2多文件上傳action:69

Struts2多文件上傳xml:案例:MultiUpload.jsp

Struts2多文件上傳xml:案例:MultiUploa70

Struts2動態(tài)方法調(diào)用Struts.xml:

Struts2動態(tài)方法調(diào)用Struts.xml:71

Struts2動態(tài)方法調(diào)用action:

Struts2動態(tài)方法調(diào)用action:72

Struts2動態(tài)方法調(diào)用action:案例:DynamicAction.action

Struts2動態(tài)方法調(diào)用action:案例:Dynami73

Struts2使用通配符定義actionxml:

Struts2使用通配符定義actionxml:74

Struts2使用通配符定義actionaction:案例:WildcardAction.java

Struts2使用通配符定義actionaction:案例75

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器76

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器77

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器78

Struts2局部自定義類型轉(zhuǎn)換器

Struts2局部自定義類型轉(zhuǎn)換器79

Struts2局部自定義類型轉(zhuǎn)換器案例:localconverter.CircleAction.java

Struts2局部自定義類型轉(zhuǎn)換器案例:localconv80

Struts2全局自定義類型轉(zhuǎn)換器必須在src的目錄下建立perties文件:案例:globalconverter.CircleAction.java

Struts2全局自定義類型轉(zhuǎn)換器必須在src的目錄下建立81

Struts2的OGNL表達式1.OGNL表達式語言

OGNL是ObjectGraphicNavigationLanguage(對象圖導(dǎo)航語言)的縮寫,它是一個開源項目。Struts2框架使用OGNL作為默認的表達式語言。2.訪問上下文(Context)中的對象需要使用#符號標(biāo)注命名空間,如#application、#session3.由于ValueStack(值棧)是Struts2中OGNL的根對象,如果用戶需要訪問值棧中的對象,在JSP頁面可以直接通過下面的EL表達式訪問ValueStack(值棧)中對象的屬性:

${foo}//獲得值棧中某個對象的foo屬性

Struts2的OGNL表達式1.OGNL表達式語言

OG82

Struts2的OGNL表達式#application.userName或者#application['userName'],相當(dāng)于調(diào)用ServletContext的getAttribute("username")。session對象:用來訪問HttpSession,例如#session.userName或者#session['userName'],相當(dāng)于調(diào)用session.getAttribute("userName")。request對象:用來訪問HttpServletRequest屬性(attribute)的Map,例如#request.userName或者#request['userName'],相當(dāng)于調(diào)用request.getAttribute("userName")。parameters對象:用于訪問HTTP的請求參數(shù),例如#parameters.userName或者#parameters['userName'],相當(dāng)于調(diào)用request.getParameter("username")。

Struts2的OGNL表達式#application.u83

Struts2的OGNL表達式#application.userName或者#application['userName'],相當(dāng)于調(diào)用ServletContext的ge

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論