ArcGIS+Server+Java讲座.docx

上传人:b****2 文档编号:3224001 上传时间:2023-05-05 格式:DOCX 页数:103 大小:409.28KB
下载 相关 举报
ArcGIS+Server+Java讲座.docx_第1页
第1页 / 共103页
ArcGIS+Server+Java讲座.docx_第2页
第2页 / 共103页
ArcGIS+Server+Java讲座.docx_第3页
第3页 / 共103页
ArcGIS+Server+Java讲座.docx_第4页
第4页 / 共103页
ArcGIS+Server+Java讲座.docx_第5页
第5页 / 共103页
ArcGIS+Server+Java讲座.docx_第6页
第6页 / 共103页
ArcGIS+Server+Java讲座.docx_第7页
第7页 / 共103页
ArcGIS+Server+Java讲座.docx_第8页
第8页 / 共103页
ArcGIS+Server+Java讲座.docx_第9页
第9页 / 共103页
ArcGIS+Server+Java讲座.docx_第10页
第10页 / 共103页
ArcGIS+Server+Java讲座.docx_第11页
第11页 / 共103页
ArcGIS+Server+Java讲座.docx_第12页
第12页 / 共103页
ArcGIS+Server+Java讲座.docx_第13页
第13页 / 共103页
ArcGIS+Server+Java讲座.docx_第14页
第14页 / 共103页
ArcGIS+Server+Java讲座.docx_第15页
第15页 / 共103页
ArcGIS+Server+Java讲座.docx_第16页
第16页 / 共103页
ArcGIS+Server+Java讲座.docx_第17页
第17页 / 共103页
ArcGIS+Server+Java讲座.docx_第18页
第18页 / 共103页
ArcGIS+Server+Java讲座.docx_第19页
第19页 / 共103页
ArcGIS+Server+Java讲座.docx_第20页
第20页 / 共103页
亲,该文档总共103页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ArcGIS+Server+Java讲座.docx

《ArcGIS+Server+Java讲座.docx》由会员分享,可在线阅读,更多相关《ArcGIS+Server+Java讲座.docx(103页珍藏版)》请在冰点文库上搜索。

ArcGIS+Server+Java讲座.docx

ArcGIS+Server+Java讲座

ArcGISServer9.2forJava讲座

1、前言------为什么我们选择JSF,而不是其它framework1

2、ArcGISServerJava开发JSF基础2

3、ArcGISServerJavaADF开发的JSF知识介绍5

4、ArcGISServer开发初步--自定义工具7

5、使用图片和TrueType字体进行标注10

6、ServerJava讲座-----扩展Tasks框架13

7、ServerJava开发实战---自定义command19

8、ArcGISServerJava讲座--ADF体系结构第一部分21

9、ArcGISServerJAVA讲座--实现后台JSFBean和前台Javascript的联动24

10、ArcGISServerJAVA讲座--AJAX基础25

11、ArcGISServerJAVA开发讲座---ADF中的Ajax函数27

12、ArcGISServerJava讲座--如何在用JSF在服务器端处理Ajax请求29

13、ArcGISServerJava讲座----利用Ajax得到当前地图的比例尺(服务器端)32

14、ArcGISServerJava讲座--用Ajax得到地图比例尺(客户端代码)33

15、ArcGISServerJAVA讲座自定义Functionality35

16、ArcGISServerJava讲座---用自定义functionality实现用户权限控制37

17、ServerJava讲座-----扩展Tasks框架42

18、ArcGISServerJava讲座--自定义Tools开发48

19、ArcGISServerJava讲座-空间查询和高亮显示的实现52

20、ServerJava自定义开发-NetworkAnalysis54

21、ArcGISServer开发——控制图层是否可见59

22、航线查询问题-ServerJava的实现方法59

23、ArcGis航线查询完全例子64

24、ArcGisServer中如何在Task中实现下拉列表和checkbox和radiobutton.(完整例子)73

25、ArcGISServer开发——标注74

26、ArcGISServerJava开发--BornforSOA系列前言75

27、ArcGISServerJava开发--BornforSOA系列WebService基础75

28、ArcGISServerJava讲座:

BornForSOA--Server对于SOAP的支持81

