STRUTS2零配置_第1頁
STRUTS2零配置_第2頁
STRUTS2零配置_第3頁
STRUTS2零配置_第4頁
STRUTS2零配置_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、簡述STRUTS2Convention零酉己置從 struts2.1 開始,struts2 不再推薦使用 Codebehind 作為零配置插件,而是改為使用 Convention 插件來支持零配置,和 Codebehind 相比,Convention 插件更徹底,該插件完全拋棄配置信息,不僅不需要是使用 struts.xml 文件進行配置,甚至不需要使用 Annotation 進行配置,而是由 struts2 根據(jù)約定自動配置。如何使用 Convention1.將 struts-Convention-plugin-2.1.6.jar 文件復制到 WEB-INF/lib 路徑下2.對于 Conv

2、ention 插件而言,它會自動搜索位于 action,actions,struts,struts2 包下的所有 java 類,Convention 插件會把如下兩種 java 類當成 Action 處理:1)所有實現(xiàn)了 com.opensymphony.xwork2.Action 的 java 類2)所有類名以 Action 結尾的 java 類3.Convention 插件還允許設置如下三個常量:1)struts.Convention.exclude.packges:指定不掃描哪些包下的 java 類,位于這些包結構下的java 類將不會自動映射成 Action;2)struts.conv

3、ention.package.locators:Convention 插件使用該常量指定的包作為搜尋 Action的根包。對于 actions.fore.LoginAction 類,按約定原本應映射到/fore/login;如果將該常量設為 fore,則該 Action 將會映射到/login3)struts.convention.action.packages:Convention 插件以該常量指定包作為根包來搜索 Action類。Convention 插件除了掃描 action,actions,struts,struts2 四個包的類以外,還會掃描該常量指定的一個或多個包,Conventi

4、on 會視圖從中發(fā)現(xiàn) Action 類。注意:struts.convention.package.locators 和 struts.convention.action.packages 兩個常量的作用比較微妙,開發(fā)者在利用這兩個常量時務必小心。如:下面 Action 所在包被映射的命名空間如下:com.fun.actions.LoginAction 映射至 U/com.fun.actions.myoffice.CarInfoAction 映射至 U/myofficecom.fun.struts.myoffice.EntINfoAction 映射至 U/myofiice4.映射 Action

5、的 name 時,遵循如下兩步規(guī)則:1)如果該 Action 類名包含 Action 后綴,將該 Action 類名的 Action 后綴去掉。否則不做任何處理。2)將 Action 類名的駝峰寫法(每個單詞首字母大寫、其他字母小寫的寫法)轉成中畫線寫法(所有字母小寫,單詞與單詞之間以中畫線隔開)如 : LoginAction 映 射 的 Acion 的 name 屬 性 為 login,GetBooks 映 射 的 Action 的 name 的 屬 性 為get-books,AddEmployeeAction 映射的 Action 的 name 屬性為 add-employee5.默認情況

6、下。Convention 總會到 WE 無用的 WEB-INF/content 路徑下定位物理資源,定位資源的約定是:actionRUL+resultCODE+suffix。當某個邏輯視圖找不到對應的視圖資源時,Convention會自動視圖使用 ActionURL+suffix 作為物理視圖資源。如:actions.fore.LoginAction 返回 success 字符串時,Convention 優(yōu)先考慮使用 WEB-INF/content/fore 目錄下的 login-success.jsp 作為視圖資源。如果找不到該文件,login.jsp 也可作為對應的視圖資源。如果返回 in

7、put 字符串,Convention 會將 WEB-INF/content/fore 里面查找login-input.jsp6.為了看到 struts2 應用里的 Action 等各種資源的影射情況,struts2 提供了 ConfigBrowser 插件。使用方法,將 struts2-config-browser-plugin-2.1.6.jar 文件復制到 struts2 應用的 WEB-INFlib目錄中。打開首頁地址:http:/localhost:8080/應用名字/config-browser/actionNames.action 這里可以看到 ConfigBrowser 插件的首

