首页 项目实验笔记-juddi配置

项目实验笔记-juddi配置

举报
开通vip

项目实验笔记-juddi配置项目实验笔记 本实验用到的主要工具是: 服务器:jboss-4.0.5.GA版本 开发工具:Eclipse 3.2,MySQL-5.0.26版本,Sql Server2000个人版 1.​ 下载和安装JBoss 本实验中用到的应用服务器是JBoss,下面就简单说一下JBoss的下载与安装。 1.1​ 前提条件 在安装和运行JBoss服务器之前,需要检查系统,确认系统是否安装了JDK1.4或以上 版本的JDK。安装可执行文件之后,用户还需要将JAVA_HOME环境变量取值设为JDK的安装路径。经过试验,我们推荐使用1...

项目实验笔记-juddi配置
项目实验笔记 本实验用到的主要工具是: 服务器:jboss-4.0.5.GA版本 开发工具:Eclipse 3.2,MySQL-5.0.26版本,Sql Server2000个人版 1.​ 下载和安装JBoss 本实验中用到的应用服务器是JBoss,下面就简单说一下JBoss的下载与安装。 1.1​ 前提条件 在安装和运行JBoss服务器之前,需要检查系统,确认系统是否安装了JDK1.4或以上 版本的JDK。安装可执行文件之后,用户还需要将JAVA_HOME环境变量取值设为JDK的安装路径。经过试验,我们推荐使用1.5.0_07版本。最简单的方法就是点击开始 运行,到如下界面 点击确定,执行java –version命令 输出如上的版本信息,就证明JDK已经安装成功。如果没有输出如上信息,请检查classpath和path里面是否输入了正确的JDK的路径信息。 1.2​ 下载JBoss 用户可以从JBoss网站(http://www.jboss.org/downloads/index)免费下载到JBoss应用服 务器。网站上同时提供了二进制发布版和源代码发布版,建议使用二进制发布版。 1.3 安装JBoss JBoss的安装,只需要将下载的二进制文件解压。请注意,JBoss在系统中的安装位置并不重要,但是JBoss的安装路径里不可以包含空格,否则会导致错误的出现。设置JBOSS_HOME为JBoss的安装目录。具体步骤为:右击我的电脑,选择属性,再选择高级,环境变量,弹出如下对话框: 然后单击新建,出现新建系统变量如下对话框: 输入如上安装目录信息,点击确定就完成了JBoss安装路径的设置。 1.4​ 启动JBoss 在windows系统下启动JBoss,可以有如下三种方法: (1.)可以到JBoss的主安装目录bin下,找到run.bat批处理文件,双击即可启动JBoss。 (2.)可以在环境变量里面设置JBoss的启动路径,如下图,即把JBOSS_HOME\bin放入path里面。 然后单击开始,运行,输入run就启动了JBoss。 (3.)直接点击开始,运行cmd,然后进入JBOSS_HOME\bin目录,执行如下命令: java –jar run.jar 即可启动JBoss。 启动了JBoss,如下信息 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 明,JBoss正常运行。 在浏览器里面输入:http://localhost:8080,出现如下页面,可以验证JBoss服务器是否在正常运行。 1.5​ 停止服务器: 为了能够停止JBoss服务器,用户可以敲入Ctrl-C,或者从bin目录运行shutdown脚本。 1.6​ JBoss简要介绍 在JBOSS_HOME下,有一个server目录,这是我们经常操作的一个目录。server目录下包含的各个子目录都是不同的服务器配置。server目录下存在三个服务器实例配置:all、default、minimal,他们各自提供了不同的服务集合。服务器启动时,如果没有指定其他配置,则将使用default配置,这也是我们经常会用到的配置。我这里简要介绍一下default目录的基本 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 。default目录下有两个是我们经常会用到的子目录: (1.)lib:服务器配置所需的jar文件,用户可以添加自身的库文件,比如JDBC驱动等等。 (2.)deploy:用户将应用代码(JAR\WAR\EAR文件)部署在此处。同时,deploy目录也用于热部署服务(即,那些能够从运行服务器动态添加或删除的服务)和部署JCA资源适配器。我们后边部署的服务,都是打成JAR或者WAR包放在这个deploy目录下进行发布的。 2. 开发EJB3.0的Web Service的几个例子 在EJB3.0中,开发Web Service就像开发Session Bean一样,不需要什么配置文件。但这里要注意的是,只有无状态的Session Bean才可以在加入一些标注以后,作为Web Service来进行发布。下边就是如何开发EJB3.0的步骤: 例(1.) (1)首先创建一个 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 ,工程名为WsHelloWorld,此工程的结构图如下; (2.)要定义一个会话Bean,首先需要定义一个包含他所有业务方法的接口。这个接口不需要任何注释,就像普通的java 接口那样定义。调用EJB 的客户端通过使用这个接口引用从EJB 容器得到的会话Bean 对象stub。方法就是直接新建一个java接口,它的代码如下: package com.foshanshop.ws; public interface HelloWorld { public String SayHello(String name); } (3.)创建一个java类,实现上面的接口并加入两个注释@Stateless , @Remote,第一个注释定义这是一个无状态会话Bean,第二个注释指明这个无状态Bean 的remote 接口。然后加入Web Service的标注,把它标注为Web Service。 此时要加入一些jar包,可以通过右击HelloWord 项目,选择“属性”,在出现的属性窗口左边选择“java构建路径”,然后在出现的窗口的右端选择“添加外部的jar包”,就可以选择JBOSS_HOME/client下的所有jar包,然后选择窗口底部的ok按钮,就可以了。 package com.foshanshop.ws.impl; import com.foshanshop.ws.HelloWorld; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.ParameterStyle; import javax.jws.soap.SOAPBinding.Use; @Stateless @Remote (HelloWorld.class) @WebService(targetNamespace="http://ws.foshanshop.com", name = "HelloWorld", serviceName = "HelloWorldService") @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use=Use.LITERAL, parameterStyle=ParameterStyle.WRAPPED) public class HelloWorldBean implements HelloWorld { @WebMethod(operationName="SayHello", action="") @WebResult(name="return") public String SayHello(@WebParam(name="name") String name) { return name +"说:你好!欢迎来到南京!."; } } 这里对一些标注做一下解释。 @WebService 这个注释放置在Java 类的前面,声明这个类的部分方法可以被发布为Web 服务。@WebService 的属性用于设置Web 服务被发布时的一些配置信息,常用的属性说明如下 ① name Web 服务的名字,WSDL 中wsdl:portType 元素的name 属性和它保持一致,默认是Java 类或者接口的名字。 ②serviceName Web 服务的服务名,WSDL 中wsdl:service 元素的name 属性和它保持一致,默认是Java 类的名字+”Service” 。 ③ targetNamespace WSDL 文件所使用的namespace,该Web 服务中所产生的其他XML 文档同样采用这个作为namespace 。 @SOAPBinding()表示这个服务可以映射到一个SOAP 消息中。Style 用于指定SOAP 消息请求和回应的编码方式。 @WebMethod 这个注释放在需要被发布成Web 服务的方法前面。 注意:该代码在上述开发环境下会出现以下错误: 这主要是jboss-4.0.5.GA版本中JBOSS_HOME/client下的jboss-j2ee.jar类库中不包含Remote和Stateless两个类,此时可以通过导入其他版本的jboss服务器中的j2ee.jar库类(我是通过导入jboss-5.0.0.Beta4中的jboss-javaee.jar解决的) (4) 经过上面的步骤,完成了一个Web Service 的开发,接着我们就要对此Web Service进行打包,发布。 打包的过程如下: 右击工程名,点击Export 会出现如下界面: 点击JAR file ,再点击next,出现如下对话框: 通过:Select the export destination:可以选择你想把此包保存的路径,选好后,点击finish,即完成了打包。 这是在eclipse下面的操作,在Myeclipse下的操作大同小异。 (5)在打完包之后,我们可以把此jar包拷贝到JBOSS_HOME/default/deploy目录下,进行发布。 发布好之后,我们通过Jboss 管理平台查看刚才发布的Web Service ,我们可以输入http://localhost:8080/jbossws/进入JbossWS 的查看界面,如下: 点击”view”连接后,可以查看已经发布的web services,如下图: 在上图中你可以点击ServiceEndpointAddress 下的很多路径下面的一个,例如:http://localhost:8080/Services/HelloWorldService?wsdl ,访问他的wsdl 描述。 (6)单元测试。 我们可以对基于EJB3.0的Web Service进行单元测试。步骤如下: 第一步:添加Junit依赖库,可以通过右击HelloWord 项目,选择“属性”,在出现的属性窗口左边选择“java构建路径”,在右边点击“库”标签,点击“添加库(B)“,在出现的窗口中选择“junit”,版本选择“junit 4”。 第二步:在需要测试的类(本例是HelloWorld.java)上面点击右键,在出现的属性菜单中点击“新建”-“junit 测试用例“,如下图: 在出现的属性窗口中输入以下信息: 点击“下一步”,在出现的窗口中选择需要单元测试的方法: 点击“完成”,会生成测试用例代码,然后把如下用如下代码把生成的测试用力代码覆盖,保存。 通过Junit 方式运行生成的测试用例,方法如下: 测试用例运行的结果如下: 绿色的进度条提示我们,测试运行通过了。证明Web Service可以正常运行了。 package junit.test; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import org.junit.BeforeClass; import org.junit.Test; import com.foshanshop.ws.HelloWorld; public class HelloWorldTest { protected static HelloWorld helloworld; @BeforeClass public static void setUpBeforeClass() throws Exception { Properties props = new Properties(); props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); props.setProperty(Context.PROVIDER_URL, "localhost:1099"); props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); InitialContext ctx = new InitialContext(props); helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/remote"); } @Test public void testSayHello() { System.out.println(helloworld.SayHello("南京的朋友")); } } 此处的ctx = new InitialContext(props);是设置JNDI 访问的环境,本例使用JBoss,所以把环境设为JBoss 的上下文环境。 (5.)junit测试通过后,我们就可以通过JSP页面来调用已发布的Web Service了。 具体代码如下: <%@ page contentType="text/html; charset=GBK"%> <%@ page import=" com.foshanshop.ws.HelloWorld, javax.naming.*, java.util.Properties"%> <% Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); try { InitialContext ctx = new InitialContext(props); HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("南京的朋友")); } catch (NamingException e) { out.println(e.getMessage()); } %> 例(2.)开发基于EJB3.0的法院业务组建 (1)首先创建一个工程,工程名为Service,此工程的结构图如下; (2)接着定义一个包含他所有业务方法的接口。这个接口同例1中一样不需要任何注释,就像普通的java 接口那样定义。调用EJB 的客户端通过使用这个接口引用从EJB 容器得到的会话Bean 对象stub。方法也是直接新建一个java接口,它的代码如下: package com.fenan.service; public interface FenAn { public String fenAn(String AHDM,String FAR,String FASJ,String CBBM); public String yiSong(String AHDM); public String jieShou(String AHDM,String CBRR); } 上述接口说明此分案组件有三个方法: 1.分案,它的参数分别是案号代码,分案人,分案时间,承办部门。 2.移送:变更案件的状态。检查承办部门是否设定。参数是案号代码。 3. 接收:变更案件的状态,检查案件的承办人是否设定。参数分别是案号代码和承办人。 (3)创建一个java类,实现上面的接口并加入两个注释@Stateless , @Remote,意义与例1中的一样在此不累赘描述。此时要加入一些jar包,同样可以通过右击FenAn 项目,选择“属性”,在出现的属性窗口左边选择“java构建路径”,然后在出现的窗口的右端选择“添加外部的jar包”,就可以选择JBOSS_HOME/client下的所有jar包,然后选择窗口底部的ok按钮,就可以了。 package com.fenan.service; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.ParameterStyle; import javax.jws.soap.SOAPBinding.Use; import com.fenan.service.Method; import com.fenan.service.FenAn; @Stateless @Remote (FenAn.class) @WebService(targetNamespace="http://service.fenan.com", name = "fenan", serviceName = "FenAnService") @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use=Use.LITERAL, parameterStyle=ParameterStyle.WRAPPED) public class FenAnBean implements FenAn { Method FenAnUpdate; @WebMethod(operationName="fenAn", action="") @WebResult(name="return") public String fenAn(@WebParam(name="AHDM")String AHDM,@WebParam(name="FAR")String FAR,@WebParam(name="FASJ")String FASJ,@WebParam(name="CBBM")String CBBM) { if(FenAnUpdate.fenAnUpdate(AHDM, FAR, FASJ)&&(FenAnUpdate.yiSongUpdate(AHDM, CBBM)) return "分案数据更新完成"; else return "分案数据更新失败"; } @WebMethod(operationName="yiSong", action="") @WebResult(name="return") public String yiSong(@WebParam(name="AHDM")String AHDM) { if(FenAnUpdate.yiSongQuery(AHDM)) return "分案移送成功!"; else return "分案移送失败,承办部门没有填写!"; } @WebMethod(operationName="jieShou",action="") @WebResult(name="return") public String jieShou(@WebParam(name="AHDM")String AHDM,@WebParam(name="CBRR")String CBRR) { if(FenAnUpdate.jieShouUpdate(AHDM, CBRR)&&FenAnUpdate.jieShouQuery(AHDM)) return "分案接收成功"; else return "分案接收失败"; } } 其标注的含义与例1中的一样 另外定义一个方法类Method,其代码如下: package com.fenan.service; class Method { public boolean yiSongUpdate(String AHDM,String CBBM) { return true; } public boolean fenAnUpdate(String AHDM, String FAR, String FASJ) { return true; } public boolean yiSongQuery(String AHDM) { return true; } public boolean jieShouUpdate(String AHDM,String CBRR) { return true; } public boolean jieShouQuery(String AHDM) { return true; } } 注意: 以上Method类的主要目的就是定义yiSongUpdate(),fenAnUpdate(),yiSongQuery(),jieShouUpdate(),jieShouQuery()几个方法,以便在主类中通过Method创建对象FenAnUpdate来调用yiSongUpdate(),fenAnUpdate(), yiSongQuery(),jieShouUpdate(),jieShouQuery()方法。对于不同的要求可以自己据情况而定在上述方法中实现。 (4)经过上面的步骤,完成了一个工程Service 的开发,接着我们就按照例1中的过程对它进行打包,发布。 点击next,出现下面界面: 然后点击finish即可 然后在你保存jar的路径下找到打包后的jar文件并把它拷贝JBOSS_HOME/default/deploy目录下,进行发布就可以。 (6)同例1一样,我们也可以对该服务进行单元测试,其步骤与过程如例一 3. 配置juddi 我们实验中用了JBoss和MySQL来配置juddi。步骤如下: (1.)下载MySQL-5.0.26并安装。安装时可以设置你想要的密码。 (2.)安装JBoss应用服务器,实验中,为了能够发布基于EJB3.0的Web Service,并能够顺利配置juddi,我们选择了使用可运行jar包(jems-installer-1.2.0.GA.jar)安装的jboss4.0.5版本。打开开始,运行cmd进入jems-installer-1.2.0.GA.jar所在目录,然后输入:java –jar jems-installer -1.2.0.GA.jar即可进行安装。按照默认设置确认,选择安装路径等,直到如下对话框,这里选择ejb3即可,接着再按照默认设置即可完成jboss4.0.5版本的安装,且其支持ejb3.0: (3.)安装MySQL驱动:下载与已安装MySQL版本相应的驱动并把它解压到\server\default\lib文件夹下,这里注意,如果测试数据库连接不上,可能是驱动的版本不对。可以下载其他版本试一下。实验中用到的是mysql-connector-java-5.1.6-bin.jar。 (4.)发布juddi ①下载juddi-0.9rc4(juddi-0.zip)。 ②解压缩juddi-0.zip,将得到一个名字为juddi-0.9rc4的文件夹。在此文件夹下有一个名字为webapp的字文件夹,在webapp下有一个juddi的子文件夹,这个文件夹有web应用的结构。复制此文件夹到\ server\default\deplo目录下。并重命名为juddi.war。 ③刚刚解压得到的juddi-0.9rc4目录下,有一个叫做sql的文件夹。在此文件夹下,有许多数据库的sql scripts。我们选择子文件夹mysql。在已安装的MySQL下运行这些script,创建数据库和数据表。 ④创建juddi.xml: 在文件夹\server\default\conf下,创建名为juddi.xml的文件,并把如下的代码拷贝到此文件中。 ⑤编辑\server\default\deploy\juddi.war\web-inf目录下的juddi.properties文件。编辑后如下。这里的email地址要与insert-publisher.sql里面的一致。即此文件里面的 juddi.operatorEmailAddress =juddi@apache.org ⑥创建juddi-ds.xml文件并把它放在\server\default\deploy目录下,并把如下代码放在此文件中,保存它。 juddiDB jdbc:mysql://localhost:3306/juddi com.mysql.jdbc.Driver juddi juddi 1 50 ⑦编辑\server\default\deploy\juddi.war\web-inf目录下的文件juddi-user.xml如下所示: 注意:以上文件中的数据库的用户名和密码必须和你安装数据库时设定的用户名与密码须保持一致,否则会出现以下错误: 设置数据库用户名与密码的方法如下: 从首页进入mysql\bin目录,然后按顺序输入命令: 进入MYSQL: mysql -u root –p 1.改MYSQL用户名: mysql>use mysql; mysql>update user set user="新用户名" where user="旧用户名"; mysql>flush privileges; mysql>exit 2.改MYSQL密码 mysqladmin -u 用户名 -p password 新密码 然后会提示输入旧密码 输入旧密码后按回车 输入flush privileges; 输入exit 此时要保证数据库中publisher表中的信息应该如下,如果缺少的话,应用insert语句,插入相关记录: ⑧运行JBoss。在浏览器中输入如下URL:http://localhost:8080/juddi/,出现如下页面: 点击页面中的validate链接,进入如下页面: 注意: JDK版本不能是1.6,因为如果是JDK1.6,在测试安装是否成功的页面http://localhost:8080/juddi/happyjuddi.jsp时,就会有SOAPMessage和SAXParserFactory两个类Found in an unknown location,其中SOAPMessage是很重要的,应该是和SOAP通信有关,如果找不到就会导致后面findBusiness等不能执行,出现 fault string and possibly fault code is not set的错误。 如果运行环境是JRE1.5的版本那么这个包就能找到 Looking for: javax.xml.soap.SOAPMessage +Found in: D:\Program Files\Tomcat\webapps\juddi\WEB-INF\lib\saaj.jar 如下图所示: 如果没有出现红色的信息(错误信息),就说明juddi配置成功了,可以在juddi进行服务的注册和查询工作了。 4.服务入库和查询 服务入库时,我们主要用到的是用XML的格式保服务的刻面信息,并把这些文件都保存在某个路径下面。 查询相关服务时,我们用到的是用dom4j对服务入库的文件夹下的所有xml文件进行解析,找出符合查询条件的相关服务,并输出其主要信息。dom4j是一种用于解析XML文档的开放源代码的XML框架。功能很强大。支持XML、XPath和XSLT。它是用于java平台的。dom4j 的API使用了java集合框架,并完全支持DOM、SAX和JAXP。dom4使用SAX解析器开 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 XML文档,创建dom4j树。你可以首先在http://sourceforge.net/projects/dom4j/上下载最新版本的dom4j。在解压之后,可以看到子文件夹有一个叫做docs的文件夹,里面有dom4j的API文档,这对于我们的编程很有帮助。 这里需要注意的是,如果你在解析的过程中用到了XPATH,这里需要两个加入两个jar包,一个是dom4j-1.6.1.jar,这是要用到dom4j操作的时候都需要的。另一个是jaxen-1.1-beta-6.jar,这个是XPATH所必需的jar包。这两个包在java工程里面必须导入。 取某一节点 Element root = (Element) document.selectSingleNode("//root"); 取某一节点的属性 Attribute attribute = (Attribute) document.selectSingleNode("//root/cell/@value"); // 声明SAXReader (它可以从一个SAX解析事件创建一个dom4j树) SAXReader reader = new SAXReader(); Document document=null; //解析一个xml文件,返回一个document对象 document = reader.read(new File("D:/test.xml")); //得到根元素 Element root=document.getRootElement(); //获取所有节点 List list = root.selectNodes("//*"); for (Iterator iter=list.iterator(); iter.hasNext(); ) { Element elt = (Element) iter.next(); //元素的名字 String name = elt.getName(); //元素的值 String type = elt.getText(); } 5.juddi的使用 在如上的页面上点击jUDDI Console链接,可以进入如下页面: 此页面是juddi的一些API,点击其中的find_publisher链接可以到达如下界面: 在上述页面中有“*****”号的地方填入数据库中有的相对应的信息,可以查找到符合条件的publisher(发布者)信息。其他的API可以实现服务相关信息的查询、发布和删除操作。当然,这都是对于juddi的操作。其实,这里是通过发送给juddi注册中心SOAP消息来实现的。 实验中我们使用了uddi4j工具包,作为访问UDDI注册中心的基础支持。并作出了相关的页面,实现对于juddi的操作。对于juddi注册中心的操作是通过UDDIProxy类实例实现的。而保存商业实体是通过UDDIProxy类的save_business接口实现的。例如发布一个名字为Lesson System的商业实体到juddi的的代码如下: import java.util.Properties; import java.util.Vector; import org.uddi4j.*; public class SaveBusinessExample { public static void main(String arg[]) { SaveBusinessExample example = new SaveBusinessExample(); example.run(); System.exit(0); } public void run() { //创建UDDI代理 UDDIProxy proxy = new UDDIProxy(); try { //设置发布地址 proxy.setPublishURL("http://localhost:8080/juddi/publish"); //获得授权token AuthToken token = proxy.get_authToken("juddi","juddi" ); Vector entities = new Vector(); //创建商业实体 BusinessEntity be = new BusinessEntity("","Lesson System"); entities.addElement(be); //保存商业实体 BusinessDetail bd = proxy.save_business(token.getAuthInfoString(),entities); Vector businessEntities = bd.getBusinessEntityVector(); BusinessEntity returnedBusinessEntity = (BusinessEntity)(businessEntities.elementAt(0)); System.out.println("Returned businessKey:" + returnedBusinessEntity.getBusinessKey()); } catch( Exception e ) { e.printStackTrace(); } } } 对于juddi的查询和删除操作也是大同小异。实际发送给juddi的还是SOAP消息。
本文档为【项目实验笔记-juddi配置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_160769
暂无简介~
格式:doc
大小:712KB
软件:Word
页数:22
分类:互联网
上传时间:2011-07-04
浏览量:22