計(jì)算機(jī)外文翻譯---appfuse 關(guān)于j2ee web應(yīng)用_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  外文科技資料翻譯</b></p><p><b>  英文原文</b></p><p>  AppFuse:    J2EE web   application</p><p>  by Matt Raible</p><p> 

2、 07/15/2004</p><p>  1 Start your AppFuse J2EE web application</p><p>  One of the hardest parts about J2EE development is getting started. There is an immense amount of open source to

3、ols for web app development. Making a decision on which technologies to use can be tough -- actually beginning to use them can be even more difficult. Once you've decided to use Struts and Hibernate, how do you go ab

4、out implementing them? If you look on the Hibernate site or the Struts site, you'll probably have a hard time finding any information on integrating the two. What if you wa</p><p>  2    

5、     The Birth of AppFuse</p><p>  In early 2002, I managed to land a contract where I was the lone developer. I was responsible for everything, from gathering requirements to database creatio

6、n to DHTML on the web front end. While I'd done a lot of front-end work (Struts, HTML, etc.) over the years, the business layer and persistence layer were mostly new to me. So I searched and searched for J2EE pattern

7、s to do things the "right way" for my new client. I ended up implementing Business Delegates, DAOs, and ServiceLocators -- many</p><p>  When you write a technical book, it's helpful to use a s

8、ample app to demonstrate concepts. I was tired of reading books that had a throwaway sample app, so I wanted to develop something meaningful; something I could use after I was done writing. My initial thoughts were to wr

9、ite an application that would help you get started with Struts, and would use XDoclet to do a lot of the heavy lifting. It also had to have a lot of security features so I could use it for my chapter on web application s

10、ecur</p><p>  After a couple of weeks, I decided that " struts-xdoclet " was too hard to say and renamed the project AppFuse. I developed the sample app for my Struts chapter using AppFuse and rele

11、ased it as Struts Resume. After publishing Struts Resume, I needed to extract the resume-specific stuff out of it to revert back to the generic "jumpstart" application I wanted AppFuse to be. It took me almost

12、three months, but I finally released the first official version of AppFuse in April 2003.</p><p>  Since its initial release, AppFuse has gone through many changes and improvements. Most of the technology de

13、cisions were made from experience. It was a pain to keep my ValueObjects (VOs) and ActionForms in sync, so ActionsForms are generated using XDoclet. I found it tedious to write JDBC and more tedious to update SQL and VOs

14、 when adding new table columns. To solve this, I chose to use Hibernate for persistence and use Ant/XDoclet to dynamically create my database tables. Rather than lose my ta</p><p>  In March of 2004, I moved

15、 the AppFuse project from the Struts project on SourceForge to java.net. I had a couple of reasons for doing this. First of all, it was a sub-project on SourceForge, and its user base was growing quickly. It needed dedic

16、ated mailing lists and forums. Secondly, java.net seemed to do a better job of marketing projects and I'd heard their CVS system was much more stable. My experience at java.net has been quite nice: it's a very st

17、able system, and the administrators are ver</p><p>  3          What is AppFuse? </p><p>  So after all that history, what is AppFuse? At its very core, AppFuse is

18、a web application that you can package into a .war and deploy to a J2EE 1.3-compliant app server. It's designed to help you create new web applications using a new target in its build.xml file. The new target allows

19、you to specify a name for your project and a name for the database it will talk to. Once you've created a project, you can instantly create a MySQL database and deploy it to Tomcat using ant setup . Furthermore,</

20、p><p>  AppFuse tries to make it as simple as possible to build, test, and deploy your application. It virtually eliminates setup and configuration, which are often the hard parts. Tools like Ant, JUnit, XDocle

21、t, Hibernate, and Spring can be difficult to get started with. Furthermore, features like authentication, password hints, "remember me," user registration, and user management are things that most web apps need

