应用服务器课件_第1页
应用服务器课件_第2页
应用服务器课件_第3页
应用服务器课件_第4页
应用服务器课件_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 六 讲 应用服务器1第1页,共81页。内容一、动因二、三层架构三、Web 服务器四、业务构件容器五、基于应用服务器的软件开发2第2页,共81页。一、动因两层架构典型的问题:客户端程序的分发、升级开销较大浏览器的优势:客户端不需要专门的程序只要有浏览器就可以访问服务器上的资源 资源:文件、数据、服务、 导致了三层架构的广泛采用应用服务器对三层架构提供了有力的支持3第3页,共81页。随着网络软件的应用面越来越广 服务器端软件变得越来越重要从早期的 FTP 服务器、WWW服务器、邮件服务器 逐步向更广泛的应用领域发展迫切需要有新型的高层开发平台给予支持提高开发效率与应用的质量多数网络环境中的高层

2、开发平台逐步将自己 定位为一种应用服务器其中,遵循 J2EE 规范的应用服务器影响最大4第4页,共81页。二、三层架构 操作系统 应用服务器 应用程序 浏览器 数据库 用户界面层 业务逻辑层 数据访问层 5第5页,共81页。用户界面层负责 接受用户的输入、向用户输出结果或者提示信息不负责 进行具体的处理过程可能 会在用户输入后进行 合法性验证业务逻辑层是 三层架构的核心层是 连接用户界面层与数据访问层的纽带根据用户的请求 生成检索语句或更新数据库 并把结果返回给 用户界面层数据访问层负责实际的数据存储和检索过程6第6页,共81页。三层架构的优点:不必为了业务逻辑上的微小变化而迁至整个程序的修改

3、 只需要修改商业逻辑层中的一个函数或一个过程增强了代 码的可重用性便于不同层次的开发人员之间的合作只要遵循一定的接口标准就可以进行并行开发对于三层架构的应用系统前面两章讲到的两层架构技术几乎都要用到也有人在此基础上提出4层架构、N层架构 7第7页,共81页。三层架构与两层架构比较1)两层架构优点: 由于客户端与服务器的直接相连,因此响应速度快 操作界面漂亮、形式多样缺点: 需要专门的客户端安装程序配置、维护开销大 8第8页,共81页。2)三层架构 优点: 客户接入简单不需要在本地安装软件,只需要浏览器业务扩展简单方便通过增加网页即可增加服务器功能 维护简单方便只需要改变网页,即可实现所有用户的

4、同步更新 缺点: 界面灵活性降低页面动态刷新,响应速度明显降低 第9页,共81页。J2EE 平台对三层架构的支持1)基本支持架构 操作系统 JSP POJO 应用服务器 应用程序 浏览器 数据库 Web 容器(Web服务器) 构件容器(EJB、POJO容器) 数据访问层 POJO用户界面层 业务逻辑层 Servlet EJB第10页,共81页。2)SSH 支持 操作系统 应用服务器 应用程序 浏览器 数据库 用户界面层 业务逻辑层 数据访问层 Structs Spring Hibernate 11第11页,共81页。Web 服务器、应用服务器、数据服务器 由于客户/服务器模式在网络环境下的应用

5、十分普遍,因此现在出现了越来越多的服务器一般人们理解的服务器是一种高性能计算机,作为网络的节点,存储、处理网络上80的数据、信息而个人电脑、笔记本、PDA、手机等固定或移动的网络终端可以从服务器获取信息,或者通过服务器进行交互服务器的构成与微机基本相似但在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面存在差异很大硬件服务器上加载了相应的服务器端软件后 就构成了上述各类服务器12第12页,共81页。Web服务器 专门处理HTTP请求(request) Web 服务器可以单独使用,为简单系统提供支持应用服务器以为应用程序提供商业逻辑支持为主目前的大多数应用服务器包含一个内置的Web服务

