ArcIMS应用系统安装手册_第1页
ArcIMS应用系统安装手册_第2页
ArcIMS应用系统安装手册_第3页
ArcIMS应用系统安装手册_第4页
ArcIMS应用系统安装手册_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

ArcIMS应用系统安装手册

一、安装之前

请检查软件需求(如果不符合,请先完善后再安装)。

操作系统:Win2000以上

Webbrowser:InternetExplorer5.0以上

Java环境安装:JDK1.4.2

Web^JSP/Servlet服务器Tomcat5(推荐版本:5.0.28)

注意:数据库Server2k要求至少是sp3,ArcSDE安装后建立city业务库和sde空间数

据库。

二、JDK安装

安装JDK,推荐JDK1.4.2版本,只安装JRE将会使Tomcat不能够正确运行。另外最

好卸载机器里面原来的tomcat,servletExec,Javaruntime等。

环境变量设置,变量名:JAVAJHOME,变量值填入你的JDK安装目录。

三、安装Tomcat

1程序安装

查看JAVA_HOME环境变量,如果系统中没有该环境变量,单已新建,分别填入变量

名:JAVA_HOME,变量值填入你的JDK安装目录。

安装tomcat5.0安装的时候选择NTService选项。

修改tomcat缺省安装目录为:盘符:\tomcat50。安装目录建议不要有空格。

安装完毕后,设置环境变量添加CATALINAJHOME,值为vdrive>:\Tomcat50,

安装完成测试:htt。:〃localhcst:8080如果显示tomcat默认页面,表示成功。

2系统配置

参见应用系统安装的tomcat相关配置。

3中文问题

tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来

处理,tomcat对get方式提交的请求对query-string处理时采用了和post方法不一样的处

理方式。

post方式的解决办法(己配置在了war包里,不用单独处理)

get方式中文编码的解决办法:打开〈Tomcatinstallationlocation>/conf/TK

server.xml文件,找到下面部分,加入如下内容:URIEncoding=,,GB2312\

参考如下:

<Connectorport="80"maxThreads="150"minSpareThreads="25"

maxSpareThreads="75"enableLookups="false"redirectPort="8443"

acceptCount="100"debug="0"connectionTimeout="20000"

disableUploadTimeout="trueHURIEncoding="GB2312"

/>

设置好了重启tomcat,中文问题就OK了。

四、安装ArcIMS9.0

在开始安装ArclMS9.0之前请停止Tomcat服务,并最好关闭所有正在运行的程序,尤

其是Internet浏览器。要求以系统管理员身份(或拥有管理权限用户)登陆系统安装。

1安装ArcIMS9.0

第一步在安装程序目录选择并执行setup可执行程序,开始ArclMS9.0的安装。系统

会弹出欢迎安装ArcIMS程序对话框。点击Next按钮进行下一步。

第二步安装协议对话。在对话框中选择Iacceptthelicenseagreement选项,并点击

Next进行下一步。

第三步ArcIMS安装要求说明对话,在此对话框中,主要说明了安装所必须的主要程序,

像WebServer和Servlet引擎等。单击Next进行下一步。

第四步选择ArcIMS组件。根据需要在下面的对话框中选择所需要的组件,这里我们

只是为了测试,故保留默认选择。在此对话框中,你可以修改通过点击Browser按钮选择

ArclMS9.0的安装目录。单击Next进行下一步。

第五步开始安装。如果确信前面的选择正确,请点击Next开始进行下一步。否则,

可以通过Back按钮返回并重新选择。

第六步安装进行中。

第七步完成安装。单击Finish按钮完成并退出安装。

点击Finish后,安装向导会弹出一对话框,提示你是否立即通过PostInstalltion程序

配置ArcIMSo如果点击确定则开始ArcIMS的配置。否则,你可以通过开始,所有程序

->ArcGIS->ArclMS->ArclMSPostInstallation开始ArcIMS配置。

2PostInstallation开始ArcIMS配置。

在进行ArcIMSPostInstallation安装之前请确认Tomcat服务正在运行,否则向导开始

设置ArcIMS时会处于漫长的等待状态,如果你在最后几步发现等待太久,请确认一下