22、. AppFuse ships with tutorials for developing DAOs, business delegates, Struts actions (</p><p>  One of the best parts, in my opinion, is that it embraces the Java community's ideas and suggestions. The

23、 directory structure and build file are largely based on Erik Hatcher and Steve Loughran's excellent Java Development with Ant book. In this book, Erik built a sample application that inspired me to learn more about

24、Ant and XDoclet -- and use it in my Struts development.</p><p>  When I first started learning and using Hibernate in AppFuse, I made many mistakes -- and the community let me know. At first, I opened and cl

25、osed its Session object for each DAO method. When Gavin told me this was a bad idea, I made modifications to use an OpenSessionInView pattern, with my own ServletFilter to do the work. I passed the session object into ea

26、ch method signature, for which the community repeatedly questioned my logic. My answer was, "I wanted to get it working more than anything</p><p>  Then, late last year, I discovered the Spring framewor

27、k and found the beautiful solution I'd been looking for. Using its ORM support, I was able to eliminate any Session handling in AppFuse; now Spring elegantly handles it all. AppFuse now uses Spring's OpenSessionI

28、nViewFilter . All I needed to do was configure it in web.xml and it manages opening and closing the session for me. When I integrated Spring in AppFuse's persistence layer, I deleted two or three classes and reduced

29、my LOC count by ar</p><p>  AppFuse is not only a jumpstart kit for your web apps; it's also a showcase for integrating technologies like Hibernate, Spring, and Struts. Tutorials exist for integrating th

30、ese different open source components, but rarely do they give you an application you can walk away with and use to develop your next application. In a sense, AppFuse is a glue that binds open source projects together. Wh

31、en I found Spring, it was a perfect fit, since it was the glue to configure components and loosely couple</p><p>  4          What Does the Future Hold?</p><p>  Ap

32、pFuse 1.5 was released at the end of May. Its major feature is the option to use Spring MVC instead of Struts. All of the tutorials have been updated to educate users how to use Spring (or Struts) for their web layers. F

33、or AppFuse 1.6, I plan to add support for using WebWork and SiteMesh, as well as make it easier to run unit tests from Eclipse and IDEA. By the end of the year, I hope to add Tapestry and JSF as MVC options. The middle t

34、ier and back end (Spring plus Hibernate) probably won't ch</p><p>  When I find innovative and easier ways to develop web apps, it ends up in AppFuse. People ask me why AppFuse doesn't support Middle

35、gen. The reason is simple: I've never used or needed Middlegen on a project, so I don't see any reason to add it. If I end up on a project where I use Middlegen, you can bet I'll end up adding support for it.

36、 Recently, I started using Spring's MVC framework instead of Struts. At first, I found it a bit difficult to understand, so I implemented the web layer with Spri</p><p>  Using and learning AppFuse is a

37、good way to keep up to date with the latest releases of its dependent projects. I try to keep as up to date as possible with new releases -- and due to AppFuse's unit test coverage, I can easily test new releases by

38、dropping them in and running ant test-all . This even works for dependent resources such as Tomcat and MySQL, in which I've found bugs via AppFuse. For me, it acts as a testing tool to verify the functionality of new

39、 open source releases.</p><p>  5          AppFuse Light</p><p>  Equinox is a lightweight version of AppFuse; hence its pseudonym "AppFuse Light." I was

40、inspired to create it when looking at the struts-blank and webapp-minimal applications that ship with Struts and Spring, respectively. These "starter" apps were not robust enough for me, and I wanted something

41、like AppFuse, only simpler -- with no build-time dependencies.</p><p>  It's designed to show web app developers how to start a bare-bones Struts/Spring/Hibernate app using the QuickStart Chapter in Spri

42、ng Live. More functionality may be added in the future, but the main goal is to provide a better implementation of a bare-bones web app.</p><p>  Equinox should mostly be used for writing tutorials and rapid

43、 prototyping. I don't recommend using it for starting a full-fledged production application. That's what AppFuse is for.</p><p>  6          How Do I Start Using It?<

44、/p><p>  The best way to get started using AppFuse is to download it and read the QuickStart Guide. AppFuse is a part of the Java Enterprise Community on java.net. Its project homepage is at appfuse.dev.java.ne

45、t.</p><p>  If you're interested in Equinox, you can read the QuickStart Chapter from Spring Live to build a quick and easy application using Struts, Spring, and Hibernate. If you like, you can view a de

46、mo of the MyUsers application that this chapter helps you build. Equinox is a sub-project of AppFuse on java.net. Its project homepage is at equinox.dev.java.net.</p><p><b>  中文譯文</b></p>

47、<p>  AppFuse :關(guān)于J2EE Web應(yīng)用</p><p>  由Matt Raible</p><p>  2004年7月15日</p><p>  1. 啟動AppFuse J2EE Web應(yīng)用</p><p>  對 J2EE 開發(fā)來說,起步是一件最困難的事情之一。對于巨大數(shù)量的開源技術(shù)來說,決定選擇哪些技術(shù)可能是

48、很困難的 — 實(shí)際上,對于他們的上手可能更加困難。假設(shè)你選擇了 Struts 和 Hibernate, 那么你如何去在一起使用他們。即使你去查找 Hibernate 主站或者 Struts 主站,你仍然難以找到關(guān)于如何整合兩者的信息。假如你又再打算整合 Spring 又會如何?作為一個(gè)開發(fā)者,我認(rèn)為最好的學(xué)習(xí)方法是瀏覽簡單的示例程序和指南來解釋如何擴(kuò)展這些程序。為了我能夠?qū)W習(xí)和記住如何集成像 Hibernate, Spring, Str