6、器也可以将Web服务器独立配置,和应用程序服务器一前一后这种功能的分离有助于提高性能,给最佳产品的选取留有余地 数据服务器是安装了数据库管理系统的服务器13第13页,共81页。三、Web 服务器1、概述2、HTTP3、HTML4、动态页面14第14页,共81页。Web服务器主要处理遵循HTTP的请求消息 当接收到一个HTTP请求消息时 会返回一个HTTP响应消息 例如送回一个HTML页面为了处理一个请求 可以响应一个静态页面或图片或者进行页面跳转或者 把动态响应的产生委托给一些其它的程序 CGI脚本JSP(JavaServer Pages),servlets,ASP(Active Server

7、 Pages)1、概述15第15页,共81页。 Web 服务器 Web 浏览器 1.向 Web 服务器发出 Web 请求 2.查找页面 3.向 Web 浏览器发送页面内容 其特征包括:(1)应用层使用HTTP协议 协议(2)HTML文档格式 描述语言(3)浏览器统一资源定位器(URL) 查找方式16第16页,共81页。HTTP的主要处理步骤: 连接 = 请求 = 应答 = 关闭连接 Web浏览器与Web服务器建立连接 打开一个称为socket(套接字)的虚拟文件(2) 请求 Web浏览器通过socket向Web服务器提交请求 HTTP的请求一般是GET或POST命令 GET命令的格式为:GET

8、 路径/文件名 HTTP/1.0 文件名指出所访问的文件 HTTP/1.0指出Web浏览器使用的HTTP版本 POST用于FORM参数的传递2、HTTP17第17页,共81页。(3) 应答 请求消息通过HTTP协议传送给Web服务器 Web服务器接到后,进行事务处理 处理结果又通过HTTP传回给Web浏览器 从而在Web浏览器上显示出所请求的页面 (4) 关闭连接 当应答结束后,Web浏览器与Web服务器必须断开 以保证其它Web浏览器能够与Web服务器建立连接18第18页,共81页。GET /simple.htm HTTP/1.1Accept: image/gif, image/x-xbit

9、map, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)H

10、ost: localhost:8080Connection: Keep-Alive一个例子(”hello world”)请求消息:19第19页,共81页。HTTP/1.1 200 OKServer: Microsoft-IIS/5.1X-Powered-By: ASP.NETDate: Fri, 03 Mar 2006 06:34:03 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Fri, 03 Mar 2006 06:33:18 GMTETag: 5ca4f75b8c3ec61:9eeContent-Length:

11、 37hello world应答消息:200就表示操作成功404表示对象未找到500表示服务器错误403表示不能浏览目录20第20页,共81页。3、HTMLHTML(Hypertext Markup Language)即超文本标记语言是用来制作网页的标记语言 是一种标记语言:不需要编译,直接由浏览器执行是一个文本文件,包含了一些HTML元素,标签等文件必须使用html或htm为文件名后缀是大小写不敏感的:HTML与html是一样的21第21页,共81页。高级软件工程 2009软件构件与中间件课程设置目标:如何提高软件的开发效率与产品质量。特别是:.讲义下载(随着讲课进度的推进而不断更新)第0讲

12、:课程介绍(2.20)第1讲:网络软件(2.20)第2讲:中间件概述(2.27、3.06)第3讲:软件交互基础(3.13)第4讲:远程过程调用(3.20)第5讲:对象请求代理(3.27)第6讲:应用服务器(1)(4.03)第7讲:应用服务器(2)(4.10)第8讲:支持Web服务的中间件(4.17)22第22页,共81页。4、动态页面静态页面 是 不能根据外部信息自动更新内容的页面静态页面 不是 网站上没有动画静态页面 一般是 html或htm 文件如果想更新网页内容就要通过FTP软件把文件DOWN下来用网页制作软件修改 动态页面 可以通过外部系统对页面的内容进行更新 有数据库:页面里只是写代