Tomcat是否在运行,如果没有正在运行,请立即运行之,这样你的安装可能很快就会完成。

笫步选择授权配置

HcotdirationUpttorv^

GIHavetnsirtoiledmv2ottwofaor»dncodtorao^rtcr4

CIhavealreadyreoi5tereethesoftwarene«dtoregisterAdditionaloptiortsor

bIHavereceivedanduthocizotionfiletrom£SRiar>damnowreacK1tohniohtKe

reoi5trodonprooec.

Zok,>IConcel

选择第三项:IhavereceivedanauthorizationfilefromESRIandamnowreadyto

finishtheregistrationprocess找到授权文件。

第二步设置Website和Output目录。Website目录用来存贮ArcIMS地图服务的Web

页面,Output是ArcIMS服务的软件目录。

第三步确定工作目录、Web服务器主机名和拟使用的协议。

第三步ArcIMS应用服务主机设置。

第三步键入管理员信息。在此SystemDomain'Username中以图示的形式输入系统域名和

用户名,注意此用户必须具有系统管理权限,以便系统能够创建并启动ArcIMS服务。

第三步Web服务器和Servlet引擎组合选择。我们因为已经使用Apache作为Web服务器

并选用Tomcat作为Servlet引擎

这里选择最后一项,手动配置。配置方法如下:

1将vArrlMSInstallationlocation>\ArcIMS\Connectors\Servlet下拷贝

aimsservletconnector.war到〈Tomcatinstallationlocation>\webappsT,并且重

命名为servlet.war0重启tomcat自动部署servleto

2在目录〈Tomcatinstallationlocation>\servlet\WEB-INF\classes下打开

Esrimap_prop文件。修改AppServerMachine变量值“APPSMACHINE”为安装IMS的

机器名。

4重启ArcIMS、tomcat服务。

3检查ArcIMS是否安装成功

安装并配置好ArcIMS后,如果你对你的安装不确信是否已经安装成功,则请按照如下

步骤进行检测。在检查之前,请首先启动TomcatServlet引擎,并确保ArcIMSApplication

Server9.0、ArcIMSMonitor9.0和ArcIMSTasker9.0服务已经启动。这几个服务可以从

开始,控制面板,管理工具下的“服务”管理器程序来查看并停止或启动。

第•步从开始菜单分所有程序->ArcGIS->ArclMS中选择并执行Diagnostics程序。

注意:对于WindowsXPsp2来说,由于其严格的安全性,可能会使得此页面不能正常

显示,现象显示为:

页面上没有http协议的选择按钮:页面左侧的栏目中显示不出文字内容;在HostName

下面的编辑框中显示不出你己经配置好的主机名;在Port下的编辑框中不能显示端口号。

若出现此情况,你可以通过点击页面顶部的细长信息栏,在弹出的快捷菜单中点击“允