49、uts, 和 Ant/XDoclet 這樣的開源技術(shù),我編寫了 AppFuse 。 AppFuse 的誘人之處就是你能夠即刻開始使用 Hibernate, Spring, and Struts 卻無需知道很多關(guān)于它們的知識。 AppFuse 和它的指南將告訴你如何快速有效的使用測試驅(qū)動方式開發(fā)一個(gè) J2EE 的 web 應(yīng)用程序。</p><p>  2.Appfuse 的誕生</p><p&

50、gt;  在 2002 年初的時(shí)候,我得到了一份個(gè)人獨(dú)立開發(fā)的合同,我要負(fù)責(zé)所有的事情,包括從收集需求到數(shù)據(jù)庫創(chuàng)建和編寫 web 前端的 DHTML 。雖然我做過多年前臺的工作 (Struts, HTML, 等等 ) ,但是業(yè)務(wù)層和數(shù)據(jù)持久層的很多東西對我來說是不熟悉的。于是我不斷的查找各種 J2EE 模式來以“正確的方法”滿足我的新客戶。我最終實(shí)現(xiàn)了 Business Delegates, DAOs, and ServiceLocat

51、ors – 很多 J2EE Blueprints 中的模型。在那個(gè)合同的最后,我被約定去幫助寫一本關(guān)于 JSP2.0 的書。出版商是 Wrox Press ,這本書的名字是 Professional JSP 2.0 。 我志愿編寫了兩章――一章是關(guān)于 Struts 而另一章是關(guān)于 web 安全。</p><p>  注:在 2003 年 3 月, Wrox 停業(yè),最終該書 由 Apress 出版,名為: Pro

52、JSP, Third Edition 。</p><p>  在你編寫一本技術(shù)類書籍時(shí),使用一個(gè)簡單的應(yīng)用去示范一些概念是非常有效的。我對很多提供的示例程序是看后即棄的書是非常反感的,于是我決定去開發(fā)一些能 夠用的更久一些的程序,一些東西是我能夠在我結(jié)束寫作以后仍然可以使用的。我最初的想法是編寫一個(gè)能夠幫助你開始 struts 并利用 XDoclet 去做很多繁瑣工作的應(yīng)用程序。它的許多安全特性也能夠用在我的“

53、web 應(yīng)用安全性”章節(jié)中。我給它取名叫做 struts-xdoclet 并且開始編寫這個(gè)程序。</p><p>  過了幾周以后,我認(rèn)為 " struts-xdoclet " 這個(gè)名字很拗口,于是把項(xiàng)目改名為 AppFuse 。我為我的 Struts 章節(jié)生成了一個(gè)簡單的應(yīng)用并把它作為 Struts Resume 發(fā)布出去。在發(fā)布了 Struts Resume 以后,我刨除了其中和具體相關(guān)的