13、码,内容保存在数据库里更新方便,易操作 动态页面也可以在发布时生成htm后缀的文件动态网站常用开发语言有: CGI, PHP,ASP, JSP23第23页,共81页。CGI (Common Gateway Interface):公用网关接口页面通过CGI调用在WEB服务器的计算机上运行的程序再将其运行结果通过WEB服务器传输到客户端的浏览器上CGI建立WEB页面与脚本程序之间的联系可以利用脚本程序来处理访问者输入的信息并据此作出响应这样的编制方式比较困难而且效 率低下 每一次修改程序都必须重新将CGI程序编译成可执行文件最常用于编写CGI技术的语言是Perl(Practical Extract

14、ion and Report Language,文字分析报告语言)它具有强大的字符串处理能力特别适合用于分割处理客户端Form提交的数据串(1) CGI24第24页,共81页。PHP(Hypertext Preprocessor):超文本预处理器一种易于学习和使用的服务器端脚本语言是嵌入HTML文件的一种脚本语 言。语法大部分是从C,JAVA,PERL语言中借来它是当今 INTERNET上流行的脚本语言只需要很少的编程知识就能使用PHP建立一个真正交互的WEB站点可以结合HTML语言共同使用与HTML语言具有非常好的兼容性使用者可以直接在脚本代码中加入HTML标签在HTML标签中加入脚本代码从

15、而更好的实现页面控制提供更加丰富的功能(2)PHP25第25页,共81页。ASP(Active Server Pages)微软开发的一种类HTML、Script与CGI的结合体没有提供自己专门的编程语言允许用户使用包括VBSCRIPT,JAVASCRIPT等在内的许多已有的脚本语言编写 ASP的应用程序ASP的程序编制比HTML更方便且更有灵活性在WEB服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器(3)ASP26第26页,共81页。JSP(Java Sever Pages)和 ASP在技术方面有许多相似之处都是为实现动态交互网页制作提供的技术环境支持都能够为程序开发人员提

16、供实现应用程序的编制及 将 网页 与 构件 从逻辑上分离的技术都能够替代CGI:使网站建设与发展变的较为简单与快捷不过两者对实现基础要求不相同ASP一般只应用于Windows NT/2000平台JSP则可以不加修改地在85%以上的Web Server上运行其中包括了NT的系统基于JSP技术的应用程序比基于ASP的应用程序易于维 护和管理(4)JSP27第27页,共81页。在一个JSP文件第一次被请求时JSP引擎把该JSP文件转换成为一个servlet客户访问这个页面的时候如果该文件没有发生过更改JSP引擎就直接调用已经装载的Servlet如果已经做过修改的话那就会再次执行以上过程:翻译、编译并

17、装载 在JSP技术中,JavaBean实现了业务逻辑部分它把数据返回给JSP页面由JSP页面负责格式化数据并输出到客户端的浏览器Sun的Enterprise BluePrints 提供了大量指导原则、设计模式和很好的例子:网上宠物店: Java Pet StoreJSP 与 Servlet28第28页,共81页。(5)AJAX传统的Web应用允许用户端填写表单(form)当送出表单时就向Web服务器发送一个请求服务器接收并处理传来的表单然后送回一个新的网页这个做法浪费了许多带宽:在前后两个页面中的大部分HTML码往往是相同的由于每次都需要向服务器发送请求应用的响应时间就依赖 于服务器的响应时间

18、这导致了用户界面的响应比本机应用慢得多29第29页,共81页。AJAX(Asynchronous JavaScriptand XML)应用可以仅向服务器发送并取回必需的数据它使用SOAP或 其它一些基于XML的页面服务接口并在客户端采用JavaScript处理来自服务器的响应因为在服务器和浏览器之间交换的数据大量减少大 约只有原来的5%结果我们就能看到响应(服务器响应)更快的应用(結果)同时很多的处理工作可以在发出请求的客户端机器上完成所以Web服务器的 处理时间也减少了30第30页,共81页。Ajax的优点:能在不更新整个页面的前提下维护数据使Web应用程序更为迅捷地回应用户动作并避免了在网