29、ServerJava开发--BornforSOA系列通过代理类访问ArcGISServerWebService84

1、前言------为什么我们选择JSF,而不是其它framework

在正式开讲之前,我们来探讨一下为什么要使用JSF来实现SERVERADF,这也是很多开发商跟我讨论时经常会问到的问题。

    世界上有300种Java的framework,这个数字是我几个月前听到的,现在可能已经不止这个数了。

我曾经用过的framework包括Structs,Hibernate,Spring。

这些framework不但能加速开发,而且会带来全新的程序设计理念。

我当时的感觉是:

原来程序还可以这样写!

当然,这些framework都是开源免费,你不用担心自己的良心受到谴责,也不用担心比尔盖茨半夜敲门收钱。

    在这300多种framework中,ESRI为什么选择了JSF?

各个framework有各个framework的好处。

JSF最大的优点就是:

像Swing和AWT一样,JSF是一个可以提供一组标准的、可重用的GUI组件的开发框架。

原因之一:

行为与表示的完全分离。

    行为和表现不分离的一个典型例子是普通的JSP技术,这一技术很好,因为很容易在HTML(和类HTML)页面中混合Java代码。

这样我们就可以使用强大的JavaAPI的功能。

当然,很明显的坏处是行为表现黏合在一起。

而且代码不容易重用。

这让我想起刚使用JSP技术时,在文本编辑器下写JSP页面,读写数据库,并且在同一个页面上显示出来的痛苦回忆。

    Model1架构的出现使开发人员可以用javabean的方式进行开发,舒服多了。

当然,还有更好的。

    这就不得不提到著名的MVC结构,(MVC)model-view-controller架构提供了一系列的设计模式,这些模式让你可以轻松地应用于程序地开发,特别是有界面程序的开发。

现在又有多少的程序是没有界面的呢?

  

    Model包装了商业逻辑,也包含了数据持久的代码,包括存取数据库或者存取文件。

Model最好不要跟View有任何关系,它最好不要知道谁将显示结果,是一个Swing界面,还是JSF界面,还是普通的JSP界面。

为了做到这一点,事先的规划要花一些时间,但是相信我,这些花的时间带来的价值将超过你的想象。

如果设计得当,许多用ArcGISEngine开发的代码可以轻松在Server中使用,不需要修改任何代码。

.net也是一样。

    View只用来显示显示逻辑,不能有任何商务逻辑。

controller是view和model的桥梁,它和model进行交互,并且把结果显示在Model中。

显示页面的选择也由controller进行选择。

我会在后面的讲座中详细解释JSF中的Controller的实现。

    Structs,Spring都实现了MVC的架构。

但是它们都没有像JSF这样,提供一个事件驱动的组件对象模型。

大家可以想一想,一个平常在HTML中使用的标签,    ,在JSF框架中变成了一个组件,这个组件还可以有事件,而且可以对这个事件可以进行编程。

这是多么得激动人心啊!

GIS程序需要和用户进行良好地交互,选择一个事件驱动的framework,可以更加容易编程和实现。

  原因之二:

事件容易捆绑到服务器端代码。

JSF提供了多个事件驱动的GUI控件,比如最最常见的commandbutton。

这些commandbutton会产生事件,我们有机会对事件进行编程;我在以前的讲座中曾经讲过,ArcGISServer的MapControl和commandbutton是兄弟,他们都继承自ponent.UICommand;是不是感觉很奇妙啊?

继承自UICommand的原因是要利用UICommand的很多事件,对鼠标在MapControl上的动作,比如放大,缩小,需要产生事件,这些事件提交到相应的监听器,监听器会对事件进行处理。

有关于MapControl的问题先提这些,在后面的讲座中我会详细解释。

  

    举一个简单的例子吧,一个最简单不过的fullextent工具,如果我自己来写,可以写成这样:

commandButtonid="redisplayCommand"type="submit"value="FullExtent"actionListener="#{getMapBean.getFullMap}"/>

这个按钮,用来缩放到全图,它的监听器是绑定到getMapBean的getFullMap方法,在该方法里面,我会将地图的大小缩放到全图范围。

代码我会稍后贴上来。

这就是JSF的事件捆绑到服务器代码的功能。