54、東西使它重新成為一般的入門程序,正如我開始設(shè)想的那樣。它花費(fèi)了我?guī)缀跞齻€(gè)月的時(shí)間,但是最終我在 2003 年 4 月發(fā)布了 AppFuse 的第一個(gè)正式版本。自從它的第一個(gè)發(fā)布版本以來, AppFuse 已經(jīng)經(jīng)歷了許多改變和發(fā)展。大多數(shù)的技術(shù)選擇是憑經(jīng)驗(yàn)得出的。保持 ValueObjects (VOs) 和 ActionForms 同步是一件很痛苦的事情,于是我使用了 XDoclet 來生成 ActionsForms 。我發(fā)現(xiàn)編寫 j

55、sbc 代碼是非??菰锓ξ兜模?dāng)更新表字段的時(shí)候修改 sql 和 VOs 的代碼是一件更枯燥的事情。為了解決這些問題,我選擇使用 Hibernate 作為數(shù)據(jù)持久層并且使用了 Ant/XDoclet 來動態(tài)創(chuàng)建我的數(shù)據(jù)庫的表。 Rather than lose my tables</p><p>  在 2004 年 4 月,我將 AppFuse 項(xiàng)目從 在 SourceForge 的 Struts proje

56、ct 移到了 java.net 。我這樣作有幾個(gè)原因。首先是 AppFuse 是 SourceForge 的一個(gè)子項(xiàng)目,它的用戶基礎(chǔ)增長的非常快,需要專門的郵件列表和論壇。第二是因?yàn)?java.net 看起來提供了更好的銷售項(xiàng)目的工作而且我聽說他們的 CVS 系統(tǒng)非常的穩(wěn)定。我在 java.net 的經(jīng)歷非常的美好:他是一個(gè)非常穩(wěn)定的系統(tǒng)。而且管理員對項(xiàng)目的維護(hù)和支持非常的有效。</p><p>  3.AppF

57、use 究竟是什么?</p><p>  AppFuse 是一個(gè)你可以打包位一個(gè) war 文件并可以在兼容 J2EE 1.3 的應(yīng)用服務(wù)器中運(yùn)行的 web 應(yīng)用程序。它被設(shè)計(jì)成能夠利用 build.xml 的 new target 幫助你建立新的的 web 應(yīng)用程序。 new target 允許你指定你的項(xiàng)目名稱和數(shù)據(jù)庫名稱。一旦你建立了一個(gè)項(xiàng)目后,你可以利用 ant setup 創(chuàng)建 MySQL 數(shù)據(jù)庫并發(fā)布程

58、序到 Tomcat 。而且你可以執(zhí)行 ant test-all 來 測試新工程的基本功能。這時(shí),你可能會嘲笑說,“這有什么的,任何人都可以創(chuàng)建一個(gè) .war 文件并發(fā)布到 tomcat”. 我同意這點(diǎn),但是你有 setup-tomcat target 可以用來配置 Tomcat 的連接池的 JNDI 資源和 mail services 嗎 ? 事實(shí)上, AppFuse 并不是什么突破性的發(fā)明,它只是由一個(gè)目錄結(jié)構(gòu),一個(gè) build 文件

59、,一堆基類等組成,然而,它能夠讓我能夠快速構(gòu)建可以高質(zhì)量開發(fā),易于測試的 web 應(yīng)用程序。</p><p>  AppFuse 試圖盡可能簡單的建造,測試,和發(fā)布你的程序。它實(shí)際上免去了安裝和配置,這些往往是非常困難的部分。同時(shí)使用像 Ant,JUnit,XDoclet,Hibernates 和 Spring 這樣的工具是非常困難的。此外,還有一些像權(quán)限,密碼提示, ” 記住我 ”, 用戶注冊和用戶管理這些大多

60、數(shù) web 應(yīng)用程序需要的部分往往是必須的。 AppFuse 還包括了開發(fā) DAOs, business delegates, Struts actions (or Spring controllers), 多層之間的通訊和驗(yàn)證,以及根據(jù) model objects 使用 ant 和 XDoclet 任務(wù)去生成一些 JSP 代碼的指南。它還使用了很多優(yōu)秀的開源標(biāo)簽庫例如 Struts Menu ( 用來導(dǎo)航 ) and the Disp