19、络上发送那些没有改变过的信息Ajax不需要 任何浏览器插件但需要 用户允许JavaScript在浏览器上执行缺点:可能破坏浏览器后退按钮的正常行为:在动态更新页面的情况下用户无法回到前一个页面状态这是因为浏览器仅能记下历史记录中的静态页面一个被完整读入的页面与一个已经被动态修改过的页面 之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。31第31页,共81页。开发者已想出了种种办法来 解决这个问题当中大多数都是在用户单击后退按钮访问历史记录时通过建立或使用一个隐藏的IFRAME来重现页面上的变更例如,当用户在 Google Ma

20、ps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片 断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚 点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。32第32页,共81页。四、业务构件容器1、软件构件2、EJB3、EJB构件容器4

21、、消息截取器33第33页,共81页。1、软件构件从一般意义上讲构件是 系统中可以明确辨识的构成成分软件构件则是 软件系统中 具有一定意义的相对独立的构成成分目前讨论的软件构件主要着眼于其易复用、易维护意义34第34页,共81页。代码(程序) 目标码态 源代码态 运行态 存储态 文档 编译 加载 软件 = 程序 + 文档静态 35第35页,共81页。定义1 Szyperski 1996 一个构件是一个组装单元它具有约定式规范的接口以及明确的依赖环境构件可以被独立地部署,由第三方组装定义2 SEI 2001 构件是一个不透明的功能实现体能够被第三方所组装,且符合一个构件模型 36第36页,共81页

22、。定义3:构件是可以被复用的软件实体,由构件规约与构件实现两部分组成复用可以发生在不同应用领域的软件系统之间可以发生在相同领域内的不同系统之间,可以发生在一个系统在演化过程中的不同阶段之间 37第37页,共81页。构件规约(specification)构件规约用于描述如何对构件进行使用与管理是对构件外部特征的形式化描述是关于构件的知识 构件规约 构件接口(客户合约) 构件信息(组装合约) 构件的运行管理规约(运行合约) 构件的使用规约 38第38页,共81页。构件实现(Implementation)构件实现是构件内部的代码实现体对于一个面向过程的系统一个构件由系统的一个或多个紧耦合的模块组成对

23、于一个面向对象的软件系统一个构件由系统的一个或多个紧耦合的对象组成 39第39页,共81页。 (a) (b) (c) 构件 构件实现 构件规约 构件实现 构件规约1 构件规约2 构件实现1 构件规约 构件规约 构件实现2 构件的规约与实现40第40页,共81页。EJB:Enterprise JavaBean是服务器端的软件构件规范是面向分布式、事务处理的企业级应用系统的构件而在此之前的 JavaBean重点在于允许开发者在开发工具中可视化地操纵构件EJB保持了Java “一次编写,随处可用”的特点2、EJB41第41页,共81页。构件包含对企业数据进行操作的业务逻辑构件实例由容器在运行时创建并

24、管理构件在部署时可以通过编辑其环境入口而定制各种服务信息(事务、安全等属性)被从构件类中剥离出来 并使得服务信息可以在系统组装或者部署时管理42第42页,共81页。客户对构件的访问通过容器间接进行如果构件仅使用EJB规范定义的服务它可以被部署在任意容器中构件可以在不修改源代码、不重新编译的前提下 加入到一个应用系统中构件提供者定义构件的客户视图43第43页,共81页。EJB 是相对粗粒度的业务对象例如定单、雇员记录等细粒度的对象例如定单行、雇员地址等不适于模型化为构件EJB 的粒度44第44页,共81页。Enterprise BeaninstanceContainerEJB ServerCli

25、entDeployment descriptorcomponentcontractclient-viewEJB边界45第45页,共81页。ContainerEJB ServerClientEJBHomeEJBEJBObjectTransactionSecurityJDBCJMS46第46页,共81页。构件客户 系统组装者 构件容器 EJB 构件实现 系统部署者提供给系统开发者的信息 EJB构件的规约47第47页,共81页。(1)最基本的EJB实现与客户程序 EJB构件实现 客户程序接口实现体部署描述48第48页,共81页。1)EJB构件接口构件提供者为便于复用者(客户)复用该构件所提供的必要的

