- 浏览: 1160685 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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 3694package com.esri.arcgis.sampl ... -
ArcGIS Server 集群的问题
2010-12-06 14:49 1870今天在服务器做了一个ArcGIS Server的集群部署加测试 ... -
Server For Flex API在线编辑移动图片符号
2010-11-18 21:57 2170当在点击事件中,用edit工具移动图片(Picture ... -
ArcGIS Server动态读取图层样式(Flex版)
2010-10-26 22:36 5287最近遇到很多人问这类的问题,在ArcGIS10的rest接口已 ... -
Web地图设计模式——ArcGIS Server
2010-06-07 12:54 3203Web地图通常包含底图(提供影像和位置信息)和功能性的专题图层 ... -
Arcgis Server+Asp.net(C#)的唯一值渲染
2010-05-27 23:55 3905#region "唯一值渲染" // ... -
Arcgis server的池化和非池化
2010-05-27 23:52 2055ServerObject的池化和非池 ... -
AO批量处理的经验之谈
2010-02-08 21:37 2450往Personal GDB或SDE GDB中写入要素记录是一件 ... -
任务管理器中arcsom.exe和arcsoc.exe的个数问题
2010-01-22 13:28 1824安装了ArcGIS Server的机器,当打开任务管理器的时候 ... -
ArcGIS空间查询算子
2010-01-20 19:19 26181. Intersect 定义:相交查询算子 ... -
ArcGIS Server的切图原理深入
2009-12-12 11:06 2726GoogleMap,VirtualEarth,YahooMap ... -
关于cache文件格式的选择:png8,png24,png32 or jpeg
2009-11-04 20:56 2584关于如何合理的选择缓存图片的格式: ... -
基于ArcGIS Server对ShapeFile文件的编辑功能实现
2009-05-13 16:46 4222public class PointEdit { ... -
ArcGIS server 常见问题
2009-05-11 13:13 27530更多问题详见:http://www ... -
Attachment support is disabled解决方案
2009-03-08 21:47 6481Unable to find required classes ... -
Ajax Integration and Support in the ArcGIS Java We
2009-03-08 21:34 2056http://edndoc.esri.com/arcobjec ... -
Server Java开发--Born for SOA系列 整理中。。。
2009-02-16 10:36 2148Server Java开发--Born for SOA系列 前 ... -
空间查询及属性文本查询的代码
2009-02-10 13:05 5088package com.esri.adf.web; ... -
ArcGIS Server 专题图的实现
2009-02-09 14:48 7270测试完毕.地图服务是用ArcGis自带的USA.mxd.还留有 ... -
Server Java讲座--动态添加图层数据
2009-02-05 11:46 2383有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中 ...
相关推荐
8、 ArcGIS Server Java 讲座--ADF 体系结构 第一部分 21 9、ArcGIS Server JAVA讲座--实现后台JSF Bean和前台Javascript的联动 24 10、ArcGIS Server JAVA讲座 --AJAX基础 25 11、ArcGIS Server JAVA开发讲座--- ...
**开发环境的搭建** 是学习 ArcGIS Server 开发的第一步,主要包括以下步骤: 1. **安装 Eclipse**: - 推荐使用 Eclipse 3.3 和 WTP 2.0.*,并确保 JDK 版本在 1.5 以上。 - 可以从官方网站下载:...
内容概要:本文详细介绍了基于TMS320F系列芯片的C2000串口读写方案及其编程器——FlashPro2000的功能特点和支持的接口模式。文中不仅涵盖了硬件连接的具体步骤,还提供了代码实例来展示Flash擦除操作,并对比了JTAG和SCI-BOOT两种模式的优缺点。此外,针对不同型号的C2000系列芯片,给出了详细的适配指导以及避免烧录过程中可能出现的问题的方法。 适合人群:从事DSP开发的技术人员,尤其是对TI公司C2000系列芯片有一定了解并希望深入了解其编程和烧录细节的人群。 使用场景及目标:适用于实验室环境下的程序调试阶段,以及生产线上的批量烧录任务。主要目的是帮助开发者选择合适的编程工具和技术手段,提高工作效率,减少因误操作导致设备损坏的风险。 其他说明:文中提供的代码片段和命令行指令可以直接用于实际项目中,同时附带了一些实用技巧,如防止芯片变砖的小贴士和自动化重试脚本,有助于解决常见的烧录难题。
汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现大容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)不等的存储空间 - 国标GB2312-80包含6763个汉字,需要较大存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit
测控装备干扰源快速侦测系统设计研究.pdf
嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip
嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip
少儿编程scratch项目源代码文件案例素材-空间站.zip
基于关联规则的商业银行个性化产品推荐.pdf
嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip
内容概要:本文详细介绍了利用MATLAB进行轴棱锥生成贝塞尔高斯光束及环形光束光强图像的仿真研究。首先阐述了实验的背景与目标,强调了MATLAB在光学和计算科学领域的广泛应用。接着,具体描述了实验的方法与步骤,包括材料准备、仿真过程中的参数设定和光束生成代码编写。最后,对实验结果进行了深入分析,展示了贝塞尔高斯光束和环形光束的光强分布特点,验证了其光学性能的预期表现。文章还对未来的研究方向和技术改进提出了展望。 适合人群:从事光学、物理学及相关领域研究的专业人士,特别是对光束生成和光学性能分析感兴趣的科研工作者。 使用场景及目标:适用于需要进行光束生成和性能分析的实验室环境,旨在帮助研究人员更好地理解和优化光束特性和传播行为。 其他说明:本文不仅提供了详细的实验方法和步骤,还附有丰富的实验结果和数据分析,为后续研究提供了宝贵的参考资料。
内容概要:本文探讨了三电平NPC型有源电力滤波器(APF)的模型预测控制(MPC)中存在的开关频率过高问题及其解决方案。传统MPC方法会导致极高的开关频率,增加了系统的能耗和热量。通过引入滞环控制模块,可以在不大幅牺牲性能的情况下有效降低开关频率。具体来说,滞环控制通过在价值函数计算后增加一个判断条件,对状态切换进行惩罚,从而减少不必要的开关动作。实验结果显示,开关频率从4392Hz降至3242Hz,降幅达26.2%,虽然电流总谐波畸变率(THD)略有上升,但仍符合国家标准。此外,文中还提出了动态调整滞环宽度的方法,以进一步优化不同负载条件下的表现。 适合人群:从事电力电子、电力系统控制领域的研究人员和技术人员,特别是关注APF和MPC技术的人群。 使用场景及目标:适用于需要优化APF系统开关频率的研究和工程项目,旨在提高系统效率并降低成本。目标是在不影响系统性能的前提下,显著降低开关频率,减少能量损失和热管理难度。 其他说明:文章不仅提供了理论分析,还包括具体的实现代码片段,有助于读者理解和实践。同时,强调了在实际应用中需要注意的问题,如中点电位漂移等。
内容概要:本文介绍了三维POD DMD程序在处理原网格数据方面的独特优势和技术细节。首先阐述了该程序能读取结构化和非结构化网格数据及其拓扑关系,在生成模态数据过程中保持原始网格形态而不需要进行网格插值操作。接着展示了简化版本的Python代码片段,揭示了读取网格数据和生成模态数据的核心逻辑。最后提到提供的辅助学习资料如代码、视频教程、Word教程和实例数据,帮助用户深入理解并掌握该程序的应用。 适合人群:从事计算流体力学领域的研究人员和技术爱好者,尤其是那些希望提高数据处理效率的人群。 使用场景及目标:适用于需要处理复杂网格数据的研究项目,旨在简化数据处理流程,提升工作效率,同时保持数据的原始特性。 其他说明:文中不仅提供了理论性的讲解,还有具体的代码示例和丰富的学习资源,使读者可以边学边练,快速上手。
融合双向路由注意力的多尺度X光违禁品检测.pdf
嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip
嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip
基于LWR问题的无证书全同态加密方案.pdf
嵌入式八股文面试题库资料知识宝典-符坤面试经验.zip