8、頁。注意:這里不管開發(fā)者是否使用 struts.xml 文件進行配置,一樣可以看到 struts 的配置信息。7.Action 鏈的約定如果希望一個 Action 處理結束后不是進入一個視圖頁面,而是進行另一個 Action 形成的 Action 鏈,通過 Convention 插件則只需遵守如下三個約定即可。1)第一個 Action 返回的邏輯視圖字符串沒有對應的視圖資源2)第二個 Action 與第一個 Action 處在同一個包下3)第二個 Action 影射的 URL 為:firstActionURL+resultCODE如,第一個 Action 為 OneAction,里面有個方法返

9、回為two,那么就得保證,WEB-INF/content/下沒有 one.jsp 或 one-two.jsp 對于第二個 action 它的名字應該是 OneTwoAction,而對應的 url應該是:“one-two.action”注意:由于 Convention 插件根據(jù) Action 和 jsp 頁面來動態(tài)生成映射的,因此不管是 Acion 的改變,還是 JSP 頁面的改變都需要 Convention 插件重新加載映射。那么只要我們?yōu)?struts2 應用配置如下兩個常量就可以了。屬性值3)Action 中還可以指定一個 params 屬性, 該屬性是一個字符串數(shù)組, 用于該 Acion

10、 指定的參數(shù)名和參數(shù)值。params 屬性應遵守如下格式:namel,valuel,name2,value24)Actions 也用于修飾 Action 類里的方法,用于將該方法映射到多個 URL.Actions 用于組織多個Action,因此它可將一個方法映射成多個邏輯 Action。如:packagecom.fun.actions;importorg.apache.struts2.convention.annotation.Action;importorg.apache.struts2.convention.annotation.Actions;importcom.fun.service.

11、LoginService;importcom.opensymphony.xwork2.ActionSupport;”value=”true”/是否從包中搜索 Action插件以該常量指定包作為根包publicclassLoginActionextendsActionSupportprivateStringstr;Actions(Action(value=login1,params=str,這是已經(jīng)注入的了!),Action(value=login2)publicStringlogin()returnstr;Action(value=ggg)publicStringabc()returnabc;

12、publicStringgetStr()returnstr;publicvoidsetStr(Stringstr)this.str=str;我們可以通過/login1.action 訪問,而在訪問時,str 這個屬性已經(jīng)有值,為 str=這是已經(jīng)注入的!”返回的視圖是 login1-str.jsp當我們用/login2.action 訪問時, str 的值為 null。 返回的視圖為 login2-str.jsp 而我們通過/ggg.action 調用的是 abc()方法,返回的視圖為/ggg-abc.jsp8.與 Result 配置相關的 Annotation1) ResultPathRes

13、ult 和 Results2) Results用于組織多個Result因此它只需指定一個value屬性值, 該value屬性值為多個Result3)Result相當于 struts.xml 文件中的result/元素的做喲歐諾個。使用Result 必須指定一個 name 屬性,相當于resultname=/另外,它還有幾個可選的屬性。type 相當于resulttype=/指定返回視圖資源的類型location 相當于result,./result中間部分,用于指定實際視圖位置params:該屬性相當于result/元素里多個param./子元素的作用, 用于為該 Result 指定參數(shù)值。該

14、屬性應滿足name1,value1,name2,value2格式 4)Result 有以下兩種用法1Action 級的 Result 映射:以Actions 組合多個Action 后修飾的 Action 類。這種 Result 映射對該 Action 里的所有方法都有效。2 方法級 Result 映射:將多個Result 組成數(shù)組后作為Action 的 results 屬性值。這種 Result 映射僅對被修飾的方法有效。5)ResultPath 則用于修飾包和 Action 類,用于改變被修飾 Action 所對應的物理視圖資源的根路徑。舉例說:默認情況下,Convention 都會到 WE

