【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的问题,我的同事曾经给出一个解决方案:
1、ArcGIS Server Java 9.3可以把services和rest单独导出成war包,部署到其他的web服务器上,从而可以避免内置tomcat的性能瓶颈。进入Manager-->services-->Configure Services Handler-->Export页面,把rest服务导出成rest.war,保存到本地;
2、把保存下来的rest.拷贝到任何一个其他版本的tomcat 的webapps目录下(ArcGIS Server内置的tomcat是5.5.9版本,我们测试用的是apache-tomcat-6.0.10)
3、启动tomcat6.0.10,在浏览器中输入http://localhost:8080/rest,进入service directory页面。
4、选中服务的图层进行查询,输入中文进行查询,看是否可以得到正确的结果。
有人反映这个方案不能解决问题,可能和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。