61、lay Tag ( 用來翻頁和排序 ).</p><p>  在我看來, AppFuse 最好的部分之一是集合了 java 社團(tuán)的想法和建議。目錄結(jié)構(gòu)和 build 文件主要來自于 Erik Hatcher 和 Steve Loughran' 的著作 Java Development with Ant 。在這本書里, Erik 使用的一個(gè)示例程序給了我對于使用 Ant 和 XDoclet 的很多啟示而且用

62、在了我的 Struts 開發(fā)中。</p><p>  當(dāng)我第一次在 AppFuse 中開始學(xué)習(xí)和使用 Hibernate 時(shí),我犯了很多錯誤,但是 java 社團(tuán)幫助我糾正了錯誤。一開始我在每個(gè) DAO 的方法中 opened 和 closed 他們的 Session 對象。當(dāng) Gavin 告訴我這是非常不好的方法,我修改為使用 OpenSessionInView 模式,讓我的 ServletFilter 來做這

63、件事情。我將 session 對象作為參數(shù)傳遞給每個(gè)方法,大家都很奇怪我的這樣做的原因。我的回答是: " 我首先得讓程序能夠工作 – 你們有更好的主意嗎 ?" 最后討論出最好的主意是將 Session 做為構(gòu)造函數(shù)的一個(gè)參數(shù)。</p><p>  在去年的晚些時(shí)候,我看到了 Spring framework 并且發(fā)現(xiàn)這是我正在一直尋找的優(yōu)秀解決方案。使用他的 ORM ,我能夠消除所有的 Ses

64、sion 操作在 AppFuse 中。 Spring 已經(jīng)優(yōu)雅的處理了他們。 AppFuse 現(xiàn)在使用了 Spring 的 OpenSessionInViewFilter 。我所需要做的只是在 web.xml 中配置一下它就可以為我管理 session 的打開和關(guān)閉。當(dāng)我集成了 spring 在 AppFuse 的數(shù)據(jù)持久層,我刪除了兩到三個(gè) class 并且減少了大概百分之七十五的 LOC 數(shù)量。所有以前我使用的 Hibernate

65、耦合都消失了,在我去年的一個(gè)項(xiàng)目上,我可以很方便的加入 iBatis 的 DAO 實(shí)現(xiàn)。在這個(gè)項(xiàng)目上,我發(fā)現(xiàn) iBATIS 非常容易使用并且在復(fù)雜的數(shù)據(jù)庫結(jié)構(gòu)上使用的非常好。</p><p>  AppFuse 不僅僅是一個(gè) web apps 的框架搭建工具,它也是整合各種像 Hibernate, Spring, 和 Struts 技術(shù)的展示柜?,F(xiàn)在的一些指南能夠告訴你如何整合這些不同的開源工具,但是很少能夠提供

66、一個(gè)你直接拿來就能用開發(fā)你的下一個(gè)項(xiàng)目的東西。在某種意義上, AppFuse 是將開源技術(shù)綁定到一起的融合劑。當(dāng)我發(fā)現(xiàn)了 spring ,它是非常的適合,因?yàn)樗梢耘渲媒M件并且使得程序中不同的 layer 松耦合。 Erik 的書可能是點(diǎn)亮 AppFuse 的火柴,但是 Spring 就像汽油一樣使得馬達(dá)轟鳴起來。 spring 使我開發(fā) AppFuse 非常的統(tǒng)一化并強(qiáng)迫我按照 best practices in J2EE 來做。簡而

67、言之,它是我在 J2EE 中使用過最好的工具。我認(rèn)為到 Spring 不僅是所有 J2EE 程序所必須的―― AppFuse 在我整合它以前也跑的很好。但是它幫助回答了我所有 ”..... 該怎么做? ” 的問題 --- 這真是雪中送炭。</p><p>  4. 它的未來將是如何的?</p><p>  AppFuse 1.5 在五月底發(fā)布。它的主要特點(diǎn)是可以選擇使用 Spring MV