15、B-INF/content 路徑下找物理視圖資源,一旦我們使用ResultPath(/abc)修飾 t裝Action,系統(tǒng)將回到 abc 目錄下尋找物理視圖資源。舉例:在默認情況下,Convention 都會到 WEB-INF/content 路徑下需找物理視圖資源,一旦我們使用Res3tPath(/abc)修飾亥Action,系統(tǒng)會到 abc 目錄下尋找物理視圖資源。9 與包和命名空間相關的 Annotation:Namespace:修夕 AAction 類或其所在的包。該 Annotation 中指定一個 value 屬性值,用于指定被修飾的 Action 所在的命名空間Namespace

16、s:修飾 Action 類或其所在的包,用于組合多個NamespaceParentPackage:用于指定被修飾的 Action 所在包的父包。10 異常處理相關的 AnnotationExceptionMappings 用于組織多個ExceptionMapping,因此它只需指定一個 value 屬性值,該value 屬性值為多個ExceptionMapping。ExceptionMapping 用于定義異常類和物理視圖之間的對應關系,也相當于 struts.xml 文件里元素的作用使用時,必須注意以下兩個屬性:exception:用于指定異常類result:用于指定邏輯視圖Exceptio

17、nMpping 有如下兩種用法Action 級的異常定義:以ExceptionMappings 組合多個ExceptionMapping 后修 1的 Action 類。這種異常定義對 Action 中的所有方法有效方法級的異常定義:將多個ExceptionMapping 組成數(shù)組后作為Action 的 exceptionMappings 屬性值,這種異常定義僅對被修飾的方法有效。11.攔截器配置相關的 Annotation與攔截器配置的 Annotation 有InterceptorRef、InterceptorRefs 和DefaultInterceptorRefInterceptorRef

18、s 用于組織多個InterceptorRef,因此它只需要指定一個 value 屬性值,該 value屬性值為多個InterceptorRefInterceptorRef 用于為指定 Action 引用 lanjieq 或者是攔截器棧。也就相當于 strut.xml 中位于元素內部的子元素的作用。使用InterceptorRefAnnotation 時,必須制定一個 value 屬性,用于指定所引用的攔截器或攔截器棧的名字。相當于子元素里 name 屬性的作用。IntroductionTheConventionPluginisbundledwithStrutssince2.1andreplac

19、estheZeroConfigplugins.Itprovidesthefollowingfeatures:ActionlocationbypackagenamingconventionsResult(JSP,FreeMarker,etc)locationbynamingconventionsClassnametoURLnamingconventionPackagenametonamespaceconventionSEOcompliantURLs(i.e.my-actionratherthanMyAction)ActionnameoverridesusingannotationsInterce

20、ptoroverridesusingannotationsNamespaceoverridesusingannotationsXWorkpackageoverridesusingannotationsDefaultactionandresulthandling(i.e./productswilltrycom.example.actions.Pducts.Index)TheConventionPluginshouldrequirenoconfigurationtouse.Manyoftheconventionscanbe

21、controlledusingconfigurationpropertiesandmanyoftheclassescanbeextendedoroverridden.CodebehindPluginandSetupInordertousetheConventionplugin,youfirstneedtoaddtheJARfiletotheWEB-INF/libdirectoryofyourapplication(ifyoupackageyouractionsinjarfiles,makesurethatstruts.convention.action.disableJarScanningis

22、settotrue).HelloworldNowthattheConventionpluginhasbeenaddedtoyourapplication,letsstartwithaverysimpleexample.ThisexamplewilluseanactionlessresultthatisidentifiedbytheURL.Bydefault,theConventionpluginassumesthatalloftheresultsarestoredinWEB-INF/content.Thiscanbechangedbysettingthepropertystruts.conve

23、ntion.result.pathintheStrutspropertiesfiletothenewlocation.Dontworryabouttrailingslashes,theConventionpluginhandlesthisforyou.HereisourhelloworldJSP:WEB-INF/content/hello-world.jspHelloworld!IfyoustartTomcat(orwhicheverJ2EEcontaineryouareusing)andtypeinhttp:/localhost:8080/hello-worldintoyourbrowser