普通的一个button,点击事件可以映射到后台Bean的某一个方法,在后台方法里面执行商业逻辑,进行数据存取。

这个概念跟普通的Swing程序的事件和监听器机制十分类似,Java程序员们看了肯定倍感亲切。

注意,刚才这个button没有利用任何ADF的类,在我们的ADF中,所有要建大厦的材料都已经给您准备好,fullExtent功能只需要三行代码即可实现。

事件容易捆绑到服务器端代码,这是ESRI选择JSF作为我们ADF底层的另外一个重要的原因。

2、ArcGISServerJava开发JSF基础

有很多开发人员问我,如果我已经有了一个JSP的Application,为了使用JSF,为了使用我们新版的ArcGISServer的JavaADF,我需要重新修改写我的程序以让它们适应整个JSF框架么?

这是一个很有意思的问题,我可以想象出大家头皮发麻,左右为难的感觉,这也引出了今天的话题,Servlet容器是如何对JSF的程序进行处理的呢?

随便找一个JSF的Application,可以是我们的ArcGISServer的Sample,也可以是任何您从网上下载的JSF例子,打开web.xml文件,你就可以看到该文件里面有如下的servlet映射:

FacesServlet

javax.faces.webapp.FacesServlet

1

FacesServlet

*.jsf

这是Java程序员最熟悉不过的Servlet配置了,该Servlet映射是什么意思呢?

将所有对后缀名为jsf的请求,都交由javax.faces.webapp.FacesServlet来处理。

哦,另外插一句,JSF的标准是公开的,如果你觉得这个FacesServlet不好,你大可以自己写一个JSF处理Servlet。

将所有对jsf的请求自己来处理。

事实上,已经有人这么做了,这就是Myfaces,可以参考Apache的网站。

言归正转,如何将JSF的应用集成到已经有的应用程序中呢,您一定已经想到了。

事实上事情很简单,在访问某个JSF页面的时候,映射到某个目录即可。

这个目录在web.xml进行了设置,比如下面的配置就可以把所有的对faces的请求,让FaceServlet来处理:

FacesServlet

