首页 百科知识 用户自定义服务

用户自定义服务

时间:2023-01-19 百科知识 版权反馈
【摘要】:下面就介绍编写自定义服务的方法:所有的请求都是XML,可以根据xml的内容找出请求的类型。
用户自定义服务_网络地理信息系统

9.3.10 用户自定义服务

GeoSurf可以允许用户利用系统提供的5类服务增加服务Servlet,提供自定义的服务,甚至可以替换已经预先写好的Servlet。下面就介绍编写自定义服务的方法:所有的请求都是XML,可以根据xml的内容找出请求的类型。为了方便GeoMapServlet的分发,依据http请求中的“GEOSURF_XML_ ProtocolRequest”的值,来决定请求类型。

本系统预置的几个请求类型是:GeoSurfRenderRequest——远程绘制请求; GeoSurfVectorRequest——矢量请求;GeoSurfImageRequest——影像请求; TableInfoRequest——表元信息请求;ColumnStatisticsRequest——列统计请求。

另外,根据“GEOSURF_XML_ProtocolVersion”的值也可以确定请求的版本。当GeoMapServlet根据上面的头域寻找对应Servlet的名字时,可利用getServletConfig()、getServletContext()、getNamedDispatcher(servletName)来转发请求。请求类型和Servlet名字对应关系是由一个xml类型的配置文件geoMapServiceConfig.xml来确定的,该配置文件还定义了是否验证请求文档。其对应的DTD如下所示,这个配置文档应该放在Web应用目录结构的WEBINF文件夹下面。

  <?xml version="1.0"encoding="UTF-8"?>

  <!ELEMENT GeoMapServiceConfig(Service*)>

  <!ATTLIST GeoMapServiceConfig validateRequest(true|false)"false">

  <!ELEMENT Service(ServiceName,Servlet)>

  <!ELEMENT ServiceName(#PCDATA)>

  <!ELEMENT Servlet(#PCDATA)>

在运行时如果没有找到该配置文件,GeoMapServlet将根据默认的对应关系来分发请求,默认的对应关系如下:GeoSurfRenderRequest—geoRenderServlet,GeoSurfVectorRequest—geoVectorServlet,GeoSurfImageRequest—geoImageServlet,TableInfoRequest—geoMetaServlet,ColumnStatisticsRequest—geoMetaServlet。找到了Servlet的名字后,需要根据名字找到类。因此,必须在web.xml里面配置具体服务Servlet类,如:GeoRenderServlet、GeoVectorServlet等的信息。配置信息如下:

<servlet>

  <servlet-name>geoMapServlet</servlet-name>

img194

<servlet-class>com.geostar.server.servlet.GeoMapServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet>

<servlet-name>geoVectorServlet</servlet-name>

<servlet-class>com.geostar.server.servlet.GeoVectorServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>geoImageServlet</servlet-name>

<servlet-class>com.geostar.server.servlet.GeoImageServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>geoRenderServlet</servlet-name>

<servlet-class>com.geostar.server.servlet.GeoRenderServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>geoMetaServlet</servlet-name>

<servlet-class>com.geostar.server.servlet.GeoMetaServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>geoMapServlet</servlet-name>

<url-pattern>/geoMapServlet</url-pattern>

</servlet-mapping>

如果需要增加自定义的服务,按以下步骤进行:定义一个客户端和服务端交流的协议;请求的类型必须是按照前面所说的样式,响应类型可以任意定,只要客户端可以识别;根据GEOSURF_XML_Config_AddedServiceConfig.dtd的样式,编写addedServiceConfig.xml文档,描述前面设计的请求类型,以便让系统能够支持,具体的格式参见DTD;根据协议编写一个Servlet来处理xml文档数据的提取。这个文档已经在GeoMapServlet中解析出来了,放在了HttpRequest的“req_data”Attribute里,只需从中获取Object,然后Cast生成JDOM的Document。后面的处理,包括响应输出,必须自己编码实现。把上面编写的addedServiceConfig.xml放在Web应用目录结构的WEB-INF文件夹下面;在web.xml文件中配置前面编写的Servlet的名字,以便让GeoMapServlet可以将请求分发给用户自定义的Servlet。完成这些步骤后,还需要进行后期工作,如:将发布的服务进行打包、部署。相关内容请参考所使用的应用服务器的相应文档。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