24、youshouldgetthisresult:WEB-INF/content/hello-world.jspHelloworld!ThisillustratesthattheConventionpluginwillfindresultsevenwhennoactionexistsanditisallbasedontheURLpassedtoStruts.CodebehindhelloworldLetsexpandonthisexampleandaddacodebehindclass.InordertodothisweneedtoensurethattheConventionpluginisab

25、letofindouractionclasses.Bydefault,theConventionpluginwillfindallactionclassesthatimplementcom.opensymphony.xwork2.ActionorwhosenameendswiththewordActioninspecificpackages.ThesepackagesarelocatedbytheConventionpluginusingasearchmethodology.FirsttheConventionpluginfindspackagesnamedstruts,struts2,act

26、ionoractions.AnypackagesthatmatchthosenamesareconsideredtherootpackagesfortheConventionplugin.Next,thepluginlooksatalloftheclassesinthosepackagesaswellassub-packagesanddeterminesiftheclassesimplementcom.opensymphony.xwork2.ActionoriftheirnameendswithAction(i.e.FooAction).Heresanexampleofafewclassest

27、hattheConventionpluginwillfind:Classescom.example.actions.MainAducts.Display(implementscom.opensymphony.xwork2.Action)pany.details.ShowCompanyDetailsActionEachoftheactionclassesthatthepluginfindswillbeconfiguredtorespondtospecificURLs.TheURLisbasedonthepackagenamethatthec

28、lassisdefinedinandtheclassnameitself.FirsttheplugindeterminesthenamespaceoftheURLusingthepackagenamesbetweentherootpackageandthepackagetheclassisdefinedin.Forourexamplesabove,thenamespaceswouldbe:Namespacescom.example.actions.MainAction-/ducts.Display-/pany.details.ShowCompany

29、DetailsAction-/company/detailsNext,theplugindeterminestheURLoftheresourceusingtheclassname.ItfirstremovesthewordActionfromtheendoftheclassnameandthenconvertscamelcasenamestodashes.InourexamplethefullURLswouldbe:FullURLscom.example.actions.MainAction-/ducts.Display-/product

30、s/pany.details.ShowCompanyDetailsAction-/company/details/show-company-detailsYoucantelltheConventionplugintoignorecertainpackagesusingthepropertystruts.convention.exclude.packages.Youcanalsotelltheplugintousedifferentstringstolocaterootpackagesusingthepropertystruts.convention.package.locators.Final

31、ly,youcantelltheplugintosearchspecificrootpackagesusingthepropertystruts.convention.action.packages.Hereisourcodebehindactionclass:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;publicclassHelloWorldextendsActionSupportprivateStringmessage;public

32、StringgetMessage()returnmessage;publicStringexecute()message=HelloWorld!;returnSUCCESS;IfyoucompilethisclassandplaceitintoyourapplicationintheWEB-INF/classes,theConventionpluginwillfindtheclassandmaptheURL/hello-worldtoit.Next,weneedtoupdateourJSPtoprintoutthemessagewesetupintheactionclass.Hereisthe

33、newJSP:WEB-INF/content/hello-world.jspThemessageis$messageIfstartuptheapplicationserverandopenuphttp:/localhost:8080/hello-worldinourbrowser,weshouldgetthisresult:ResultThemessageisHelloWorld!ResultsandresultcodesTheConventionPluginwillpre-configureallofyouactionclasseswhenStrutsisstarted.Bydefault,

34、thisconfigurationwillalsocontainresultsforanyJSPsthatitcanfindwithintheapplication.TheJSPshaveanadditionalfeaturethatallowsdifferentJSPstobeusedbasedontheresultcodeoftheaction.SinceactionmethodsreturnStringsandtheseStringsaretraditionallyusedtolocateresultsfortheaction,theConventionpluginallowsyouto

35、definedifferentresultsbasedontheresultcode.Buildingonourexamplefromabove,letssaywewanttoprovideadifferentresultiftheresultcodefromouractionistheStringzeroratherthansuccess.First,weupdatetheactionclasstoreturndifferentresultcodes:com.example.actions.HelloWorldpackagecom.example.actions;importcom.open