许阻止的内容(勺…”来使页面正常显示。

巾像不能安金.InternetExpluer已械文4内8.•击此让■•出丸..>

允许喝止的四号四二

AreWSDIAGFIIW|ESRI

第二步在页面的Selectcomponenttotest下面点击1和2按钮,分别弹出类似以下

的窗口则说明ArcIMSServlet连接器ArcIMS应用服务器没问题。

秀http://Sstech/sexTlet/coB.esxi.

IMSv9.0.0

BuildNumber871.I:14

Version,%0・0

Testsuccessful

Selectcomponenttotest:

CheckArcIMSServletConnector-Asuccessfultestindicatestheweb

server,servletengine,andArcIMSServletConnectorarefunctioning.

CheckArcIMSApplicationServer-Asuccessfultestindicatestheweb

server,servletengine.ArcIMSServletConnector,andArcIMSApplication

Serverarefunctioning.

如果两个都成功表明,安装成功了。

五、应用系统安装

1数据库驱动安装

需要放置一份驱动到〈Tomcatinstallationlocation>\common\lib中。SqIServer的

JDBC驱动包括msbase.jar,mssqlserver.jar,msutil.jar三个包“

2war包安装

至iJvTomcatinstallationlocation>\webapps下新建一个dty文件夹,将所有内容拷

到该处。

3tomcat相关配置

ffi<Tomcatinstallationlocation>\conf\server.xml中配置数据源。配置虚拟目录。在

文件的vHost>与v/Host>之间,可以直接配置在v/Host>之前。

<Contextpath="/city"docBase="city"debug="5"reloadable="true"Override="true"

crossContext="true,,>

<Resourcename=,'jdbc/SqlServerDB"auth="Container"type="javax.sql.DataSource,7>

<ResourceParamsname="jdbc/SqlServerDB">

<parameter>

<name>factory</name>

<value>mons.dbcp.BasicDataSourceFactory</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>100</value>

</parameter>

<parameter>

<name>maxldle</name>

<value>30</value>

</parameter>

<parameier>

<name>maxWait</name>

<value>10000</valuc>

</parameter>

<parameter>

<name>usemame</name>

<value>sa</value>

</parameter>

<parameter>

<name>password</name>

<value>saa</value>

</parameter>

<parameter>

<name>driverClassName</name>

<value>coin.iniciosoft.jdbc.sqlservei.SQLSeiverDiiver</value>

</parameter>

<parameter>

<name>url</name>

<value>jdbc:microsoft:sqlserver://city:1433;databaseName=city</value>

</parameter>

</ResourceParams>

</Context>

<Contextpath="/output"docBase="C:/ArcIMS/Output"debug="5'^reloadable="true"

crossContext="true'7>

4数据库连接配置

将数据连接文件perties放到vTomcatinstallationlocation>\bin下面

#databaseconnectionproperties

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver

url=jdbc:microsoft:sqlserverL7city:1433;databaseName=city

username=sa

password=saa

将对应地方改成相应数据库服务器参数。

4配置地图服务。

配置地图服务stcityo

5安装测试。

输入http:〃host:8080/cM测试,能登陆系统表示系统安装正常。附录资料:

从XML生成可与Ajax共同使用的JSON

时下,非常流行使用JavaScript代码为数据驱动的Web应用程序添加互动性。若能将数据

编码成JavaScriptObjectNotation(JSON)的格式,您就可以更轻松地通过JavaScript语言

使用它。通过本文,发掘使用XSUTV2从XML数据生成JSON的几种不同方法。

几年前,许多开发人员很看好XML、XSLT、ExtensibleHTML(XHTML)和其他一些基

于标记的语言。现在,AsynchronousJavaScriptandXML(AJAX)成了新的热点,人们又将

目光转向了使用JavaScript代码的数据驱动的富Internet应用程序。但是开发人员是否已

经消除了XML和这一新技术之间的鸿沟呢?

当然,您可以在Web客户机中使用XML解析器来读取数据,但这种做法会带来两个问题。

第一,出于安全方面的原因,XML数据只能从与此页面相同的那个域中读取。这虽然不是

什么大的限制因素,但它的确会引起部署方面的问题,还会阻碍DHTML小部件的创建。

第二,读取和解析XML会非常慢。

另一种做法是让服务器执行XML的解析工作,方法是设置服务器,使之向浏览器发送以

JavaScript代码或时下流行的JavaScriptObjectNotation(JSON)编码的数据。本文将展示

如下三种使用XSLTV2语言和SaxonXSETV2处理器从XML数据生成JSON的技巧:

•简单编码

•通过函数调用加载数据

•编码对象

JSON简介

要学习如何将数据编码成JSON(它只是JavaScript的一个子集),最好的方法是从数据开

始。清单1显示了书籍列表的一个示例XML数据集。

清单1.基本的图形化图书馆

<?xmlversion="1.0"encoding="UTF-8"?>

<books>

<bookid=HlH>

<title>CodeGenerationinAction</title>

<author><first>Jack</first><last>Herrington</last></author>

<publisher>Manning</publisher>

</book>

<bookid="2">

<title>PHPHacks</title>

<author><first>Jack</first><last>Herrington</last></author>

<publishcr>O'Rcilly</publishcr>

</book>

<bookid="3">

<title>PodcastingHacks</title>

<author><first>Jack</first><last>Herrington</lastx/author>

<publisher>O,Reilly</publisher>

</book>

</books>

这个数据集很简单,只包含三本书,每本书都具有惟一的ID、书名、作者姓名及出版商的

名字。(没错,我只选择了我自己的书作为数据集,但能怨我吗?这些书实在是不可多得的

节日和生日礼物。)

清单2显示了这些数据在JSON中的效果。

清单2.JSON中的示例数据集

[{id:1,

title:'CodeGenerationinAction',

first:'Jack;

last:'Herringion',

publisher:'Manning1),

...]

方括号(口)表明这是一个数组。大括号({))则表明这是一个散列表,该散列表由一组名称

和值对组成。在本例中,我创建了一个散列表的数组——用来存储这类结构式数据的一种

常见方法。

另外一点值得注意的是字符串是通过单引号或双引号被编码的。所以,如果我想用单引号编

码OReiHy,我就必须使用反斜杠对它进行转义:'OVReilly'o这让我编写的这个XSLT样

式表更为有趣了一些。

我并未在本例中放上任何日期,但您也可以通过如下两种方法来编码日期。第一种方法是将

日期作为字符串,该字符串必须在后面被解析。第二种方法是将日期作为一个对象,比如:

publishdate:newDate(2006,6,16,17,45,0)

这段代码将publishdate的值设置为6/16/20065:45:00p.m.。

简单编码

接下来我将陆续介绍JSON编码的几种技巧。第一种也是其中最简单的一种,此样式表如

清单3所示。

清单3.simple.xsl样式表

<?xmlversion=M1.0nencoding="UTF-8"?>

<xsl:stylcshcct

xmlns:xsl=,'/1999/XSL/Transform"version=,,2.0"

xmlns:js="http:〃muttmans沁”>

<xsl:outputmethod=utext"/>

<xsl:functionname="js:escape">

<xsl:paramname="text"/>

<xsl:value-ofselect=,replace($text»,M","W"1)'/>

</xsl:function>

<xsl:templatematch="/">

varg_books=[

<xsl:for-eachselect="books/book">

<xsl:iftest="position()>r'>,</xsl:if>{

id:<xsl:value-ofselect="@id"/>,

name:'<xsl:value-ofselect="js:escape(title)"/>',

first:*<xsl:value-ofselect="js:escape(author/first)"/>\

last:'<xsl:value-ofselect="js:escape(author/last)"/>',

publisher:*<xsl:valuc-ofselect="js:escapc(publisher)"/>,

)</xs!:for-each>

];

</xsl:template>

</xsl:stylesheet>

要理解此样式表,不妨先来看一下清单4所示的输出。

清单4.simple.xsl的输出

varg_books=[

(

id:1,

name:'CodeGenerationinAction1,

first:'Jack',

last:'Herrington',

publisher:'Manning'

id:2,

name:'PHPHacks,,

first:'Jack;

last:'Herrington',

publisher:WReilly'

}"

id:3,

name:'PodcastingHacks',

first:'Jack',

last:'Herrington',

publisher:•OVReilly'

];

这里,我将名为g_books的变量设置为一个包含三个散列表的数组,每个散列表包含关于

该书的信息。再回过头来看看清单3,您会发现第一个模板匹配路径,它也是首先应

用到输入数据集的模板,该模板使用for-each循环来遍历每本书。之后,它使用〈value-。〉

标记来将文本从该数据输出到JavaScript输出代码。

对于字符串,我使用名为js:escape()的定制函数,它在模板之前定义。该函数使用一个正

则表达式将一个单引号标记更改为带有反斜杠的单引号标记。

最后一个重要的元素是vxsl:oulput>标记,它告知处理器要输出的是文本而不是XML。要

检验此过程是否可以正常工作,我加入了一个simple.html文件,该文件引用我在simple.js

保存的XSL样式表的输出。这个HTML文件如清单5所示。

清单5.simple.html文件

<html>

<head>

<title>SimpleJSloader</title>

<scriptsrc="simple.js,'x/script>

</head>

<body>

<script>

document.write("Found"+g_books.length+"books");

</script>

</body>

</html>

.html文件使用vscripl>标记简单地加载已编码了的JavaScript代码。之后,第二个

<script>标记将数组的长度写出到浏览器页面,如图1所示。

图1.simple.html的输出

好了!数据文件包含三本书,相应的JavaScript文件也包含三本书。它真的可以工作!

通过函数加载

上述笫一个示例很简单,而且在大多数情况下可以发挥其作用,但它存在一些问题。笫一个

问题是对于数据何时被加载没有任何提示。如果数据是像页面那样被静态加载的,这不成问

题。但是如果页面动态创建了一个<script>标记来按需加载数据,那么就很有必要知道

<script>标记是何时完成的。实现此功能的最好的方法是让编码了的数据调用一个

JavaScript函数,而不是只设置数据。

这个概念很重要,所以我将花一些时间来介绍一下为什么您必须要通过动态生成的〈script〉

标记来加载数据。页面加载后,从服务器获得数据是Web2.0的核心功能。一种方法是使

用AJAX机制通过到服务器的调用来加载XMLo然而,出于安全性的原因,AJAX机制

只限于从单一域获取数据。这在大多数情况下都没有问题,但有时,您可能需要JavaScript

代码运行在他人的页面上(例如,GoogleMaps)o

在这种情况下从服务器获得数据的惟一方法是通过动态加载<script>标记。获悉〈script,

标记何时加载的最好的方法是让〈scrip"标记返I可的脚本调用函数而不是简单地加载数

据。清单6显示了在函数调用中编码的数据。

清单6.Function1.js

AddBooks([

(

id:1,

name:'CodeGenerationinAction',

first:'Jack',

last:'Herrington',

publisher:'Manning'

}J

id:2,

name:'PHPHacks',

first:'Jack',

last:'Herrington',

publisher:'OVReilly'

},{

id:3,

name:'PodcastingHacks',

first:'Jack',

last:'Herringion',

publisher:'OVReilly'

)

]);

清单7给出了相应的.hlml文件。

清单7.FunctionI.html

<html>

<head>

<title>Function1JSloader</title>

<script>

varg_books=[];

functionAddBooks(books){g_books=books;}

</script>

<scriptsrc="function1.js"x/script>

<scriptsrc="drawbooks.js"></script>

</head>

<body>

<script>drawbooks(g_books);</script>

</body>

</html>

稍后将详细介绍drawbooks函数,这里重要的是了解一下页面如何定义AddBooks函数,

该函数随后会由functionl.js文件中的脚本调用。该AddBooks函数负责处理数据。而且被

调用的AddBooks函数会向页面指示<script>标记被正确加载,并已加载完成。

要创建functionl.js文件,我只对样式表稍微做了一点修改,如清单8所示。

清单8.functionl.xsl样式表

<xslitemplatematch='7">

AddBooks([

<xsl:for-cachselect="books/book">

<xsl:iflesl="posilion()>1">,</xsl:i>{

id:<xsl:value-ofselect=,,@idn/>,

name:*<xsl:value-ofselect="js:escape(title)"/>',

first:*<xsl:value-ofselect="js:escape(author/first)"/>',

last:'<xsl:value-ofselect="js:escape(author/last)"/>',

publisher:^xslrvahie-ofselect="js:escape(publisher)"/>'

)</xsl:for-each>

]);

</xsl:template>

这里,我调用了一个函数,而不是简单地设置一个变量。这就是我所做的惟一更改。

回到页面,我使用了drawbooks函数来构建书的表格,这样我就能够确认数据被正确编码

和正确显示。此函数是在drawbooks.js内定义的,如清单9所示。

清单9.Drawbooks.js

functiondrawbooks(books)

(

varelTable=document.createElement('table');

fbr(varbinbooks)

varelTR=elTable.insertRow(-1);

varelTD1=elTR.insertCell(-1);

elTD1.appendChild(document.createTextNode(books[b].id));

varelTD2=elTR.insertCelI(-1);

elTD2.appendChild(document.createTextNode(books[b].name));

varelTD3=elTR.insertCell(-1);

elTD3.appendChild(document.createTextNode(books[b].first));

varelTD4=elTR.insertCeII(-1);

elTD4.appendChild(document.createTextNode(books[b].last));

varelTD5=elTR.insertCell(-1);

elTD5.appendChild(document.createTextNode(books[b].publisher));

}

documcnt.body.appcndChild(clTablc);

这个简单函数创建了一个表格节点,然后循环访问书的列表并为每本书创建一行,为每个数

据元素分配一个单元格。此页面上的代码的结果如图2所示。

图2.function1.html的结果

0O0Function1JSloaderCD

现在我就可以查看一下此页面的输出并确认来自原始.xml文件的一切均已被正确转换成

JavaScript代码,且数据被发送到AddData函数并被正确添加到页面。

细化函数调用技术

我很喜欢函数调用这一技术,但我并不赞同将所有图书数据都放入一个块中。另一种方式是

为每条记录采用一个调用,如清单10所示。

清单10.Function2js

AddBook({

id:1,

name:'CodeGenerationinAction1,

first:'Jack',

last:'Herrington',

publisher:'Manning'

});

AddBook({

id:2,

name:'PHPHacks',

first:'Jack',

last:'Herrington',

publisher:,O\'Reilly,

});

对.html页面只需做少许修改,如清单11所示。

清单11.Function2.html

<script>

varg_books=[];

functionAddBook(book){g_books.push(book);}

</script>

这里更改了XSLT,以使函数调用驻留在for-each循环体内。清单12显示了更新后的样

式表。

清单12.function2.xsl

<xsl:templatematch="/">

<xsl:for-eachselect="books/book">

AddBook()

id:<xsl:value-ofselect=,,@id"/>,

name:*<xsl:value-ofselect="js:escape(title)"/>\

first:'<xsl:value-ofselect="js:escape(author/first)"/>',

last:'<xsl:value-ofselect="js:escape(author/last)"/>',

publisher:'<xsl:value-ofselect="js:escape(publisher)"/>'

});</xsl:for-each>

