欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    webservice接口开发培训.docx

    • 资源ID:72788672       资源大小:262.40KB        全文页数:31页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    webservice接口开发培训.docx

    接口开发目录接口开发培训文档1Webservice 接 口开发21.1 WebService简介21.2 WebService优越性21.3 Axis23Axis2 简介31.3.1 Axis2服务端发布3Axis2 客户端121.4 Jdkl6+自带 webservice14简介141.4.1 服务端开发与发布14客户端开发181.5 CXF19CXF简介191.5.1 CXF下载19CXF服务端201.5.2 CXF客户端21FTP接口开发241.6 创立 FtpCIient 实例241.7 获取ftp服务器连接、登录、切换远程路径241.8 FTP 上传251.9 FTP 下载251.10 关闭 FtpCIient 实例27Socket 接 口开发281.11 客户端/服务端工作模式281.12 TCP协议和UDP协议281.13 Socket 概况281.14 服务端创立291.15 客户端创立31d Apache Axis Service ArchiverService ArchiverSelect the Service XML file to be included in the Service archiveSet the service XML fileJ generate the servi ce xml automaticailjfiBrowse.最关键一步,填写WebService的Name ,设置class路径点击Load就能看到当前class的方法缄 Apache Axis Service Archiver回UMService ArchiverGenerate the Service XML fileService name Axis2ServiceNoConfigSearch declared methods onlyMethod name Return type Parameters7 do SthJ wait|V waitjava.lang.Stri. 1voidvoidLoad勾中的方法表示将会被暴露到客户端可以调用的方法,然后点击Next设置aar文件的名称和保持的目录回 Apache Axis Service ArchiverService ArchiverSet the output loacation and the output file nameOutput file location D:EclipseWorkspacecrankcallwsserverWEB-INFsrcBrowse.Output File Name Axis2ServiceNoConfig点击Finish你可以看至I提示successfully的提示。刷新当前工程可以看至IAxis2ServiceNoConfig.aar文件了, wsserver/ & WEB-INF/src0 田 com.neusoft国 Axis2ServiceNoConfig.aar0 :当 work0 JRE System Library jdkl.6.0_264 .在浏览器中访问地址 ServicesView the list of all the available services deployed in this server.-,ValidateCheck the system to see whether all the required libraries are in place and view the system information.dministationConsole for administering this Axis2 installation.点击Administration ,可以看到要输入用户名和密码,用户名和密码在 WEB-INFconf 下的 axis2.xml 中可以找到<parameter name=,userNamen>admin</parameter> <parameter name="password">axis2</parameter>5 .进入管理页面后,可以看到如下功能ToolsUpload ServiceSystem ComponentsAvailable ServicesAvailable Service GroupsAvailable ModulesGlobally Enqaqed ModulesAvailable PhasesExecution ChainsGlobal ChainsEngage ModuleFor all ServicesFor a Service GroupFoa ServiceFor an OperationServicesDeactMate Sen/iceActivate ServiceEdit ParametersContextsView HierarchyOperation Specific Chains上面常用的功能Upload Service当然是上传aar的文件,完成发布WebService的工具了Available Service是查看当前发布的Service详细信息Available Service Groups 是 Service 组Global Chains是可以用的全局的ChainOperation Specific Chains 是某个具体操作的 chainDeactivate Service 是取消某个 ServiceActivate Service是将取消发布的Service再发布出去Edit Parameters 是修改 WebService 类的参数6,使用Upload Service这个工具,然后选择我们刚才用axis2的工具生成aar文件,upload上传。Service archive : D:EclipseWorkspacecrankcainwsserverWEB-INRi 一至Upload其实这一步我们可以直接将Axis2ServiceNoConfig.aar文件copy到WEB-IN Fservices 这个目录下。7.然后点击 Available Service 就可以看到 Axis2ServiceNoConfig 这个Service 了1.3.3 Axis2 客户端以下客户端使用动态生成客户端的开发方式,无需手动使用工具根据wsdl生 成客户端代码,String url = ,H;String method = ndoSthn;/参数,如果有多个,继续往后面增加即可,不用指定参数的名称Object args = new Object "hello1'String classes = new Class String.class ;RPCServiceClient serviceclient = new RPCServiceClient();Options options = serviceClient.getOptions();EndpointReference targetEPR = new EndpointReference(url);options.setTo(targetEPR);/在创立QName对象时,QName类的构造方法的第一个参数表示WSDL 文件的命名空间名,也就是wsd:definitions元素的targetNamespace属 性值QName qName = new QName("",method);/返回参数类型,这个和axisl有点区别/ invokeBlocking方法有三个参数,其中第一个参数的类型是QName对 象,表示要调用的方法名;/第二个参数表示要调用的WebService方法的参数值,参数类型为 Object;/第三个参数表示WebService方法的返回值类型的Class对象,参数类型为 Classo/当方法没有参数时,invokeBlocking方法的第二个参数值不能是null ,而 要使用 new Object/如果被调用的WebService方法没有返回值,应使用RPCServiceClient类 的 invokeRobust 方法,该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的 含义相同String result = (String) serviceClientinvokeBlocking(qName, args, classes)0;Jdkl.6+自带 webservice1.4.1 简介JDK1.6+中自带了 webservice的功能,因为集成了 JAX-WS ,在开发 webservice接口时非常方便,不需要引入第三方jar包。1.4.2 服务端开发与发布.服务端程序代码举例如下JdkServicelmpl.java :WebService(name="JdkServic"zportName=,lJdkServicPort,serviceName="JdkServicName"/targetNamespace=n")SOAPBinding(style = Style.RPQuse = Use.LITERAL)public class JdkServicelmpI implements IJdkService ©OverrideWebMethod(action = "doService",operationName="doJdkService")WebResult(name="String", partName="result")public String doJdkService(WebParam(name = "paramA") Stringargs)System.out.println(args);return args;).发布服务Endpoint.publish("", new JdkServicelmpIO);Jdk自带webservice的功能实现主要通过注解的方式,注解内容详解如下:1. WebService注释规那么信息注释目标:class类属性:-name对应wsdkportType的名称,缺省值为Java类或接口的非限定名称。(字符串)-targetNamespace指定从WebService生成的WSDL和XML元素的XML名称空间。缺省值为从包含该WebService的包名映射的名称空间。(字符串)-serviceName 指定 WebService 的服务名称:wsdl:service0缺省值为Java类的简单名称+Service。(字符串)-portName wsdl:portNameo 缺省值为+ Port。(字符串)-endpointinterface指定用于定义服务的抽象WebService约定的服务端点接口的限定名。如果指定了此限定名,那么会使用该服务端点接口来确定抽象WSDL约定。(字符串)-wsdILocation指定用于定义WebService的WSDL文档的Web地址。Web地址可以是相对路径或绝对路径。(字符串)WebMethod注释表示作为一项WebService操作的方法。仅支持在使 WebService来注释的类上使用WebMethod。注释目标:方法属性:-operationName指定与此方法相匹配的wsdkoperation的名称,缺省值 为Java方法的名称。(字符串)-action定义此操作的行为。对于SOAP绑定,此值将确定SOAPAction 头的值。缺省值为Java方法的名称。(字符串)-exclude指定是否从WebService中排除某一方法。缺省值为false。(布尔值)WebParam注释用于定制从单个参数至WebService消息部件和XML 元素的映射。注释目标:参数属性:-name参数的名称。如果操作是远程过程调用(RPC )类型并且未指定 partName属性,那么这是用于表示参数的wsdtpart属性的名称。如果 操作是文档类型或者参数映射至某个头,那么-name是用于表示该参数的XML元素的局部名称。如果操作是文档类型、参数类型为BARE并且方式为OUT或INOUT ,那么必须指定此属性。(字符串)-partName定义用于表示此参数的wsdkpart属性的名称。仅当操作类型 为RPC或者操作是文档类型并且参数类型为BARE时才使用此参数。(字 符串)-targetNamespace指定参数的XML元素的XML名称空间。当属性映射 至XML元素时,仅应用于文档绑定。缺省值为WebService的 targetNamespace。(字符串)-mode此值表示此方法的参数流的方向。有效值为IN、INOUT和OUT。(字符串)-header指定参数是在消息头还是消息体中。缺省值为false.(布尔值)WebResult注释用于定制从返回值至WSDL部件或XML元素的映射。注释目标:方法属性:-name当返回值列示在WSDL文件中并且在连接上的消息中找到该返回值 时,指定该返回值的名称。对于RPC绑定,这是用于表示返回值的 wsdtpart属性的名称。对于文档绑定,-name参数是用于表示返回值的 XML元素的局部名。对于RPC和DOCUMENT/WRAPPED绑定,缺省值 为returno对于DOCUMENT/BARE绑定,缺省值为方法名+ Response。(字符串)-targetNamespace指定返回值的XML名称空间。仅当操作类型为RPC 或者操作是文档类型并且参数类型为BARE时才使用此参数。(字符串)-header指定头中是否附带结果。缺省值为false。(布尔值)-partName指定RPC或DOCUMENT/BARE操作的结果的部件名称。缺 省值为。(字符串)SOAPBinding注释指定WebService与SOAP消息协议之间的映射。 注释目标:类型或方法属性:-style定义发送至WebService和来自WebService的消息的编码样式。 有效值为DOCUMENT和RPCO缺省值为DOCUMENT。(字符串)-use定义用于发送至WebService和来自WebService的消息的格式。缺 省值为 LITERAL0 ENCODED 在 FeaturePackforWebServices 中不受支 持。(字符串)-parameterstyle确定方法的参数是否表示整个消息体,或者参数是否是 封装在执行操作之后命名的顶级元素中的元素。有效值为WRAPPED或 BARE。对于DOCUMENT类型的绑定只能使用BARE值。缺省值为 WRAPPEDO (字符串)客户端开发Jdk提供了一个wsimport工具,在jdk/bin目录下,这个工具可以生成JAVA 客户端的调用代码,进入DOS下,执行wsimport -s e:/test -keep命令,便 可在e:/test目录下生成客户端代码,根据上面举例的服务端生成的客户端 java文件如下: / 田 t> 团 Jdkl6Client.javat> 出 JdkServic.java t> J JdkServicName.java客户端代码如下:JdkServicName jsn = new JdkServicName();jsn.getJdkServicPort().doJdkService("doJdkService");由上面的例子,可以看出使用jdkl.6+自带的webservice功能,开发非常方 便,代码也非常简洁。1.5 CXFCXF 简介Apache CXF = Celtix + XFire , Apache CXF 的前身叫 Apache CeltiXfire ,现在已经正式更名为Apache CXF 了 ,以下简称为CXFO CXF 继承了 Celtix和XFire两大开源工程的精华,提供了对JA承WS全面的支 持,并且提供了多种Binding、DataBindingN Transport以及各种 Format的支持,并且可以根据实际工程的需要,采用代码优先(Code First)或者 WSDL优先(WSDL First)来轻松地实现 Web Services的发 布和使用。Apache CXF已经是一个正式的Apache顶级工程。1.5.1 CXF 下载下载地址:The 2.7.0 release is our latest release. For a complDescriptionFileSource distribution apache-cxf-2.7.0-src.zip <Binary distribution 将下载的压缩包解压,将lib目录下的jar包导入到工程工程中,至少包含以下 jar 包:1. Webservice 接口开发WebService 简介Web Service是一种新的Web应用程序分支,他们是自包含、自描述、 模块化的应用,可以发布、定位、通过Web调用。Web Service可以执行从 简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service 应用程序可以发现并调用它部署的服务。Web Service是一种应用程序,它运用了 Web网络技术和基于组件开发 的精华成分。可以使用标准的互联网协议,像超文本传输协议( )和XML, 将功能纲领性地表达在互联网和企业内部网上。像DCOM、RMI、HOP等基 于组件的对象模型已经流行了较长一段时间了。然而这些模型都是依赖于一个 特定的对象模型协议。Web Service扩展了这些模型,使之可以和简单对象访 问协议(Simple Object Access Protocol , SOAP)以及XML通信以根除特定对 象模型协议带来的障碍。可将WebService视作Web上的组件编程。简单来说,Web service就是一个应用程序,它向外界暴露出一个能够通 过Web进行调用的接口。目前常用的WebService框架有AXIS、XFIRE、CXFWebService 优越性WebService有以下的优越性:1 .平台无关。不管你使用什么平台,都可以使用Web serviceo.编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站 要求Web serviceo这大大增加了 web service的适用性,降低了对程序 员的要求。loio 遍 oio imi 证 geronimo-servlet_还 ioio loio 还 neethi-3.O.2,jarfoio i还 loio 画 i还 loio loio ioio loio 1.5.3 CXF月艮务端接口程序编写与jdk自带webservice服务端编写相同,同样采用注解的方式,程序代码举例如下:1 .接口类 IHelloWorld.javaWebServicepublic interface IHelloWorld WebMethodString sayHello(WebParam(name="name")String name); ).实现类 HelloWorldlmpl.javaWebServicepublic class HelloWorldlmpI implements IHelloWorld Override public String sayHello(String name) System.out.println("sayHello is called by " + name);return "hello " + name; ) ).发布服务IHelloWorld helioWorld = new HelloWorldImpl();创立WebService服务工厂JaxWsServerFactoryBeanfactory=newJaxWsServerFactoryBean();注册 WebService 接口factory.setServiceClass(IHelloWorld.class);发布接口factory.setAddress(n");factory.setServiceBean(helloWorld);创立 WebServicefactory.create();1.5.4 CXF客户端1 .动态客户端该方式主要使用了 JaxWsDynamicClientFactory工厂类,代码开发比拟简单,但是性能较低,以下代码中在createClient操作中,会动态生产webservice下所有方法类、参数类、返回值类等等文件,代替了手动使用命令生成客户端文件的步骤,耗时很大,所以会很慢。String url = "H;创立工厂实例JaxWsDynamicClientFactory def = JaxWsDynamicClientFactory./7eukZ>75fa/7ce();org.apache.cxf.endpoint.Client client = dcf.createClient(url); Conduit = ( Conduit) client.getConduit(); CIientPolicy CIientPolicy = new CIientPolicyO;连接超时 ClientPolicy.setConnectionTimeout(60000);/取消块编码 ClientPolicy.setAllowChunking(false);响应超时 ClientPolicy.setReceiveTimeout(60000); .setClient( ClientPolicy);Object objects = clientinvokeCsayHello", "jack");2 .生成java客户端代码 1)下载的apache-cxf-270.zip包中,bin目录下是exf提供的工具,将解压缩后的目录copy到相应的磁盘目录下,如D:prog rams2)配置CXf环境变量创立一个CXF.HOME变量,值为CXF框架所在根目录(如D:programsapache-cxf-27.0 );配置 CLASSPATH : %CXF_HOME%lib; PATH : %CXF_HOME%bin;3)执行命令,生成客户端代码进入 DOS 模式下,执行 wsdl2java -p com.neusoft.cxf -d e:test -clientC: MJsersXAdninistrator>wsdl2jaua -p con.neusoft.cxf -d e:test -client :/10L4.66.117:8888/HelloWorld?wsdl将生成的客户端代码copy至I工程工程下,如下列图:田 J| CxfClient.javat> J) IHelloWorldJHelloWorldPort_Clientjavat> |J IHelloWorldjava| j IHelloWorldService.javat> ObjectFactory.javat> package-info.javat> 团 SayHello.javaJj SayHelloResponse.java编写客户端调用代码,CxfClienjava文件,代码如下:IHelloWorldService hs = new IHelloWorldServiceQ;String result = hs.getlHelloWorldPortO.sayHelloCJack");4) CXF wsdl2java 命令详解wsdl2java -p com -d src -all aa.wsdl-p指定其wsdl的命名空间,也就是要生成代码的包名:-d指定要产生代码所在目录-client生成客户端测试web service的代码-server生成服务器启动web service的代码-impl生成web service的实现代码-ant 生成 build.xml 文件-all生成所有开始端点代码FTP接口开发本文介绍的FTP接口开发,采用叩ache的中的组件。下载地址:commons-3 ,2 bin ,tagzcommons-net-3 .2-bin zi2.1 创立实例=new ();2.2 获取ftp服务器连接、登录、切换远程路径/设置超时时间(毫秒数);/GBK UTF-8(编码格式);(ftp服务器IB ftp服务器端口);int reply =();获取连接返回码if (1(reply) return false;(登录账号,登录密码);reply =();获取登录返回码if (reply = 530) 登录失败,用户名或密码错误return false;)设置二进制文件(BINARY二进制文件)操作,默认不设置传输ASCII文件(如txt)是没有问题的0;/登录成功后,切换远程路径if (ftp服务器上的目录路径)二二false) return false;)FTP上传上一步成功操作后,接下来便可执行文件上传操作input = new (new File(上传文件的路径);boolean is Store = (comp, input);input.close();FTP下载获取与ftp服务器的连接、登录并切换至远程目录下后,通过以下方式进行ftp下载获取ftp服务器远程目录下的文件列表files =();循环文件列表,下载文件for ( file : files) String =();创立目标文件对象=new File(本地文件路径+ + );创立临时文件=new File(本地文件路径 + + + ".tmp");fos = null;/如果下载临时文件存在,那么进行断点续传if (temp() /创立输出流fos = new (tempfile, true);/设置续写点(tempO); else /创立输出流fos = new (tempfile);T载文件 boolean isDown = (, fos);关闭输出流if (null != fos) fos.closeO;)/下载文件成功后,将临时文件名修改为正式文件名 temp(destFile);将下载后的文件最后修改时间设置与源文件的最后修改时间一致 dest().getTimeInMillis();)关闭实例if (!= null) /登出FTP服务器,并断开连接try (if ()0;) catch (lOException ex) ex.printStackTraceQ;3. Socket接口开发客户端/服务端工作模式服务器端服务器端客户端TCP协议和UDP协议TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传 输的协议。通过TCP协议传输,得到的是一个顺序的无过失的数据流。UDP> User Datagram Protocol的简称,是一种无连接的协议,每个数 据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何 可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的 正确性都是不能被保证的。3.1 Socket 概况Socket是基类,支持TCP协议。Socket类提供流I/O方法,使从Socket读 出和写进方便。Server Socket是由因特网服务器程序用于响应客户请求的类。Server Socket 实际上并不完成服务,而是为客户创立Socket对象。通信在创立的对象之间进行。3.2 服务端创立.要创立服务端,首先需要创立ServerSocket对象监听客户请求的特定端 o1 .当ServerSocket对象通过指定端口接收到有效请求后,服务端Socket获 得客户端创立的Socket对象,之后用这个Socket对象进行服务端和客户 端之间的通信。2 . ServerSocket对象通过accept。方法来监听客户端的请求,如果接收到客 户请求,那么产生一个客户端的Socket对象,并继续执行后面的代码;如果 没有接收到客户请求,那么产生一个错误信息。3 . accept。方法采用阻塞模式,如果没有接收到客户端请求,就会阻塞,直到 接收到客户请求。4 .服务端短连接代码举例:短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成 后,那么断开此TCP连接。try(ServerSocket oServerSocket = new ServerSocket(port);Socket oSocket = oServerSocket.accept();BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStreaPrintWriter out = new PrintWriter(new BufferedWriter(3 .对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。4 .对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合 (mashup )1.3 Axis21.3.1 Axis2 简介Axis2是目前比拟流行的WebService弓|擎。WebService被应用在很多不同 的场景。例如,可以使用WebService来发布服务端Java类的方法,以便使 用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系 统。WebService还经常被使用在SOA中,用于SOA各个局部交换数据。1.3.2 Axis2服务端发布集成Axis2要在自己工程中使用Axis2进行webservice接口的开发,首先需要将axis2与工程工程进行集成,这样便于之后的接口服务端的开发与发布。1 .开发环境:apache tomcat6.0+s jdkl.6+x axis2-1.6+ , tomcat6.0 以上 版本与axis2-1.5版本不兼容。2 . 下载 axis2-1.6.2-war.zip ,地址:Version DateDescriptionDistribution17 - Apr - 20121.6.2 Release (Mirrored) Binary Distribution zip | MD5 | PGPSource Distribution zip | MD5 | PGP WAR Distribution zip | MD5 | PGP3.将下载后的zip包解压缩,进一步讲里面的axis2.war解压缩,将axis2-web & org 两个目录Copy到工程工程的根目录下,将WEB-INF下的 conf lib modules services四个目录copy到工程工程的new OutputStreamWriter(socket.getOutputStr eam(), true);String mes = ins.readLine();outs.print("xxxx");outs.flushO;in.closeO;out.closeO;oSocket.closeO;catch (Exception e) e.printStackTrace();).服务端长链接代码举例:所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接 保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需 要自己做在线维持。try(ServerSocket oServerSocket = new ServerSocket(port);Socket oSocket = oServerSocket.accept();Buffered Reader in = new Buffered Reader(new InputStreamReader(socket.getInputStream();PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socketgetOutputStream(), true);while (true) String mes = ins.readLine();outs.print("xxxx");outs.flushO;)catch (Exception e) e.printStackTrace();).服务端通过多线程实现与多客户端连接,详见如下附件代码J JServerThread.javaSocketServer.java6 .5 客户端创立.短连接代码举例:Socket socket = new Socket(服务端 IR 端口);try(Buffered Reader in = new BufferedReader(new InputStreamReade r(socket.getInputStream();PrintWrite out = new PrintWriter(BufferedWnter(new OutputStreamWriter(socket.getOutputStream (), true);out.println("bye bye");String str = in.readLineQ;in.close();out.closeO;catch(Exception e)e.printStackTrace();finallysocket.closeO;).长链接代码举例:在客户端不需要关

    注意事项

    本文(webservice接口开发培训.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开