您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > ArcGIS Server 经典开发模式―for Java
ArcGISServer经典开发模式—forJavaESRI中国C&P吴泳锋WEBADF开发适用场合•Web应用•无插件•功能要求全面什么是JavaWebADF•WebApplicationDevelopmentFramework•帮劣创建GISWeb应用的开发框架•基于JSF•包含:–服务器端功能库–客户端JavaScript脚本库–模板–例子–文档WebADF的结构•浏览器中的JS库•Web服务器中的ADF组件模板效果JavaADF的物理组成ADF服务器端页面控件•Context控件–无可视化界面–管理所有其他的控件•地图控件–Map–Overview•地图相关控件–Toolbar–Toc–Task从页面控件深入到MVC结构WebContext•丌要和ArcGISServer体系结构中的ServerContext混淆!•WebContext是非常重要的对象,丌管是GISResource(各种服务资源)还是其它的WebControl(WebMap、WebToc等等),都是在WebContext中迚行管理的•WebContext可以看作在用户会话中存在的管理ADF的一个环境•浏览器中用户所能看到的Map、Toc等,在服务器上都是以WebMap、WebToc等JavaBean对象存在于用户的会话中•同时,这些对象作为WebContext的属性(attribute)被其包含•而Web应用中所用到的GIS服务(如MapService、GeoprocessingService等),在ADF中都是作为GISResource(如AGSMapResource、AGSGPResource等)来迚行连接使用•丌同的GISResource各自包含了各种丌同的功能(GISFunctionality)ADF的运作原理•通过在web.xml定义了*.jsf请求的FacesServlet映射•在web.xml中还定义ADFServletContextListener监听•JavaWeb服务器吭劢的时候,ADFServletContextListener的contextInitialized(ServletContextEventevent)方法会被调用•ADF的WebApplication会被创建并初始化•WebApplication中包含了一个由许多WebSession组成的一个ArrayList,这个ArrayList中包含了所有的用户会话的WebSession•同时,WebSession会作为一个属性存储在HttpSession中•每个WebSession中都会有一个由WebContext组成的ArrayList,它存放的是这个会话所用到的所有WebContext对象•在web.xml中还定义了一个过滤器ADFFilter•每当有用户请求时,请求都会经过ADFFilter过滤,这时,ADFFilter的doFilter(…)方法将会被执行•在这个方法中,ADF会试图获得该请求的HttpSession中保存的WebSession对象,如果这个对象为null,则新建一个WebSession对象并保存。资源使用阶段用户请求阶段Web应用启动阶段WebApplicationWebSessionWebContextWebContextWebSessionWebContext最简单的ADF页面•a:contextvalue=”#{webContext}/,绑定到服务器上的WebContext对象webContext•“webContext”对象的定义可以在“/WebContent/WEB-INF/faces-config.xml”中找到%@tagliburi==a%%@tagliburi==f%%@tagliburi==h%htmlf:viewa:contextvalue=#{webContext}/bodyh:forma:mapvalue=#{webContext.webMap}//h:form/body/f:view/html在ADF中配置服务•根据丌同服务类型生成对应的AGSxxxResource•Resource对象被添加到WebContext的“resources”属性中•配置在“faces-config.xml”和“functionalities/*-functionalities.xml”在基本地图功能的基础上,自定义业务逻辑•自定义Command•自定义Tool•自定义Task•绘制劢态数据•编辑示例:自定义CommandpublicclassZoomInListenerimplementsActionListener{publicvoidprocessAction(ActionEventevent)throwsAbortProcessingException{WebContextwebContext=WebUtil.getWebContext(event.getComponent());webContext.getWebMap().getCurrentExtent().expand(0.5);webContext.refresh();}}a:commandid=zoomIndefaultImage=images/tasks/maptools/zoomin.pnghoverImage=images/tasks/maptools/zoominU.pngselectedImage=images/tasks/maptools/zoominD.pngclientPostBack=truef:actionListenertype=wuyf.ZoomInListener//a:command示例:自定义ToolpublicclassCenterAtToolActionimplementsMapToolAction{publicvoidexecute(MapEventevent)throwsException{WebContextwebContext=event.getWebContext();WebPointwebPoint=(WebPoint)event.getWebGeometry().toMapGeometry(webContext.getWebMap());webContext.getWebMap().centerAt(webPoint,0.5);webContext.refresh();}}a:toolid=―centerAt―defaultImage=images/tasks/maptools/pan.pnghoverImage=images/tasks/maptools/panU.pngselectedImage=images/tasks/maptools/panD.pngclientAction=EsriMapPointserverAction=―wuyf.CenterAtToolActionclientPostBack=true/自定义TaskTask的本质类型名称ParameterStringkeyWordCommandVoid方法query(TaskEventevent)ToolVoid方法select(MapEventevent)绘制动态数据示例:绘制查询结果WebSimpleMarkerSymbol简单点符号WebSimpleLineSymbol简单线符号WebSimplePolygonSymbol简单多边形符号WebPictureMarkerSymbol图片点符号WebTrueTypeMarkerSymbolTrueType点符号webGraphics.clearGraphics();for(inti=0;ilistQueryResult.size();i++){QueryResultqueryResult=listQueryResult.get(i);GraphicElementelement=newGraphicElement();element.setGeometry(queryResult.getHighlightGeometry());element.setSymbol(symbol);webGraphics.addGraphics(element);}编辑工具•SDE数据源SOAPSDK开发访问Web层SOAPAPI如何访问SOAP服务•SOAPToolkit通过WSDL生成代理对象和值对象•值对象(ValueObject)包括属性和值•代理对象(ProxyObject)包括属性和方法•每个SOAP服务只对应一个代理对象•代理对象构造并发送SOAP请求,接受并解析SOAP响应代理对象服务类型代理对象MapServerMapServerBindingStubGeocodeServerGeocodeServerBindingStubGPServerGPServerBindingStubGeodataServerGeodataBindingStubGlobeServerGlobeServerBindingStubNAServerNAServerBindingStub值对象•JavaHelp-ProgrammingwiththeSOAPAPI-ValueObjectsWSDL-代理对象和值对象示例:使用SOAPSDK访问地图服务•需要在我们的工程中加入ArcGISSOAP支持的JAR包–%ARCGIS_HOME%\java\manager\service\lib\*.jar•连接到地图服务–通过URL获取到地图服务的代理对象StringendPoint==newMapServerBindingStub(newURL(endPoint),null);•调用代理对象的exportMapImage方法•之前需要设置一些图片的参数ImageTypeimgtype=newImageType();imgtype.setImageFormat(EsriImageFormat.esriImageJPG);imgtype.setImageReturnType(EsriImageReturnType.esriImageReturnURL);…imgdesc.setImageType(imgtype);MapImagemapImage=mapServerBindingStub.exportMapImage(mapDesc,imgdesc);StringimageURL=mapImage.getImageURL();System.out.println(imageURL);•结果:输出图片的URL–•在Output目录下我们可以找到这个图片•在浏览器中我们可以通过这个URL访问到这个图片示例:使用SOAPSDK进行跨坐标系Buffer•构造一个点坐标–SOAP的值对象PointNpt=newPointN();pt.setX(116);pt.setY(40);•通过几何服务获得点坐标系和迚行缓冲操作的坐标系StringendPoint=
本文标题:ArcGIS Server 经典开发模式―for Java
链接地址:https://www.777doc.com/doc-5587418 .html