36、symphony.xwork2.ActionSupport;publicclassHelloWorldextendsActionSupportprivateStringmessage;publicStringgetMessage()returnmessage;publicStringexecute()if(System.currentTimeMillis()%2=0)message=Its0;returnzero;message=Its1;returnSUCCESS;Next,weaddanewJSPtotheapplicationnamedWEB-INF/content/hello-worl

37、d-zero.jspNoticethatthefirstpartofthefilenameisthesameastheURLoftheactionandthelastpartofthenameistheresultcode.Thisistheconventionthatthepluginusestodeterminewhichresultstorender.HereisournewJSP:WEB-INF/content/hello-world.jspTheerrormessageis$messageNow,ifyoucompiletheactionandrestarttheapplicatio

38、n,basedonthecurrenttime,youlleitherseetheresultfromWEB-INF/content/hello-world.jsporWEB-INF/content/hello-world-zero.jsp.Theresulttypeisbasedontheextensionofthefile.Thesupportedextensionsare:jsp,ftl,vm,html,html.ExamplesofActionandResulttoTemplatemapping:URLResultFilethatcouldmatchResultType/hellosu

39、ccess/WEB-INF/content/hello.jspDispatcher/hellosuccess/WEB-INF/content/hello-success.htmDispatcher/hellosuccess/WEB-INF/content/hello.ftlFreeMarker/hello-worldinput/WEB-INF/content/hello-world-input.vmVelocity/test1/test2/helloerror/WEB-INF/content/test/test2/hello-error.htmlDispatcherChainingIfonea

40、ctionreturnsthenameofanotheractioninthesamepackage,theywillbechainedtogether,ifthefirstactiondoesnthaveanyresultdefinedforthatcode.Inthefollowingexample:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionSupport;publiccla

41、ssHelloActionextendsActionSupportAction(foo)publicStringfoo()returnbar;)Action(foo-bar)publicStringbar()returnSUCCESS;)Thefooactionwillbeexecuted,becausenoresultisfound,theConventionplugintriestofindanactionnamedfoo-baronthesamepackagewherefooisdefined.Ifsuchanactionisfound,itwillbeinvokedusingthech

42、ainresult.XWorkpackagesActionsareplacedonacustomXWorkpackagewhichpreventsconflicts.ThenameofthispackageisbasedontheJavapackagetheactionisdefinedin,thenamespacepartoftheURLfortheactionandtheparentXWorkpackagefortheaction.TheparentXWorkpackageisdeterminedbasedonthepropertynamedstruts.convention.defaul

43、t.parent.package(defaultstoconventionDefault),whichisacustomXWorkpackagethatextendsstrutsDefaultThereforethenamingforXWorkpackagesusedbytheConventionpluginareintheform:XWorkpackagenaming#Usingourexamplefromabove,theXWorkpackageforouractionwouldbe:XWorkpackagenamingcom.example.actions#/#conventionDef

44、aultAnnotationreferenceTheConventionpluginusesanumberofdifferentannotationstooverridethedefaultconventionsthatareusedtomapactionstoURLsandlocateresults.Inaddition,youcanmodifytheparentXWorkpackagethatactionsareconfiguredwith.ActionannotationTheConventionpluginallowsactionclassestochangetheURLthatthe

45、yaremappedtousingtheActionannotation.ThisannotationcanalsobeusedinsidetheActionsannotationtoallowmultipleURLstomaptoasingleactionclass.Thisannotationmustbedefinedonactionmethodslikethis:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apa

46、che.struts2.convention.annotation.Action;publicclassHelloWorldextendsActionSupportAction(/different/url)publicStringexecute()returnSUCCESS;OuractionclasswillnowmaptotheURL/different/urlratherthan/hello-world.IfnoResult(seenextsection)isspecified,thenthenamespaceoftheactionwillbeusedasthepathtotheres

47、ult,onourlastexampleitwouldbe/WEB-INF/content/different/url.jsp”.AsinglemethodwithinanactionclasscanalsomaptomultipleURLsusingthelikethis:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotation.Action;importo