</xsl:template>

对这个给定示例来说,这种更改看起来有些随意。但如果原始的XML数据集有多种数据

类型,要为每种类型分配一个单独的函数调用会使XSL和页面上的JavaScript代码更为简

单、更易于维护。

编码对象

对小的页面来讲,使用JavaScript函数没有问题。但对于大型项目,就需要使用JavaScript

语言的一些面向对象特性。是的,JavaScript语言可以处理对象而且可以处理得很好。

清单13显示了如何创建带有数据的对象。

清单13.Objectl.js

g_books.push(newBook({

id:1,

name:'CodeGenerationinAction*,

first:'Jack',

last:'Herrington',

publisher:'Manning'

}));

g_books.push(newBook({

id:2,

name:'PHPHacks,,

first:'Jack',

last:'Herrington',

publisher:WReilly'

}));

在本例中,我只简单地向名为g_books的数组添加了Book对象。JavaScript的对象创建

与JavaTM、C#或C++编程语言的对象创建十分相似。都是一个new操作符后跟一个类

名。参数放到随后的括号内。在本例中,我传入了一个带值的单一散列表,并将其分割成单

独的一些参数。

创建此对象的代码如清单14所示。

清单14.ObjectLxsl

<xslitemplatematch='7">

<xsl:fbr-eachselect="books/book">

g_books.push(newBook({

id:<xsl:value-ofselect=',@id"/>,

name:'<xsl:value-ofselect="js:escape(title)"/>\

first:'vxsl:value-ofseleci="js:escape(aulhoi7firsl)"/>',

last:'<xsl:value-ofselect="js:escape(author/last)"/>',

publisher:'<xsl:value-ofselect="js:escape(publisher)"|>'

}));</xsl:for-each>

</xsl:tcmplatc>

此页面内最值得注意的是定义Book类的那部分代码。清单15显示了该页面。

清单15.objectl.html

<script>

varg_books=[];

functionBook(data)

(

for(vardindata){this[d]=data[d];)

)

</script>

Book类的构造函数循环访问散列表的所有数据。对于每个键,会在对象上创建一个具有对

象名称和数据的实例变量。不需要对drawbooks函数做任何修改,因为对象都有与原始的

散列表相同的键和值。JavaScript语言并不区分访问的是散列表内的命名值还是对象上的命

名值。

当然,Book类应该有像set和get这样的访问程序。清单16显示了我是如何对

JavaScript数据进行编码的。

清单16.Object2.js

varb1=newBook();

b1.setld(1);

b1.setTitle('CodeGenerationinAction')

温馨提示

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

评论

0/150

提交评论