【2009.2.18補註】這個問題在SP1 for Linux中修復,SP1 for Windows下問題更加嚴重,若是打了SP1 for Windows,還想使用REST服務,就必須使用Linux或者沒有打SP1補丁的Windows的ArcGIS Server的$arcgis/java/web_output/rest替換現有的目錄(同時,還須要手動修改/WEB-INF/classes下的配置文件server.properties)。
目前在ArcGIS Server 9.3 Java中使用中文進行REST查詢時是有問題的,這是ArcGIS Server for Java集成的tomcat的問題,個人同事曾經給出一個解決方案:
一、ArcGIS Server Java 9.3能夠把services和rest單獨導出成war包,部署到其餘的web服務器上,從而能夠避免內置tomcat的性能瓶頸。進入Manager-->services-->Configure Services Handler-->Export頁面,把rest服務導出成rest.war,保存到本地;
二、把保存下來的rest.拷貝到任何一個其餘版本的tomcat 的webapps目錄下(ArcGIS Server內置的tomcat是5.5.9版本,咱們測試用的是apache-tomcat-6.0.10)
三、啓動tomcat6.0.10,在瀏覽器中輸入http://localhost:8080/rest,進入service directory頁面。
四、選中服務的圖層進行查詢,輸入中文進行查詢,看是否能夠獲得正確的結果。
有人反映這個方案不能解決問題,可能和tomcat的版本有關,我研究了一下,給出兩種解決方案:
方案1:
從客戶端入手。
中文不能查詢的根本緣由在於編碼,當咱們在使用REST API進行查詢的時候,請求的URL通常是這樣:「http://wuyfsles:8399/arcgis/rest/services/BeijingTraffic/MapServer/find?searchText=事故&contains=true&searchFields=&sr=&layers=0&returnGeometry=true」,其中的中文沒法被服務器識別。所以,你能夠在發送前對「事故」這個中文關鍵詞進行URL編碼,應該是「%CA%C2%B9%CA」,你在瀏覽器中輸入「http://wuyfsles:8399/arcgis/rest/services/BeijingTraffic/MapServer /find?searchText=%CA%C2%B9%CA&contains=true&searchFields=&sr=& layers=0&returnGeometry=true」的時候,是否是能夠看到結果了?
方案2:
從服務器端入手,仍是着手解決編碼問題。
既然tomcat有問題,咱們就在tomcat身上開刀。以Linux爲例,分別打開「/arcgis/java/manager/service/tomcat/managerappserver/conf/server.xml」和「/arcgis/java/manager/service/tomcat/managerserver/conf/server.xml」,找到「Connector」元素,如圖添加屬性URIEncoding="UTF-8"。保存退出,重啓tomcat和ArcGIS Server。java