48、rg.apache.struts2.convention.annotation.Actions;Actions(ActionsannotationpublicclassHelloWorldextendsActionSupportAction(/different/url),Action(/another/url)publicStringexecute()returnSUCCESS;)AnotherusageoftheActionorActionsannotationistodefinemultipleactionmethodswithinasingleactionclass,eachofwhi

49、chrespondtoadifferentURL.Hereisanexampleofmultipleactionmethods:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotation.Action;importorg.apache.struts2.convention.annotation.Actions;publicclassHelloWorldexten

50、dsActionSupportAction(/different/url)publicStringexecute()returnSUCCESS;)Action(url)publicStringdoSomething()returnSUCCESS;)ThepreviousexampledefinesasecondURLthatisnotfullyqualified.ThismeansthatthenamespacefortheURLisdeterminedusingtheJavapackagenameratherthantheActionannotation.Interceptorandinte

51、rceptorstackscanbespecifiedusingtheinterceptorRefsattribute.ThefollowingexampleappliesthevalidationinterceptorandthedefaultStackinterceptorstacktotheaction:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotat

52、ion.Action;importorg.apache.struts2.convention.annotation.Actions;publicclassHelloWorldextendsActionSupportAction(interceptorRefs=InterceptorRef(validation),InterceptorRef(defaultStack)publicStringexecute()returnSUCCESS;Action(url)publicStringdoSomething()returnSUCCESS;Parameterscanbepassedtoresults

53、usingtheparamsattribute.Thevalueofthisattributeisastringarraywithanevennumberofelementsintheformkey0,value0,key1,value1.keyN,valueN.Forexample:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotation.Action;im

54、portorg.apache.struts2.convention.annotation.Actions;publicclassHelloWorldextendsActionSupportAction(interceptorRefs=InterceptorRef(value=validation,params=programmatic,false,declarative,true)publicStringexecute()returnSUCCESS;Action(url)publicStringdoSomething()returnSUCCESS;Ifinterceptorsarenotspe

55、cified,thedefaultstackisapplied.InterceptorRefannotationInterceptorscanbespecifiedatthemethodlevel,usingtheActionannotationorattheclasslevelusingtheInterceptorRefsannotation.Interceptorsspecifiedattheclasslevelwillbeappliedtoallactionsdefinedonthatclass.Inthefollowingexample:com.example.actions.Hell

56、oWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotation.Action;importorg.apache.struts2.convention.annotation.Actions;InterceptorRefs(InterceptorRef(interceptor-1InterceptorRef(defaultStack)publicclassHelloWorldextendsAction(value=a

57、ction1,interceptorRefs=InterceptorRef(publicStringexecute()returnSUCCESS;Action(value=action2)publicStringdoSomething()returnSUCCESS;Thefollowinginterceptorswillbeappliedtoactionl:interceptor-1”,allinterceptorsfromdefaultstack,validation.Allinterceptorsfromdefaultstackwillbeappliedtoaction2.),)Actio

58、nSupportvalidation)ResultannotationTheConventionpluginallowsactionclassestodefinedifferentresultsforanaction.Resultsfallintotwocategories,globalandlocal.Globalresultsaresharedacrossallactionsdefinedwithintheactionclass.Theseresultsaredefinedasannotationsontheactionclass.Localresultsapplyonlytotheact

59、ionmethodtheyaredefinedon.Hereisanexampleofthedifferenttypesofresultannotations:com.example.actions.HelloWorldpackagecom.example.actions;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotation.Action;importorg.apache.struts2.convention.annotation.Actions;importorg.

60、apache.struts2.convention.annotation.Result;importorg.apache.struts2.convention.annotation.Results;Results(Result(name=failure,location=fail.jsp)publicclassHelloWorldextendsActionSupportAction(value=/different/url,results=Result(name=success,location=,type=redirect)publicStrin

溫馨提示

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

最新文檔

評論

0/150

提交評論