68、C 代替 Struts 。所有的指南都更新了,用來教會使用者如何在他們的 web 層使用 Spring ( 或者 Struts) 。對于 AppFuse 1.6 ,我計(jì)劃增加對 WebWork 和 SiteMesh 的支持,同樣使它在 Eclipse 和 IDEA 中非常方便的運(yùn)行單元測試。在今年年末,我希望能夠增加 Tapestry 和 JSF 作為 MVC 的選擇。中間層和后臺 (Spring 加 Hibernate) 可能不會改變

69、太大。 It's a well-oiled machine at this point. 現(xiàn)在還不能說我已經(jīng)認(rèn)為 AppFuse 已經(jīng)足夠的完美了。我希望還能夠獲得有價(jià)值的反饋和建議。畢竟,能夠不斷的提高它是我的動力。</p><p>  當(dāng)我發(fā)現(xiàn)能夠革命性的非常簡單去開發(fā) web 應(yīng)用時(shí),就是 AppFuse 結(jié)束的時(shí)候。人們問我為什么 AppFuse 不支持 Middlegen 。原因很簡單:我從來沒

70、有用過或者在一個(gè)項(xiàng)目中需要使用 Middlegen ,我也看不到任何原因需要加入它。如果我做完了一個(gè)使用 Middlegen 的項(xiàng)目,當(dāng)然我會增加對它的支持。最近,我開始使用 Spring 的 MVC framework 來替換 Struts 。一開始,我發(fā)現(xiàn)理解起來有些困難,我還是使用 Spring MVC 實(shí)現(xiàn)了 web 層。因?yàn)槲以?web 層中使用了很多的特性(比如模板,驗(yàn)證,文件上傳,異常捕獲),所以在集成 Spring MV

71、C 時(shí)學(xué)到了 Spring MVC 的很多細(xì)節(jié)。</p><p>  使用和學(xué)習(xí) AppFuse 是一個(gè)非常好的方法來跟上它所依賴的項(xiàng)目的最新發(fā)布版本。我試圖盡可能的使用最新的 releases ,而且通過 AppFuse 的覆蓋單元測試,我運(yùn)行 ant test-all 能夠很容易的測試最新的發(fā)布。它甚至能夠工作在一些依賴的 resources 像 Tomcat 和 MySQL ,我能夠通過 AppFuse 發(fā)

72、現(xiàn)一些 bug 。多我來說,它作為一個(gè)測試工具用來驗(yàn)證最新的的開源 releases 的功能。</p><p>  5.AppFuse 的簡化版</p><p>  Equinox 是 AppFuse 的簡化版本;因此它的別名就是 ” AppFuse Light”. 我從 Struts 的 struts-blank 和 Spring 的 webapp-minimal 得到靈感來建立它。但是

73、這些 "starter" 的程序?qū)ξ襾碚f是不夠的,我想要一個(gè)更像 AppFuse 的東西,僅僅是簡單 — 幾乎不需要花費(fèi)時(shí)間去 build 。</p><p>  它被設(shè)計(jì)成用來展示給 web 開發(fā)人員如何去利用 Spring Live 的 QuickStart 章節(jié)去開始一個(gè)最本質(zhì)的一個(gè) Struts/Spring/Hibernate 應(yīng)用。很多的功能可能會在未來被添加,但是最主要的目標(biāo)是提

74、供一個(gè)比較好的框架 web 程序。</p><p>  Equinox 更多的用來寫指南和快速原型。我不建議用它來建立一個(gè)完整的產(chǎn)品應(yīng)用。那將是 AppFuse 的功能。</p><p>  6. 我怎么開始使用它?</p><p>  最好的辦法是下載 AppFuse 并且閱讀 QuickStart Guide 。 AppFuse 是 Java Enterpris

75、e Community 的一部分。它的項(xiàng)目主頁是 appfuse.dev.java.net 。</p><p>  如果你對 Equinox 很有興趣,你可以閱讀 Spring Live 的 QuickStart 章節(jié) 來用 Struts, Spring 和 Hibernate. 快速建立一個(gè)簡單的應(yīng)用。如果你喜歡,你可以看 view a demo of the MyUsers application ,這一章會

溫馨提示

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

最新文檔

評論

0/150

提交評論