- 浏览: 1153969 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
冷酷月光:
楼主。请教一下。arcgis for android 有提供地 ...
ArcGIS API For Android离线地图的实现 -
winney117:
请问如何GET已有网页上的指定内容?比如百度文库中的某一篇文章 ...
三步发布java方式的rest服务 -
zige1012:
您好,我想问问我想换个自己地图的切片,也有4层(L0-L3), ...
ArcGIS API For Android离线地图的实现
阅读后发现有些地方和帮助文档不符合,我用的是9.2版本,红色
在讲一些sample之前,我们来看看整个ADF的体系架构,ADF里面有大部分类是纯JAVA的。它是构建在JSF之上的,所以它严格地遵守JSF的规范,所有的Bean都放在faces-config.xml和web.xml这样的配置文件中。就讲讲这两个文件里面的配置;
Faces-config.xml文件中有如下配置:
这里定义了一个managed bean指向了WebSession的类,这个WebSession类实现了一个接口,这个接口是HttpSessionListener(帮助文档是实现的javax.servlet.http.HttpSessionBindingListener),看看这个接口的Javadoc吧;这个接口做两件事情:每当往Session中存入一个对象(setAttribute)或从Session中删除一个对象的时候,如果这个对象实现了此监听器接口,应用服务器将会自动调用接口相应的方法。你有机会在这两个方法里面做一些事情,最好的莫过于初始化存放在session中的变量。如果你一定要问我,Managed Bean的scope如果是session,那么在每个新session中,都会初始化这个managed bean,调用它的constructor,这样不是也可以实现managed bean地初始化么?如果你一定要这样写,也可以,但是系统的可扩展性很差啦。
在ADF中,如果我们写了一个类,并且希望这个类能够被ADF初始化,我们直接实现WebContextInitialize接口就可以了,ADF会自动初始化这个类,那么WebContextInitialize接口是什么呢?
首先,来看看我们的核心中的核心WebContext,ADF的广大Managed bean们都团结在WebContext里面;这个WebContext是这个Server ADF的容器。Context这个词翻译成上下文实在是不合适,我们还是叫它叫容器吧。
这个容器里面有什么?随便举个例子吧,它有很多的Attribute,比如有一个WebMap,所有容器里面的Attribute都需要实现一个接口,这个接口的名字叫做WebContextInitialize,这个伟大的接口有两个方法:init和destroy。看看这两个方法,我不说你都能想到它们是用来做什么的。初始化这个attribute,和销毁这个attribute。看个帮助里面的例子吧:
OK,这个attribute也将作为一个managed bean部署在faces-config.xml文件里面。这里引出的问题是,谁来调用这个init方法和destroy方法呢?对JSF来说,这两个只是普通的方法,JSF不会调用这两个方法来进行资源的初始化和释放。答案是WebContext来调用这些初始化和释放的方法,我们可以看WebContext的doc原文:
WebContext is responsible for making the callback methods implemented by the resources and attributes at appropriate junctures of the ADF application. The callback methods are declared in the WebContextInitialize, WebContextObserver and WebLifecycle interfaces.
原来是WebContext负责调用这三个接口的方法,初始化和释放资源。
我们看一下WebContext,发现它也是需要有人来初始化它的,那么WebContext是谁来负责的呢? 是WebSession。WebSession里面存放了所有的WebContext,并且保证这些WebContext们能够被正常的初始化和destroy,什么时候初始化,什么时候Destroy,当然由WebSession实现的,大名鼎鼎的HttpSessionBindingListener接口来实现,每次有一个用户访问或者用户退出时,该监听器会自动调用两个方法,用来初始化和摧毁WebContext。另外要说一句地时:一个session可以有多个webContext,你可以用getWebContexts()得到所有的WebContext。目前我们看到的所有的配置文件都只使用了一个WebContext,多个WebContext会使用在什么地方呢,这个问题大家先考虑一下,我在后面的讲座中会揭晓答案。
如果有多个用户访问时,就会产生多个并发用户,我们的Web Server会为每个用户都分配一个WebSession,这些Websession会放在哪里,答案是放在WebApplication中,我们打开faces-config.xml文件可以看到里面有一个webApplication的定义
再去看WebSesstion的定义,有指向esriWebApplication的引用。
现在的问题是谁,初始化了WebApplication,我们最原始也是最强大的武器了:ServletContextListener出马了,看web.xml中下面的顶定义,
ADFServletContextListener 实现ServletContextListener接口,ServletContextListener有两个方法:contextInitialized()和contextDestroyed(); 分别在web application启动的时候和结束的时候调用,你要是觉得好玩,可以写一个listener玩玩,我这里写一个简单的listener现现丑:
ESRI使用了ADFServletContextListener,它实现了ServletContextListener接口,用来启动和destroy WebApplication。看看Javadoc的原文吧:
The ADFServletContextListener initializes a WebApplication object and sets it as an attribute on the ServletContext. When the ServletContext is destroyed, it destroys the associated WebApplication and attempts to clean up all server hosted objects in the current thread.
This class must be registered as a listener-class (in the web.xml file) for the web application.
现在大家都明白了吧,整个调用过程。Servelt容器启动的时候,会发送启动消息给ADFServletContextListener,ADFServletContextListener负责创建WebApplication,WebApplication负责创建和存放WebSession,WebSession负责创建WebContext,WebContext负责创建所有的Attribute,对资源的使用等等。这一下大家都满意了吧。
补充:
1.HttpSessionListener:监听Http会话创建、销毁的信息,只要客户端与服务器直接建立了Http会话就会被监听到,比如一个客户端访问了Web应用的首页。 sessionCreated()和sessionDestroyed()
2.HttpSessionBindingListener:只有在实现了它的对象被绑定到属性或从会话属性中解除绑定时,才会触发该对象的valueBound()和valueUnboundy()方法,适用于记录某一用户的登录、注销动作
3.ServletContextListener:应用ServletContextListener接口,可以实现在web应用程序初始化时,自动运行一些初始化程序。contextDestroyed()和contextInitialized()
在讲一些sample之前,我们来看看整个ADF的体系架构,ADF里面有大部分类是纯JAVA的。它是构建在JSF之上的,所以它严格地遵守JSF的规范,所有的Bean都放在faces-config.xml和web.xml这样的配置文件中。就讲讲这两个文件里面的配置;
Faces-config.xml文件中有如下配置:
<managed-bean> <managed-bean-name>esriWebSession</managed-bean-name> <managed-bean-class>com.esri.adf.web.data.WebSession</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>webApplication</property-name> <value>#{esriWebApplication}</value> </managed-property> </managed-bean>
这里定义了一个managed bean指向了WebSession的类,这个WebSession类实现了一个接口,这个接口是HttpSessionListener(帮助文档是实现的javax.servlet.http.HttpSessionBindingListener),看看这个接口的Javadoc吧;这个接口做两件事情:每当往Session中存入一个对象(setAttribute)或从Session中删除一个对象的时候,如果这个对象实现了此监听器接口,应用服务器将会自动调用接口相应的方法。你有机会在这两个方法里面做一些事情,最好的莫过于初始化存放在session中的变量。如果你一定要问我,Managed Bean的scope如果是session,那么在每个新session中,都会初始化这个managed bean,调用它的constructor,这样不是也可以实现managed bean地初始化么?如果你一定要这样写,也可以,但是系统的可扩展性很差啦。
在ADF中,如果我们写了一个类,并且希望这个类能够被ADF初始化,我们直接实现WebContextInitialize接口就可以了,ADF会自动初始化这个类,那么WebContextInitialize接口是什么呢?
首先,来看看我们的核心中的核心WebContext,ADF的广大Managed bean们都团结在WebContext里面;这个WebContext是这个Server ADF的容器。Context这个词翻译成上下文实在是不合适,我们还是叫它叫容器吧。
这个容器里面有什么?随便举个例子吧,它有很多的Attribute,比如有一个WebMap,所有容器里面的Attribute都需要实现一个接口,这个接口的名字叫做WebContextInitialize,这个伟大的接口有两个方法:init和destroy。看看这两个方法,我不说你都能想到它们是用来做什么的。初始化这个attribute,和销毁这个attribute。看个帮助里面的例子吧:
public class MyAttribute implements WebContextInitialize { WebContext context; public void init(WebContext context) { this.context = context; //初始化其它资源或者变量 } public void destroy() { context = null; //释放其它资源 } }
OK,这个attribute也将作为一个managed bean部署在faces-config.xml文件里面。这里引出的问题是,谁来调用这个init方法和destroy方法呢?对JSF来说,这两个只是普通的方法,JSF不会调用这两个方法来进行资源的初始化和释放。答案是WebContext来调用这些初始化和释放的方法,我们可以看WebContext的doc原文:
WebContext is responsible for making the callback methods implemented by the resources and attributes at appropriate junctures of the ADF application. The callback methods are declared in the WebContextInitialize, WebContextObserver and WebLifecycle interfaces.
原来是WebContext负责调用这三个接口的方法,初始化和释放资源。
我们看一下WebContext,发现它也是需要有人来初始化它的,那么WebContext是谁来负责的呢? 是WebSession。WebSession里面存放了所有的WebContext,并且保证这些WebContext们能够被正常的初始化和destroy,什么时候初始化,什么时候Destroy,当然由WebSession实现的,大名鼎鼎的HttpSessionBindingListener接口来实现,每次有一个用户访问或者用户退出时,该监听器会自动调用两个方法,用来初始化和摧毁WebContext。另外要说一句地时:一个session可以有多个webContext,你可以用getWebContexts()得到所有的WebContext。目前我们看到的所有的配置文件都只使用了一个WebContext,多个WebContext会使用在什么地方呢,这个问题大家先考虑一下,我在后面的讲座中会揭晓答案。
如果有多个用户访问时,就会产生多个并发用户,我们的Web Server会为每个用户都分配一个WebSession,这些Websession会放在哪里,答案是放在WebApplication中,我们打开faces-config.xml文件可以看到里面有一个webApplication的定义
<referenced-bean> <referenced-bean-name>esriWebApplication</referenced-bean-name> <referenced-bean-class>com.esri.adf.web.data.WebApplication</referenced-bean-class> </referenced-bean>
再去看WebSesstion的定义,有指向esriWebApplication的引用。
现在的问题是谁,初始化了WebApplication,我们最原始也是最强大的武器了:ServletContextListener出马了,看web.xml中下面的顶定义,
<listener> <listener-class>com.esri.adf.web.util.ADFServletContextListener</listener-class> </listener>
ADFServletContextListener 实现ServletContextListener接口,ServletContextListener有两个方法:contextInitialized()和contextDestroyed(); 分别在web application启动的时候和结束的时候调用,你要是觉得好玩,可以写一个listener玩玩,我这里写一个简单的listener现现丑:
public class ScheduleListener implements ServletContextListener { public void contextInitialized(ServletContextEvent arg0) { System.out.println("context object inited."); } public void contextDestroyed(ServletContextEvent arg0) { System.out.println("context object destroyed."); } }
ESRI使用了ADFServletContextListener,它实现了ServletContextListener接口,用来启动和destroy WebApplication。看看Javadoc的原文吧:
The ADFServletContextListener initializes a WebApplication object and sets it as an attribute on the ServletContext. When the ServletContext is destroyed, it destroys the associated WebApplication and attempts to clean up all server hosted objects in the current thread.
This class must be registered as a listener-class (in the web.xml file) for the web application.
现在大家都明白了吧,整个调用过程。Servelt容器启动的时候,会发送启动消息给ADFServletContextListener,ADFServletContextListener负责创建WebApplication,WebApplication负责创建和存放WebSession,WebSession负责创建WebContext,WebContext负责创建所有的Attribute,对资源的使用等等。这一下大家都满意了吧。
补充:
1.HttpSessionListener:监听Http会话创建、销毁的信息,只要客户端与服务器直接建立了Http会话就会被监听到,比如一个客户端访问了Web应用的首页。 sessionCreated()和sessionDestroyed()
2.HttpSessionBindingListener:只有在实现了它的对象被绑定到属性或从会话属性中解除绑定时,才会触发该对象的valueBound()和valueUnboundy()方法,适用于记录某一用户的登录、注销动作
3.ServletContextListener:应用ServletContextListener接口,可以实现在web应用程序初始化时,自动运行一些初始化程序。contextDestroyed()和contextInitialized()
发表评论
-
ArcGIS Server 导出地图图片(SOAP)
2011-03-22 17:40 3649package com.esri.arcgis.sampl ... -
ArcGIS Server 集群的问题
2010-12-06 14:49 1822今天在服务器做了一个ArcGIS Server的集群部署加测试 ... -
Server For Flex API在线编辑移动图片符号
2010-11-18 21:57 2128当在点击事件中,用edit工具移动图片(Picture ... -
ArcGIS Server动态读取图层样式(Flex版)
2010-10-26 22:36 5262最近遇到很多人问这类的问题,在ArcGIS10的rest接口已 ... -
Web地图设计模式——ArcGIS Server
2010-06-07 12:54 3174Web地图通常包含底图(提供影像和位置信息)和功能性的专题图层 ... -
Arcgis Server+Asp.net(C#)的唯一值渲染
2010-05-27 23:55 3875#region "唯一值渲染" // ... -
Arcgis server的池化和非池化
2010-05-27 23:52 2026ServerObject的池化和非池 ... -
AO批量处理的经验之谈
2010-02-08 21:37 2434往Personal GDB或SDE GDB中写入要素记录是一件 ... -
任务管理器中arcsom.exe和arcsoc.exe的个数问题
2010-01-22 13:28 1806安装了ArcGIS Server的机器,当打开任务管理器的时候 ... -
ArcGIS空间查询算子
2010-01-20 19:19 25911. Intersect 定义:相交查询算子 ... -
ArcGIS Server的切图原理深入
2009-12-12 11:06 2715GoogleMap,VirtualEarth,YahooMap ... -
关于cache文件格式的选择:png8,png24,png32 or jpeg
2009-11-04 20:56 2557关于如何合理的选择缓存图片的格式: ... -
基于ArcGIS Server对ShapeFile文件的编辑功能实现
2009-05-13 16:46 4198public class PointEdit { ... -
ArcGIS server 常见问题
2009-05-11 13:13 27474更多问题详见:http://www ... -
Attachment support is disabled解决方案
2009-03-08 21:47 6461Unable to find required classes ... -
Ajax Integration and Support in the ArcGIS Java We
2009-03-08 21:34 2033http://edndoc.esri.com/arcobjec ... -
Server Java开发--Born for SOA系列 整理中。。。
2009-02-16 10:36 2128Server Java开发--Born for SOA系列 前 ... -
空间查询及属性文本查询的代码
2009-02-10 13:05 5052package com.esri.adf.web; ... -
ArcGIS Server 专题图的实现
2009-02-09 14:48 7241测试完毕.地图服务是用ArcGis自带的USA.mxd.还留有 ... -
Server Java讲座--动态添加图层数据
2009-02-05 11:46 2352有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中 ...
相关推荐
8、 ArcGIS Server Java 讲座--ADF 体系结构 第一部分 21 9、ArcGIS Server JAVA讲座--实现后台JSF Bean和前台Javascript的联动 24 10、ArcGIS Server JAVA讲座 --AJAX基础 25 11、ArcGIS Server JAVA开发讲座--- ...
它利用了一组标准化的JSF(JavaServer Faces)控件以及任务和Web程序模板,极大地简化了GIS Web应用程序的开发过程。 #### Web ADF 的主要组成部分 - **JSF 基础**:Web ADF 建立在 JSF 这个成熟的 Java Web 开发...
- **JSP:**了解如何使用JavaServer Pages进行Web页面开发。 - **Servlets:**掌握Servlets的基础知识及其在Web应用中的作用。 - **其他相关技术:**如JavaBeans等。 **2. Web应用服务器开发** - **应用开发:**...
- **map.jsp**:这是一个JSP(JavaServer Pages)文件,包含了用于渲染地图应用的JSP标签,如地图、目录(TOC)和地图工具。这些标签与faces-config.xml中定义的数据源关联。 在Java ADF应用中,Web控件和Managed-...
通过Java ADF开发和部署ArcGIS Server应用 ArcGIS Server Java API Web 控件和模版 Web Services 开发中的重要概念 进一步开发 总结
《ArcGIS Server JAVA ADF开发和部署》是一个深入探讨地理信息系统(GIS)技术与Java应用程序开发框架ADF(Application Development Framework)结合使用的主题。ArcGIS Server是Esri公司的一款强大的地理空间服务...
- **JSF(JavaServer Faces)**:作为ADF的核心技术之一,JSF提供了丰富的UI组件库,简化了Web应用的开发过程。ADF选择了JSF作为其主要的用户界面框架,利用其MVC架构模式,实现了业务逻辑与用户界面的分离,提高了...
讲座涵盖了JSF的基础知识、开发初步以及ADF(ArcGIS Desktop Framework)体系结构,并强调了JSF在SOA(面向服务架构)中的角色。 首先,JSF作为Java的一种Web应用程序框架,被ESRI选中是因为它提供的组件化和事件...
【ArcGIS Server Java 讲座】是一系列关于使用Java技术进行ArcGIS Server开发的文档,主要针对的是ArcGIS Server 9.2版本。这个讲座涵盖了多个主题,旨在帮助开发者理解和应用Java Server Faces (JSF) 技术以及...
- 讲座介绍了如何在ArcGIS Server Java ADF (Application Development Framework)环境中使用JSF,这包括理解ADF体系结构以及实现JSF Bean和JavaScript的联动,以实现前后端的数据交互。 5. **AJAX支持**: - 讲座...
ArcGIS Server .Net Web ADF(ArcGIS Desktop Applications Framework)体系结构是Esri公司提供的一种用于构建地理信息系统(GIS)Web应用程序的技术。该框架允许开发人员利用.NET Framework的强大功能,结合GIS服务...
- **ADF选择JSF的原因**:ADF(Application Development Framework)之所以选择JSF(JavaServer Faces)作为其前端技术栈的一部分,主要是因为JSF提供了一套强大的用户界面组件库以及一套易于使用的模型视图控制器...
ESRI选择JavaServer Faces(JSF)作为ADF的基础框架,这可能与JSF的特性及其社区的活跃程度有关。JSF是Sun Microsystems推出的一个用于构建Web应用的Java框架,它被设计为易于使用,并且与Java EE(Java Platform, ...
2. **View**:ADF视图层主要由JSF(JavaServer Faces)组件构成,提供了丰富的用户界面元素。开发者可以通过拖拽和配置的方式创建页面,减少了编写HTML和JavaScript的工作量。 3. **Controller**:ADF控制器层负责...
Java ADF 开发入门 - 简单 ArcGIS Server Web ADF 应用程序的主要目标是指导开发者快速构建一个简单的 Web 地图应用程序,展示了 ArcGIS Server 的基本功能和 ADF 框架的使用方法。 在本教程中,我们将从创建一个...
综上所述,这份“1234-aadfq-adf-adfa.pdf”文档,尽管在结构化和图示清晰度上有待改进,但它提供的高清内容使得对Tomcat的深入学习成为可能,特别是对于那些希望了解Tomcat工作原理的开发者来说,是一份宝贵的参考...