26、信息(特别是接口信息)构件与容器协作实现这些接口49第49页,共81页。构件的接口主要包括实例接口与类型接口EJB:Home Interface Component Interface(Remote Interface)这两类接口的划分与客户向服务器发出的请求密切相关一种请求 特定于具体构件实例 与这种请求对应的接口简称为实例接口一种请求 不特定于具体构件实例 与这种请求对应的接口简称为类型接口50第50页,共81页。EJB 接口例子import java.io.Serializable;import java.rmi.RemoteException;import javax.ejb.Crea

27、teException;import javax.ejb.EJBHome;public interface ConverterHome extends EJBHome Converter create() throws RemoteException,CreateException;Home Interfaceimport javax.ejb.EJBObject;import java.rmi.RemoteException;public interface Converter extends EJBObject public double dollarToYen(double dollars

28、) throws RemoteException;public double yenToEuro(double yen) throws RemoteException;Remote Interface51第51页,共81页。import javax.ejb.SessionBean;import javax.ejb.SessionContext;public class ConverterEJB implements SessionBean public double dollarToYen(double dollars) return dollars * 121.6000;public dou

29、ble yenToEuro(double yen) return yen * 0.0077;public ConverterEJB() public void ejbCreate() public void ejbRemove() public void ejbActivate() public void ejbPassivate() public void setSessionContext(SessionContext sc) 2)EJB构件实现类Server52第52页,共81页。 EJBModule1 Converter org.ejb.sessionbean.ConverterHom

30、e org.ejb.sessionbean.Converter org.ejb.sessionbean.ConverterBean Stateless Container 3)EJB构件部署描述符53第53页,共81页。 Jar 文件 描述 Java Home Interface Java Remote InterfaceJava 实现类构件封装体54第54页,共81页。import javax.naming.Context;import javax.naming.InitialContext;import javax.rmi.PortableRemoteObject;import Conve

31、rter;import ConverterHome;public class ConverterClient public static void main(String args) try Context ic = new InitialContext();Object objref = ic.lookup(“MyConverter”);ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objref,ConverterHome.class);Converter currencyConverter = home.cr