/faces/*

所以,如果你在根目录了放了一个hello.jsp页面,这个jsp页面使用了JSF框架,那么你在访问这个jsp页面时用http:

//servername/faces/hello.jsp就可以了,你的容器会把这样的请求提交FaceServlet来处理,这个时候,就轮到FaceServlet来大显身手了,它会忠实地执行你的请求。

JSF的ManagedBean是保存在session中的,所以你在JSF页面和普通JSP之间切换页面的时候,不会丢失信息,反过来也一样。

JSF自己有自己的PageNavigation系统,但是它仍然可以跟普通的JSP页面互相切换,我们在后面的讲座中会讲到。

所以如果你已经存在的一个项目,想上我们的ArcGISServer,利用其基于JSF的ADF进行开发,也是完全可以的。

当然,新的应用最好用JSF框架开发,开始时可能需要一点时间去学习,对于你后面会用到的强大的JSF的功能,这些投资是完全值得的。

欢迎大家进入美妙的JSF的世界。

了解了Servlet是如何处理你的JSF请求的,那么接下去我们来看看,让JSF程序跑起来需要什么必要条件,一个Servlet容器是必需的,这个一般取决于公司给我们配什么,或者客户要求什么。

一般免费的好选择是Tomcat,价格便宜量又足,我们大家都用它。

当然如果项目大,经费充足,IBM的J2EE容器Websphere和Bea公司的Weblogic也是一个好选择。

选用大公司J2EE容器有一个好处,即使三更或者五更出了问题,你照样可以拍着桌子让他们的工程师过来帮你解决问题,如果你用我们ESRI的软件,你也可以这样;而用免费的软件三更出了问题只有我们自己出马了,当然,google和XX在这个时候看在点击率的份上,还是可以拉我们一把的。

除了一个好的容器,还需要一个JSF的实现,用SUN的ReferenceImplementation总是不会错的,人家是标准的制定者嘛,名字也起做“参考实现”,写来让你参考的。

也可以选择功能更加强大的Myfaces。

ESRI的ArcGISServerADF遵循标准的JSF,所以ADF可以跑在Sun的JSF实现,或者Myfaces上。

我们这次所有的教程都是基于sun的标准的JSF实现。

还有其它的JSF实现,大家可以根据自己的爱好,择优选择之。

如果你觉得都不好用,大可以参考标准自己写一个实现,除了你的老板(要投入更多的开发经费)和你的team(要干更多的活),是没有人有意见的。

如果您像我一样选择了SUN的参考实现,那么去SUN的网站上去下载一个JSF的开发包吧,如果不想下载,随便找一个ServerJavaADF的例子,在WEB-INF/lib目录里面有JSF的包,名为jsf-api.jar和jsf-impl.jar的两个包就是;注意那个JSP的标准标签库jstl.jar,把它跟jsf的包放在一起,你不一定用标准标签库,但是JSF用到了它。

我把JSF的doc放在这里给大家下载,因为这个东西实在不好找,有人知道好的下载URL,可以在这里贴一个。

把这些包放在一个webapplication的lib目录里面有,你的程序你可以使用JSF的强大功能了。

让我也来俗气一下,写一个简单的helloworld作为今天的结束吧。

注意在你的webapplication里面的web.xml配置文件添加了FaceServlet的声明和URI映射。

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<%@pagec%>

<%@tagliburi="prefix="f"%>

<%@tagliburi="prefix="h"%>

view>

</p><p>欢迎来到ArcGISServerADF世界</p><p>

formid="welcomeForm">

outputTextid="welcomeOutput"value="欢迎来到ArcGISServerJavaADF教程!

"style="color:

red;"/>

messageid="errors"for="helloInput"style="color:

red"/>

outputLabelfor="helloInput">

outputTextid="helloInputLabel"

value="123"/>

outputLabel>

form>

view>

保存后访问Http:

//servername:

port/faces/hello.jsp即可,如果页面能够出来,那么恭喜您,您已经迈入了JSFwonderland的大门。

3、ArcGISServerJavaADF开发的JSF知识介绍

ArcGISServer的JavaADF开发使用到了JSF的知识,下面结合ArcGISServer的开发,介绍一下JSF的知识

Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架。

首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。

在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:

在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为applicationevent,applicationevent和componentevent相比是一种粗粒度的事件。

struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。

而这种情况使用JSF就可以方便实现,

inputTextid="userId"value="#{login.userId}">

  

valueChangeListenertype="logindemo.UserLoginChanged"/>

inputText>

#{login.userId}表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name="login"property="userId"

关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(...)方法。

JSF可以为组件提供两种事件:

ValueChanged和Action.相当于struts中表单提交Action机制,它的JSF写法如下:

commandButtonid="login"commandName="login">

  

actionListenertype=”logindemo.LoginActionListener”/>

commandButton>

从代码可以看出,这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的,而Struts此类事件是原始的一种表单提交Submit触发机制。

如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单。

基本配置

Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。

JSF包下载地址:

Implementation。

JSTL包下载在http:

//jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。

上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了。

在ArcGISServer的项目下的lib目录下有相关的库文件如下:

commons-beanutils.jarcommons-collections.jarcommons-digester.jarcommons-lang-2.0.jarcommons-logging.jarjsf-api.jarjsf-impl.jarjstl.jarstandard.jar

与Struts的驱动包一样,这些驱动包必须位于Web项目的WEB-INF/lib,和Struts一样的是也必须在web.xml中有如下配置:

  

    FacesServlet

    javax.faces.webapp.FacesServlet

    1

  

  

    FacesServlet

    *.faces

  

这里和Struts的web.xml配置相似,简直一模一样。

正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件:

  

    /index.jsp

    

      login

      /welcome.jsp

    

  

  

    user

    com.corejsf.UserBean

    session

  

在Struts-config.xml中有ActionFormAction以及Jsp之间的流程关系,在faces-config.xml中,也有这样的流程,我们具体解释一下Navigation:

举例:

如果在mapviewer.jsp中有一个事件:

commandButtonlabel="Login"action="login"/>

action的值必须匹配form-outcome值,上述Navigation配置表示:

如果在index.jsp中有一个login事件,那么事件触发后下一个页面将是welcome.jsp

JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。

UI界面

JSF和Struts一样,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2