版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ArcIMS應(yīng)用系統(tǒng)安裝手冊(cè)
一、安裝之前
請(qǐng)檢查軟件需求(如果不符合,請(qǐng)先完善后再安裝)。
操作系統(tǒng):Win2000以上
Webbrowser:InternetExplorer5.0以上
Java環(huán)境安裝:JDK1.4.2
Web^JSP/Servlet服務(wù)器Tomcat5(推薦版本:5.0.28)
注意:數(shù)據(jù)庫(kù)Server2k要求至少是sp3,ArcSDE安裝后建立city業(yè)務(wù)庫(kù)和sde空間數(shù)
據(jù)庫(kù)。
二、JDK安裝
安裝JDK,推薦JDK1.4.2版本,只安裝JRE將會(huì)使Tomcat不能夠正確運(yùn)行。另外最
好卸載機(jī)器里面原來的tomcat,servletExec,Javaruntime等。
環(huán)境變量設(shè)置,變量名:JAVAJHOME,變量值填入你的JDK安裝目錄。
三、安裝Tomcat
1程序安裝
查看JAVA_HOME環(huán)境變量,如果系統(tǒng)中沒有該環(huán)境變量,單已新建,分別填入變量
名:JAVA_HOME,變量值填入你的JDK安裝目錄。
安裝tomcat5.0安裝的時(shí)候選擇NTService選項(xiàng)。
修改tomcat缺省安裝目錄為:盤符:\tomcat50。安裝目錄建議不要有空格。
安裝完畢后,設(shè)置環(huán)境變量添加CATALINAJHOME,值為vdrive>:\Tomcat50,
安裝完成測(cè)試:htt。:〃localhcst:8080如果顯示tomcat默認(rèn)頁(yè)面,表示成功。
2系統(tǒng)配置
參見應(yīng)用系統(tǒng)安裝的tomcat相關(guān)配置。
3中文問題
tomcat的j2ee實(shí)現(xiàn)對(duì)表單提交即post方式提示時(shí)處理參數(shù)采用缺省的iso-8859-1來
處理,tomcat對(duì)get方式提交的請(qǐng)求對(duì)query-string處理時(shí)采用了和post方法不一樣的處
理方式。
post方式的解決辦法(己配置在了war包里,不用單獨(dú)處理)
get方式中文編碼的解決辦法:打開〈Tomcatinstallationlocation>/conf/TK
server.xml文件,找到下面部分,加入如下內(nèi)容:URIEncoding=,,GB2312\
參考如下:
<Connectorport="80"maxThreads="150"minSpareThreads="25"
maxSpareThreads="75"enableLookups="false"redirectPort="8443"
acceptCount="100"debug="0"connectionTimeout="20000"
disableUploadTimeout="trueHURIEncoding="GB2312"
/>
設(shè)置好了重啟tomcat,中文問題就OK了。
四、安裝ArcIMS9.0
在開始安裝ArclMS9.0之前請(qǐng)停止Tomcat服務(wù),并最好關(guān)閉所有正在運(yùn)行的程序,尤
其是Internet瀏覽器。要求以系統(tǒng)管理員身份(或擁有管理權(quán)限用戶)登陸系統(tǒng)安裝。
1安裝ArcIMS9.0
第一步在安裝程序目錄選擇并執(zhí)行setup可執(zhí)行程序,開始ArclMS9.0的安裝。系統(tǒng)
會(huì)彈出歡迎安裝ArcIMS程序?qū)υ捒?。點(diǎn)擊Next按鈕進(jìn)行下一步。
第二步安裝協(xié)議對(duì)話。在對(duì)話框中選擇Iacceptthelicenseagreement選項(xiàng),并點(diǎn)擊
Next進(jìn)行下一步。
第三步ArcIMS安裝要求說明對(duì)話,在此對(duì)話框中,主要說明了安裝所必須的主要程序,
像WebServer和Servlet引擎等。單擊Next進(jìn)行下一步。
第四步選擇ArcIMS組件。根據(jù)需要在下面的對(duì)話框中選擇所需要的組件,這里我們
只是為了測(cè)試,故保留默認(rèn)選擇。在此對(duì)話框中,你可以修改通過點(diǎn)擊Browser按鈕選擇
ArclMS9.0的安裝目錄。單擊Next進(jìn)行下一步。
第五步開始安裝。如果確信前面的選擇正確,請(qǐng)點(diǎn)擊Next開始進(jìn)行下一步。否則,
可以通過Back按鈕返回并重新選擇。
第六步安裝進(jìn)行中。
第七步完成安裝。單擊Finish按鈕完成并退出安裝。
點(diǎn)擊Finish后,安裝向?qū)?huì)彈出一對(duì)話框,提示你是否立即通過PostInstalltion程序
配置ArcIMSo如果點(diǎn)擊確定則開始ArcIMS的配置。否則,你可以通過開始,所有程序
->ArcGIS->ArclMS->ArclMSPostInstallation開始ArcIMS配置。
2PostInstallation開始ArcIMS配置。
在進(jìn)行ArcIMSPostInstallation安裝之前請(qǐng)確認(rèn)Tomcat服務(wù)正在運(yùn)行,否則向?qū)ч_始
設(shè)置ArcIMS時(shí)會(huì)處于漫長(zhǎng)的等待狀態(tài),如果你在最后幾步發(fā)現(xiàn)等待太久,請(qǐng)確認(rèn)一下
Tomcat是否在運(yùn)行,如果沒有正在運(yùn)行,請(qǐng)立即運(yùn)行之,這樣你的安裝可能很快就會(huì)完成。
笫步選擇授權(quán)配置
HcotdirationUpttorv^
GIHavetnsirtoiledmv2ottwofaor?dncodtorao^rtcr4
CIhavealreadyreoi5tereethesoftwarene?dtoregisterAdditionaloptiortsor
bIHavereceivedanduthocizotionfiletrom£SRiar>damnowreacK1tohniohtKe
reoi5trodonprooec.
Zok,>IConcel
選擇第三項(xiàng):IhavereceivedanauthorizationfilefromESRIandamnowreadyto
finishtheregistrationprocess找到授權(quán)文件。
第二步設(shè)置Website和Output目錄。Website目錄用來存貯ArcIMS地圖服務(wù)的Web
頁(yè)面,Output是ArcIMS服務(wù)的軟件目錄。
第三步確定工作目錄、Web服務(wù)器主機(jī)名和擬使用的協(xié)議。
第三步ArcIMS應(yīng)用服務(wù)主機(jī)設(shè)置。
第三步鍵入管理員信息。在此SystemDomain'Username中以圖示的形式輸入系統(tǒng)域名和
用戶名,注意此用戶必須具有系統(tǒng)管理權(quán)限,以便系統(tǒng)能夠創(chuàng)建并啟動(dòng)ArcIMS服務(wù)。
第三步Web服務(wù)器和Servlet引擎組合選擇。我們因?yàn)橐呀?jīng)使用Apache作為Web服務(wù)器
并選用Tomcat作為Servlet引擎
這里選擇最后一項(xiàng),手動(dòng)配置。配置方法如下:
1將vArrlMSInstallationlocation>\ArcIMS\Connectors\Servlet下拷貝
aimsservletconnector.war到〈Tomcatinstallationlocation>\webappsT,并且重
命名為servlet.war0重啟tomcat自動(dòng)部署servleto
2在目錄〈Tomcatinstallationlocation>\servlet\WEB-INF\classes下打開
Esrimap_prop文件。修改AppServerMachine變量值“APPSMACHINE”為安裝IMS的
機(jī)器名。
4重啟ArcIMS、tomcat服務(wù)。
3檢查ArcIMS是否安裝成功
安裝并配置好ArcIMS后,如果你對(duì)你的安裝不確信是否已經(jīng)安裝成功,則請(qǐng)按照如下
步驟進(jìn)行檢測(cè)。在檢查之前,請(qǐng)首先啟動(dòng)TomcatServlet引擎,并確保ArcIMSApplication
Server9.0、ArcIMSMonitor9.0和ArcIMSTasker9.0服務(wù)已經(jīng)啟動(dòng)。這幾個(gè)服務(wù)可以從
開始,控制面板,管理工具下的“服務(wù)”管理器程序來查看并停止或啟動(dòng)。
第?步從開始菜單分所有程序->ArcGIS->ArclMS中選擇并執(zhí)行Diagnostics程序。
注意:對(duì)于WindowsXPsp2來說,由于其嚴(yán)格的安全性,可能會(huì)使得此頁(yè)面不能正常
顯示,現(xiàn)象顯示為:
頁(yè)面上沒有http協(xié)議的選擇按鈕:頁(yè)面左側(cè)的欄目中顯示不出文字內(nèi)容;在HostName
下面的編輯框中顯示不出你己經(jīng)配置好的主機(jī)名;在Port下的編輯框中不能顯示端口號(hào)。
若出現(xiàn)此情況,你可以通過點(diǎn)擊頁(yè)面頂部的細(xì)長(zhǎng)信息欄,在彈出的快捷菜單中點(diǎn)擊“允
許阻止的內(nèi)容(勺…”來使頁(yè)面正常顯示。
巾像不能安金.InternetExpluer已械文4內(nèi)8.?擊此讓■?出丸..>
允許喝止的四號(hào)四二
AreWSDIAGFIIW|ESRI
第二步在頁(yè)面的Selectcomponenttotest下面點(diǎn)擊1和2按鈕,分別彈出類似以下
的窗口則說明ArcIMSServlet連接器ArcIMS應(yīng)用服務(wù)器沒問題。
秀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.
如果兩個(gè)都成功表明,安裝成功了。
五、應(yīng)用系統(tǒng)安裝
1數(shù)據(jù)庫(kù)驅(qū)動(dòng)安裝
需要放置一份驅(qū)動(dòng)到〈Tomcatinstallationlocation>\common\lib中。SqIServer的
JDBC驅(qū)動(dòng)包括msbase.jar,mssqlserver.jar,msutil.jar三個(gè)包“
2war包安裝
至iJvTomcatinstallationlocation>\webapps下新建一個(gè)dty文件夾,將所有內(nèi)容拷
到該處。
3tomcat相關(guān)配置
ffi<Tomcatinstallationlocation>\conf\server.xml中配置數(shù)據(jù)源。配置虛擬目錄。在
文件的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數(shù)據(jù)庫(kù)連接配置
將數(shù)據(jù)連接文件perties放到vTomcatinstallationlocation>\bin下面
#databaseconnectionproperties
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserverL7city:1433;databaseName=city
username=sa
password=saa
將對(duì)應(yīng)地方改成相應(yīng)數(shù)據(jù)庫(kù)服務(wù)器參數(shù)。
4配置地圖服務(wù)。
配置地圖服務(wù)stcityo
5安裝測(cè)試。
輸入http:〃host:8080/cM測(cè)試,能登陸系統(tǒng)表示系統(tǒng)安裝正常。附錄資料:
從XML生成可與Ajax共同使用的JSON
時(shí)下,非常流行使用JavaScript代碼為數(shù)據(jù)驅(qū)動(dòng)的Web應(yīng)用程序添加互動(dòng)性。若能將數(shù)據(jù)
編碼成JavaScriptObjectNotation(JSON)的格式,您就可以更輕松地通過JavaScript語(yǔ)言
使用它。通過本文,發(fā)掘使用XSUTV2從XML數(shù)據(jù)生成JSON的幾種不同方法。
幾年前,許多開發(fā)人員很看好XML、XSLT、ExtensibleHTML(XHTML)和其他一些基
于標(biāo)記的語(yǔ)言?,F(xiàn)在,AsynchronousJavaScriptandXML(AJAX)成了新的熱點(diǎn),人們又將
目光轉(zhuǎn)向了使用JavaScript代碼的數(shù)據(jù)驅(qū)動(dòng)的富Internet應(yīng)用程序。但是開發(fā)人員是否已
經(jīng)消除了XML和這一新技術(shù)之間的鴻溝呢?
當(dāng)然,您可以在Web客戶機(jī)中使用XML解析器來讀取數(shù)據(jù),但這種做法會(huì)帶來兩個(gè)問題。
第一,出于安全方面的原因,XML數(shù)據(jù)只能從與此頁(yè)面相同的那個(gè)域中讀取。這雖然不是
什么大的限制因素,但它的確會(huì)引起部署方面的問題,還會(huì)阻礙DHTML小部件的創(chuàng)建。
第二,讀取和解析XML會(huì)非常慢。
另一種做法是讓服務(wù)器執(zhí)行XML的解析工作,方法是設(shè)置服務(wù)器,使之向?yàn)g覽器發(fā)送以
JavaScript代碼或時(shí)下流行的JavaScriptObjectNotation(JSON)編碼的數(shù)據(jù)。本文將展示
如下三種使用XSLTV2語(yǔ)言和SaxonXSETV2處理器從XML數(shù)據(jù)生成JSON的技巧:
?簡(jiǎn)單編碼
?通過函數(shù)調(diào)用加載數(shù)據(jù)
?編碼對(duì)象
JSON簡(jiǎn)介
要學(xué)習(xí)如何將數(shù)據(jù)編碼成JSON(它只是JavaScript的一個(gè)子集),最好的方法是從數(shù)據(jù)開
始。清單1顯示了書籍列表的一個(gè)示例XML數(shù)據(jù)集。
清單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>
這個(gè)數(shù)據(jù)集很簡(jiǎn)單,只包含三本書,每本書都具有惟一的ID、書名、作者姓名及出版商的
名字。(沒錯(cuò),我只選擇了我自己的書作為數(shù)據(jù)集,但能怨我嗎?這些書實(shí)在是不可多得的
節(jié)日和生日禮物。)
清單2顯示了這些數(shù)據(jù)在JSON中的效果。
清單2.JSON中的示例數(shù)據(jù)集
[{id:1,
title:'CodeGenerationinAction',
first:'Jack;
last:'Herringion',
publisher:'Manning1),
...]
方括號(hào)(口)表明這是一個(gè)數(shù)組。大括號(hào)({))則表明這是一個(gè)散列表,該散列表由一組名稱
和值對(duì)組成。在本例中,我創(chuàng)建了一個(gè)散列表的數(shù)組——用來存儲(chǔ)這類結(jié)構(gòu)式數(shù)據(jù)的一種
常見方法。
另外一點(diǎn)值得注意的是字符串是通過單引號(hào)或雙引號(hào)被編碼的。所以,如果我想用單引號(hào)編
碼OReiHy,我就必須使用反斜杠對(duì)它進(jìn)行轉(zhuǎn)義:'OVReilly'o這讓我編寫的這個(gè)XSLT樣
式表更為有趣了一些。
我并未在本例中放上任何日期,但您也可以通過如下兩種方法來編碼日期。第一種方法是將
日期作為字符串,該字符串必須在后面被解析。第二種方法是將日期作為一個(gè)對(duì)象,比如:
publishdate:newDate(2006,6,16,17,45,0)
這段代碼將publishdate的值設(shè)置為6/16/20065:45:00p.m.。
簡(jiǎn)單編碼
接下來我將陸續(xù)介紹JSON編碼的幾種技巧。第一種也是其中最簡(jiǎn)單的一種,此樣式表如
清單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的變量設(shè)置為一個(gè)包含三個(gè)散列表的數(shù)組,每個(gè)散列表包含關(guān)于
該書的信息。再回過頭來看看清單3,您會(huì)發(fā)現(xiàn)第一個(gè)模板匹配路徑,它也是首先應(yīng)
用到輸入數(shù)據(jù)集的模板,該模板使用for-each循環(huán)來遍歷每本書。之后,它使用〈value-?!?/p>
標(biāo)記來將文本從該數(shù)據(jù)輸出到JavaScript輸出代碼。
對(duì)于字符串,我使用名為js:escape()的定制函數(shù),它在模板之前定義。該函數(shù)使用一個(gè)正
則表達(dá)式將一個(gè)單引號(hào)標(biāo)記更改為帶有反斜杠的單引號(hào)標(biāo)記。
最后一個(gè)重要的元素是vxsl:oulput>標(biāo)記,它告知處理器要輸出的是文本而不是XML。要
檢驗(yàn)此過程是否可以正常工作,我加入了一個(gè)simple.html文件,該文件引用我在simple.js
保存的XSL樣式表的輸出。這個(gè)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>標(biāo)記簡(jiǎn)單地加載已編碼了的JavaScript代碼。之后,第二個(gè)
<script>標(biāo)記將數(shù)組的長(zhǎng)度寫出到瀏覽器頁(yè)面,如圖1所示。
圖1.simple.html的輸出
好了!數(shù)據(jù)文件包含三本書,相應(yīng)的JavaScript文件也包含三本書。它真的可以工作!
通過函數(shù)加載
上述笫一個(gè)示例很簡(jiǎn)單,而且在大多數(shù)情況下可以發(fā)揮其作用,但它存在一些問題。笫一個(gè)
問題是對(duì)于數(shù)據(jù)何時(shí)被加載沒有任何提示。如果數(shù)據(jù)是像頁(yè)面那樣被靜態(tài)加載的,這不成問
題。但是如果頁(yè)面動(dòng)態(tài)創(chuàng)建了一個(gè)<script>標(biāo)記來按需加載數(shù)據(jù),那么就很有必要知道
<script>標(biāo)記是何時(shí)完成的。實(shí)現(xiàn)此功能的最好的方法是讓編碼了的數(shù)據(jù)調(diào)用一個(gè)
JavaScript函數(shù),而不是只設(shè)置數(shù)據(jù)。
這個(gè)概念很重要,所以我將花一些時(shí)間來介紹一下為什么您必須要通過動(dòng)態(tài)生成的〈script〉
標(biāo)記來加載數(shù)據(jù)。頁(yè)面加載后,從服務(wù)器獲得數(shù)據(jù)是Web2.0的核心功能。一種方法是使
用AJAX機(jī)制通過到服務(wù)器的調(diào)用來加載XMLo然而,出于安全性的原因,AJAX機(jī)制
只限于從單一域獲取數(shù)據(jù)。這在大多數(shù)情況下都沒有問題,但有時(shí),您可能需要JavaScript
代碼運(yùn)行在他人的頁(yè)面上(例如,GoogleMaps)o
在這種情況下從服務(wù)器獲得數(shù)據(jù)的惟一方法是通過動(dòng)態(tài)加載<script>標(biāo)記。獲悉〈script,
標(biāo)記何時(shí)加載的最好的方法是讓〈scrip"標(biāo)記返I可的腳本調(diào)用函數(shù)而不是簡(jiǎn)單地加載數(shù)
據(jù)。清單6顯示了在函數(shù)調(diào)用中編碼的數(shù)據(jù)。
清單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給出了相應(yīng)的.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>
稍后將詳細(xì)介紹drawbooks函數(shù),這里重要的是了解一下頁(yè)面如何定義AddBooks函數(shù),
該函數(shù)隨后會(huì)由functionl.js文件中的腳本調(diào)用。該AddBooks函數(shù)負(fù)責(zé)處理數(shù)據(jù)。而且被
調(diào)用的AddBooks函數(shù)會(huì)向頁(yè)面指示<script>標(biāo)記被正確加載,并已加載完成。
要?jiǎng)?chuàng)建functionl.js文件,我只對(duì)樣式表稍微做了一點(diǎn)修改,如清單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>
這里,我調(diào)用了一個(gè)函數(shù),而不是簡(jiǎn)單地設(shè)置一個(gè)變量。這就是我所做的惟一更改。
回到頁(yè)面,我使用了drawbooks函數(shù)來構(gòu)建書的表格,這樣我就能夠確認(rèn)數(shù)據(jù)被正確編碼
和正確顯示。此函數(shù)是在drawbooks.js內(nèi)定義的,如清單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);
這個(gè)簡(jiǎn)單函數(shù)創(chuàng)建了一個(gè)表格節(jié)點(diǎn),然后循環(huán)訪問書的列表并為每本書創(chuàng)建一行,為每個(gè)數(shù)
據(jù)元素分配一個(gè)單元格。此頁(yè)面上的代碼的結(jié)果如圖2所示。
圖2.function1.html的結(jié)果
0O0Function1JSloaderCD
現(xiàn)在我就可以查看一下此頁(yè)面的輸出并確認(rèn)來自原始.xml文件的一切均已被正確轉(zhuǎn)換成
JavaScript代碼,且數(shù)據(jù)被發(fā)送到AddData函數(shù)并被正確添加到頁(yè)面。
細(xì)化函數(shù)調(diào)用技術(shù)
我很喜歡函數(shù)調(diào)用這一技術(shù),但我并不贊同將所有圖書數(shù)據(jù)都放入一個(gè)塊中。另一種方式是
為每條記錄采用一個(gè)調(diào)用,如清單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,
});
對(duì).html頁(yè)面只需做少許修改,如清單11所示。
清單11.Function2.html
<script>
varg_books=[];
functionAddBook(book){g_books.push(book);}
</script>
這里更改了XSLT,以使函數(shù)調(diào)用駐留在for-each循環(huán)體內(nèi)。清單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>
對(duì)這個(gè)給定示例來說,這種更改看起來有些隨意。但如果原始的XML數(shù)據(jù)集有多種數(shù)據(jù)
類型,要為每種類型分配一個(gè)單獨(dú)的函數(shù)調(diào)用會(huì)使XSL和頁(yè)面上的JavaScript代碼更為簡(jiǎn)
單、更易于維護(hù)。
編碼對(duì)象
對(duì)小的頁(yè)面來講,使用JavaScript函數(shù)沒有問題。但對(duì)于大型項(xiàng)目,就需要使用JavaScript
語(yǔ)言的一些面向?qū)ο筇匦?。是的,JavaScript語(yǔ)言可以處理對(duì)象而且可以處理得很好。
清單13顯示了如何創(chuàng)建帶有數(shù)據(jù)的對(duì)象。
清單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'
}));
在本例中,我只簡(jiǎn)單地向名為g_books的數(shù)組添加了Book對(duì)象。JavaScript的對(duì)象創(chuàng)建
與JavaTM、C#或C++編程語(yǔ)言的對(duì)象創(chuàng)建十分相似。都是一個(gè)new操作符后跟一個(gè)類
名。參數(shù)放到隨后的括號(hào)內(nèi)。在本例中,我傳入了一個(gè)帶值的單一散列表,并將其分割成單
獨(dú)的一些參數(shù)。
創(chuàng)建此對(duì)象的代碼如清單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>
此頁(yè)面內(nèi)最值得注意的是定義Book類的那部分代碼。清單15顯示了該頁(yè)面。
清單15.objectl.html
<script>
varg_books=[];
functionBook(data)
(
for(vardindata){this[d]=data[d];)
)
</script>
Book類的構(gòu)造函數(shù)循環(huán)訪問散列表的所有數(shù)據(jù)。對(duì)于每個(gè)鍵,會(huì)在對(duì)象上創(chuàng)建一個(gè)具有對(duì)
象名稱和數(shù)據(jù)的實(shí)例變量。不需要對(duì)drawbooks函數(shù)做任何修改,因?yàn)閷?duì)象都有與原始的
散列表相同的鍵和值。JavaScript語(yǔ)言并不區(qū)分訪問的是散列表內(nèi)的命名值還是對(duì)象上的命
名值。
當(dāng)然,Book類應(yīng)該有像set和get這樣的訪問程序。清單16顯示了我是如何對(duì)
JavaScript數(shù)據(jù)進(jìn)行編碼的。
清單16.Object2.js
varb1=newBook();
b1.setld(1);
b1.setTitle('CodeGenerationinAction')
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年借殼上市交易合同簽訂格式范本
- 2025年外籍游客旅游服務(wù)合同
- 2025年公司股權(quán)增資協(xié)議格式
- 2025年分期購(gòu)買運(yùn)動(dòng)鞋服合同
- 二零二五版區(qū)塊鏈技術(shù)應(yīng)用股份制合伙人協(xié)議2篇
- 2025年新能源項(xiàng)目居間合作合同范本3篇
- 教育局教師幼兒園2025年度勞動(dòng)合同執(zhí)行監(jiān)督辦法3篇
- 2025年度光伏發(fā)電項(xiàng)目臨建勞務(wù)分包協(xié)議4篇
- 二零二五年度高級(jí)技術(shù)人才勞動(dòng)合同(研發(fā)團(tuán)隊(duì)合作協(xié)議書)3篇
- 2025公司用人合同范本
- 中央2025年國(guó)務(wù)院發(fā)展研究中心有關(guān)直屬事業(yè)單位招聘19人筆試歷年參考題庫(kù)附帶答案詳解
- 外呼合作協(xié)議
- 小學(xué)二年級(jí)100以內(nèi)進(jìn)退位加減法800道題
- 2025年1月普通高等學(xué)校招生全國(guó)統(tǒng)一考試適應(yīng)性測(cè)試(八省聯(lián)考)語(yǔ)文試題
- 《立式輥磨機(jī)用陶瓷金屬?gòu)?fù)合磨輥輥套及磨盤襯板》編制說明
- 保險(xiǎn)公司2025年工作總結(jié)與2025年工作計(jì)劃
- 育肥牛購(gòu)銷合同范例
- 暨南大學(xué)珠海校區(qū)財(cái)務(wù)辦招考財(cái)務(wù)工作人員管理單位遴選500模擬題附帶答案詳解
- DB51-T 2944-2022 四川省社會(huì)組織建設(shè)治理規(guī)范
- 2024北京初三(上)期末英語(yǔ)匯編:材料作文
- 2024年大型風(fēng)力發(fā)電項(xiàng)目EPC總承包合同
評(píng)論
0/150
提交評(píng)論