32、eate();double amount = currencyConverter.dollarToYen(100.00);System.out.println(String.valueOf(amount);amount = currencyConverter.yenToEuro(100.00);System.out.println(String.valueOf(amount);currencyConverter.remove(); catch (Exception ex) System.err.println(“Caught an unexpected exception!”);ex.prin

33、tStackTrace(); Client55第55页,共81页。56第56页,共81页。(2)EJB构件分类为什么需要区分不同类别的构件?完成功能不同共享方式不同管理方式不同不同厂商实现侧重点不同57第57页,共81页。Jacobson:系统与演员(用户或者外部系统)之间的交互长期存在的持久信息协作、时序、事务和对其他对象的控制;可用于封装与特定用例有关的控制分析类可以被划分为三类:boundary、control、entity58第58页,共81页。分析模型出钱口柜员界面取钱帐户进钱口转帐存钱取钱用例模型存钱转帐59第59页,共81页。EJB构件分类:会话构件(Session Bean)有

34、态会话构件无态会话构件实体构件(Entity Bean)BMP实体构件CMP实体构件消息驱动构件(Message-Driven Bean)60第60页,共81页。特征: 与单个客户相对应不直接表示数据库中的共享数据尽管可以访问、更新共享数据生命周期相对较短当EJB容器崩溃时,也随着消失类别:Stateful (有态)Stateless (无态)会话构件61第61页,共81页。有态构件一个会话通常是有状态的因为一个会话过程通常涉及多个(多次)方法的调用 它们之间存在数据上的关联因此,需要为每个独立的客户保持其状态例如:网上购物过程中(该过程可能跨越数分钟、数小时、甚至数天)通常进行多次向购物车增

35、加商品的操作这就需要在购物过程中一致保持用户的状态62第62页,共81页。无态构件部分会话过程可以无状态它仅涉及简单的操作此时,不必为客户保留状态信息例如:一个购物过程结束时,计算合计的过程Stateful ? Stateless? 过程需要保持状态?加入过程中断,恢复运行时需要以前的信息吗?63第63页,共81页。特征:持久性构件管理的持久性(Bean-Managed Persistence)容器管理的持久性(Container-Managed Persistence)可以同时为多个客户服务.生命周期较长(与数据库中的数据相同)当 EJB 容器崩溃时,可以被恢复.类别:BMPCMP实体构件6

36、4第64页,共81页。BMP构件(Bean-Managed Persistence Entity Bean)CMP构件(Container-Managed Persistence Entity Bean)构件自己(构件提供者)处理持久性问题例如:将状态存储到外存从外存读取状态 查找构件等等构件容器负责处理构件的持久性问题进一步减轻构件开发者的工作实现过程复杂65第65页,共81页。EJB Server/ContainerClientEntity beansession bean66第66页,共81页。消息驱动的构件 (Message-Driven Bean)特征: 为单个客户发出的消息服务 不

37、直接表示数据库中的共享数据尽管可以访问、更新共享数据 生命周期相对较短当EJB容器崩溃时,也随着消失无状态67第67页,共81页。在编程语言中 每个数据对象都是数据值的容器COM套间通过线程模型将不同的对象分割到不同的运行空间中使得它们的运行相对独立MTS引入了事务性上下文概念共享相同事务域的多个对象处于同一个线程中这同样将它们与系统的其他部分隔离开来在.NET的CLR中同时吸取了COM与MTS中的上述技术跨越上下文的访问被执行引擎所控制并可能进行一些特殊处理EJB模型中的容器概念比较完善除了 采用类加载器分别加载不同的构件外EJB容器还为EJB构件实例承担了记录上下文、控制生命周期、控制对实

38、例的访问等任务 3、EJB构件容器68第68页,共81页。构件容器的功能 网络环境中的软件必须考虑客户访问量问题一个拥有大量用户的系统可能需要同时运行成千上万的对象如果不控制系统资源的使用 将使系统因为资源不足而大大降低响应时间甚至导致系统不可用应用服务器通过容器对大量构件实例的有效管理来提高系统的资源利用率所依赖的主要机制为:实例池冻化/活化生命周期管理等 69第69页,共81页。1) 实例池实例池技术是系统软件中普遍使用的共享技术其核心思想是将暂时不用的资源实例缓存起来放到实例池中当下一个客户需要访问资源时 直接从实例池中取出来为客户服务实例池技术带来的好处主要有两方面:其一,有效地减少对

39、实例频繁的创建与删除工作 提高了响应速度其二,通过设定实例池的大小 可以限制访问客户的数目以保证正在访问客户的服务质量 实现构件实例池的基本方法是:在加载系统时,为一个构件类型创建多个实例。当一个客户提出请求时,从实例池中提取构件实例建立起与客户的关联当客户不再需要构件服务时,将实例放回实例池70第70页,共81页。2) 冻化/活化有态构件不同于无态构件的地方在于:有态构件保持一个业务过程中前后方法调用之间的状态这个状态代表着有态构件实例与其客户之间的一个对话对有态构件实例进行有效资源管理的技术是冻化、活化技术当一个构件实例的访问频率较低 而此时又有大量客户需要服务时可以将这个有态构件实例挂起

40、 以减少系统中构件实例的数目挂起有态构件的实例需要保持其话态,实例的状态将被序列化序列化构件实例时 除了需要将该实例从内存中暂时删除外还需要将该实例的状态保存到外存中(例如一个文件系统等)当这个实例的客户再次访问该实例时 容器将首先构造一个新实例 然后从外存中取出实例的状态并恢复实例的状态冻化/活化技术也适用于实体构件 71第71页,共81页。3) 生命周期管理构件的实现体一般随着应用系统的部署被加载到应用服务器中被构件容器所管理例如:创建构件实例查找构件实例删除构件实例接收客户请求消息 等构件的生命周期管理主要是指构件实例的生命周期管理 72第72页,共81页。构件提供者在构件类中实现业务逻辑 客户请求通过构

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论