自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (289)
  • 收藏
  • 关注

原创 使用fusioncharts实现数据库的动态数据交互.zip

使用fusioncharts实现数据库的动态数据交互.zip

2011-12-05 23:30:13 144

原创 jfreechart-1.0.12.jar 与jfreechart-1.0.0.jarBarRenderer

jfreechart-1.0.12.jar 与jfreechart-1.0.0.jarBarRendererjfreechart-1.0.12.jar 与jfreechart-1.0.0.jarBarRenderer

2011-11-18 19:12:59 296

原创 jfreechart柱状图

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; i...

2011-11-17 22:51:47 95

原创 一个日期的扩展函数库包括计算周次和本周时间范围(javascript)

< type="text/javascript"> // /*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/String.prototype.createDate = function(){var regThree = /^\D*(\d{2,4})\D+(\d{1,2})\D+(\d{1,2})\D*$/;var regSix = /^\D...

2011-08-23 23:19:58 157

原创 JavaScript日期操作(周,月,季度,年)

2011-08-23 22:41:56 484

原创 子网掩码计算器java源码

/** @author 卢伟* @version 1.0 2008-03-06* */import java.awt.Cursor;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionList...

2011-06-02 23:56:17 879

原创 JS的split函数用法

1. 2.function spli(){ 3. datastr="2,2,3,5,6,6"; 4. var str= new Array(); 5. 6. str=datastr.split(","); 7. for (i=0;i

2011-04-25 22:34:25 150

原创 纯CSS级联菜单

<br />测试浏览器:IE6、IE7、IE8、FF3.0。效果如下: 具体代码如下: !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlns=http://www.w3.org/1999/xhtml HTML HEAD TITLE New Docu测试浏览器:IE6、IE7、IE8、FF3.0。效果如下:<br

2011-01-19 15:30:00 569

转载 常用css总结

1、只有下划线的文本框: input style=border:0;border-bottom:1 solid black;background:; 2、软件序列号式的输入框: script for=T event=onkeyup if(value.length==3)document.all[event.srcElement.sourceIndex+1].select(); /script input name=T size=<br /> 1、只有下划线的文本框:<br /><input style="b

2011-01-19 14:44:00 410

原创 超酷的纯CSS,伪类图片浏览器实例

       鼠标停留在缩略图上,利用a:hover绝对定位了大图片。点击缩略图会利用a:active ,点击后大图片就固定到那里。非常巧妙的想法。CSS在国外研究的太深奥了。 此例子供大家学习和讨论。 style type=text/cssa, a:visited, a:hover {color:#000;}#container {posit<br />       鼠标停留在缩略图上,利用a:hover绝对定位了大图片。点击缩略图会利用a:active ,点击后大图片就固定到那里。非常巧妙的想法。CSS

2011-01-19 14:34:00 755

转载 Jquery Ajax 提交 级联实现

<br />页面代码:<br />显示代码打印<br />1 <div>  <br />2      <br />3       省份:<select id="province">  <br />4            <option value="">请选择省份</option>  <br />5         </select>  <br />6       城市:<select id="city">  <br />7         <option value="">请选择城市</option> 

2011-01-11 11:58:00 611

转载 struts的重复提交源码分析

开始一直都对这个重复提交的问题理解的都不是很好,就知道有几个方法用了就可以达到效果,之于这几个方法,为什么能够达到这个效果就不得而知了。 现在,对这几个方法回头整理一下,一下子就明白了。我用的是 struts 的令牌。 举例,以论坛留言来说明: 论坛发贴首先需要跳转到一个页面,你可以填写帖子的主题和内容,填写完后,单击“提交”,贴子就发表了,所以这里经过两个步骤: 第一个进入发帖页面: /Inse

2010-05-04 19:45:00 507

原创 Eclipse快捷键大全

Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+

2010-05-04 19:11:00 322

翻译 总结: 重复提交、重复刷新、防止后退的问题以及处理方式

一。前言你在任何一个比较专业的BBS都会看到这样的问题,即使你Google一下,也会发现有很多的人在关注和询问,但大家给出的解决方法却都是千差万别,(有的人主张采用脚本来解决;有的则想重定向到别的页面;有的则将此问题提升到Token的角度)为什么会有如此大的差异呢?二。问题场景首先,我们应该先了解为什么要处理这样的问题?或者专业一点就是它适合的场景是什么?(似乎只有人来问没有人来解释)1。重复提交

2010-05-04 19:08:00 483

转载 使用 Android 实现联网

Android 是面向应用程序开发的丰富平台,它提供一套出色的用户界面元素和数据管理功能。它还为开发连接到真实世界的应用程序提供了出色的网络选项。您希望连接到哪里?也许您希望告诉全世界您正在使用 Twitter。或者希望收到有关在本地洗衣店或熟食店的排号。如果希望将 Android 连接到您所生活的世界,那么请阅读本文。 简介本文建立在 “使用 Eclipse 开发 Android 应

2010-03-16 10:35:00 640

转载 J2ME手机移动通讯开发记录存储管理系统的例子

一个记录存储管理系统的例子在J2ME开发过程中,其中RMS很重要,可以存储手机本地的数据,我国现在的无线网络如GPRS、CDMA等还不稳定,而且覆盖面还不广泛,因而如果采用无线移动方式去开发移动应用系统,如交通、保险、烟草等行业的应用系统,在很多地方并不能在线进行数据交互,为了解决这一问题,采用C/S结构,而不采用B/S结构,在手机端开发客户端程序,通过网络传递数据,在信号不稳定的地方可将数据

2010-03-01 15:01:00 652

转载 dwr spring整合

Ajax,它使浏览器可以为用户提供更为自然的浏览体验,对于j2EE WEB开发人员来说,使用DWR框架可以很简单的使用Ajax技术.本文以一个DWR+SPRING的实例来说明DWR的使用1、将dwr.jar放到应用的/WEB-INF/lib目录下2、配置web.xml,增加如下代码:代码    context-param>           param-name>co

2010-02-04 10:58:00 312

转载 AJAX实践DWR篇

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(J

2010-02-04 10:40:00 401

原创 dwr reverse-ajax 实例解析

在网上找了一个老外写的dwr  reverse-ajax的例子,自己把coding顺序调整了一下希望可以对学习dwr reverse-ajax的朋友有所帮助1、首先要下载dwr 2.0 地址 http://getahead.org/dwr/download2、在web.xml中加入dwr的servlet和相关配置 dwr servlet-->  servlet>    servlet-name

2010-02-04 10:14:00 762 2

原创 JAVA中DWR开发项目实战经验

自己在公司网站开发总用DWR开发的一个简单聊天本人也是在网站开发地图时有到了这个技术,刚学习DWR半个月就把随手写的一个简单聊天来给大家共享,切磋一下。由于考虑到某些局部原因,只发表了一些重要技术方面的资料,没有把全部东西共享。请个人体谅。由于DWR2.0有个Bug ,我用的DWR1.0,但是,它必须用JDK1.4dwr.xml文件http://www.getahead.ltd.u

2010-02-04 09:36:00 490

翻译 DWR使用笔记

DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码。它的实现是基于ajax的,可以实现无刷新效果。     网上有不少DWR的例子,但大都只是某种方法的调用,本文只在使用层面上介绍DWR,并不涉更多的技术与设计,其目的是让初学者能够很快的学会各种java方法在javascript中是如何调用的。     本文以DWR 1

2010-02-04 09:25:00 376

转载 DWR实例教程

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(J

2010-02-03 14:15:00 312

转载 DWR学习

http://getahead.ltd.uk/dwr/ 这段时间较闲,研究了一番dwr.发现dwr实现的AJAX有些地方确实很是先进.比如动态生成javascript代码;隐藏的http协议;javascript于java代码交互的是javascript对象(或字符串)等. 以下是我临时译的一些东西.本来想全译,发现dwr实在是简单,就随便写了.英文居差,现一把. 1、DWR: Easy AJAX

2010-02-03 12:00:00 425

转载 告诉你最真实的招聘潜规则

以应聘外企为例,下面总结归纳了应聘外企面试时一般会提的10个问题,同时附上我们认为比较好的回答,或者说是我们希望你能这样来回答比较好,希望对大家有所帮助:    1、请介绍一下你自己。    这是外企常问的问题。一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,外企最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分

2010-02-01 18:38:00 396

转载 《软件随想录》:Joel Spolsky对计算机学生的七大建议

一 28我的七个建议作者: chenqiuge 分类:选题策划 阅读:1,666 次 添加评论作者:Joel Spolsky [编者按]       由于Joel Spolsky的双重身份(昔日耶鲁大学计算机系学长,今日Fog Creek软件公司的CEO),所以听听他的建议,对于当今无数困扰于就业压力的中国高校计算机专业学子来说,是大有裨益的。你们会发现,大多数建议,都在强调“软实力”的价值。

2010-01-28 20:44:00 490

转载 正视研发管理才是高水平竞争

文/欧阳璟种瓜得瓜,种豆得豆对今天很多中国软件企业来说,并不是开发人员没有事情可做,而是需要做的工作实在太多,根本无法满足这些企业业务的需求。然而不少公司都无法再投入更多的资源在研发上,例如花更多的钱来招聘更多程序员。上个月在CSDN的CTO俱乐部里,就有不少CTO在讨论这方面的问题,当然,冒头者多数是小型软件公司,只有二三十人的开发团队规模。然而,大公司同样面临这个问题。从某种意义上

2010-01-07 12:48:00 447

原创 从Spring实例入手谈SCA Component的创建和调用

面向服务组件的架构(Service Component Architecture,SCA),是目前业界最前沿的技术概念之一。但是对于很多开发人员来说,如何在SCA的架构上进行设计和开发还是显得相对抽象的。WID(WebSphere Integration Developer)和WPS(WebSphere Process Server)的推出,使得客户能够更加简单地向面向组件编程模型转变。本文将介绍

2010-01-06 16:17:00 848

转载 《人月神话》的故事版《观止》

 2009年08月25日 09:46   作者:阿丹    分类:专家观点   浏览: 4,578 次    在这里要推荐下《观止-微软创建NT和未来的夺命狂奔》,非常精彩,讲述了windows NT开发过程中的人和事。这不仅仅是故事书,也可以看做一本项目管理方面的指南,可以看看这么巨大的项目(几百万行代码)所遭遇到的难题和痛楚。我更愿意 将这本书当做《人月神话》的故事版,同样是创

2009-10-29 20:13:00 315

转载 七年之痒 解读奇怪却合理的技术人才市场格局

 2009年10月26日 09:56   作者:新浪博主 rebecca    分类:专家观点   浏览: 4,531 次    今年的十一假期很长,而且正赶上国家的六十年大庆,去哪里都不太方便,索性在家里休息,正好将前一段的工作好好整理整理。说实话,受全球金融危机的影响,今年整体IT企业招聘和之前呈现出很不同的状态,虽然招聘需求并没有减少,企业对技术人才的渴望依旧,求职的技术人才

2009-10-29 20:01:00 392

全球化最佳实践:开发 IBM Lotus Notes 应用程序(全球化)

俗话说预防胜过良药。根据多年的 Lotus Notes 全球化经验,我们了解到,Lotus Notes 全球化在设计和开发阶段最容易出现问题。本文介绍关于全球化的最佳实践,您可以使用它们开发良好的 Lotus Notes 应用程序。Lotus Notes 模板目前已被翻译为 27 种语言,本文展示我们在数年中开发 Lotus Notes 模板获得的经验,以及作为翻译团队成员获得的经验。 对许多客户而言,全球化 Lotus Notes 应用程序是一个挑战。Lotus Notes 应用程序中的代码和可翻译的字符串是合并在一起的。开发人员通常以一种语言开发 Lotus Notes 应用程序,然后使用 IBM Lotus Domino® Designer 客户端直接翻译字符串。结果是,每次更改或升级应用程序时,需要逐个语言更改数百个设计元素。处理变更、管理版本控制、升级设计和修复问题需要大量的工作。

2010-03-17

深入探讨 Android 传感器(源代码及文档)

我们介绍了 Android 传感器。样例应用程序度量了方向和加速,以及使用 MediaRecorder 类与录制功能进行交互。对于构建实际系统,Android 是一个灵活、有吸引力的平台。Android 领域发展迅速,并且不断壮大。请务必关注该平台。

2010-03-17

写一个定制的 Dojo 应用程序

我们最近刚刚完成了一个 Web 2.0 Dojo 原型的开发。这个原型十分宽泛,为信息管理提供了一个新的功能。我们还与用户体验团队协作以确保此应用程序可用。屏幕由一名图形 Web 设计人员设计,以使它们看上去更专业一些。 本文记录了我们进行此原型的 Web 2.0 开发的实际体验。由于 Web 2.0 相对来说是个比较新的技术,所以在需要时,开始使用和进行定制可能会较为困难。我们并没有为我们的 Dojo 应用程序使用开箱即用的外观。因为我们需要的是一致的图形设计以符合我们产品线的品牌效应。因此,我们必须使用 Dojo 进行定制。定制是绝大多数开发人员耗费时间最多的一项工作,对于那些不知道如何解决此问题的开发人员,更是如此。 由于本文的重点在于 Dojo 应用程序的定制,所以这里我们不对示例中出现的每个小部件属性做详细的描述。本文假设您对 Dojo 和 CSS 有一定的了解。本文中的示例所基于的是 Dojo 1.1.0( 测试这个 Dojo 应用程序 本地和远程 Web 2.0 应用程序使用 RESTful 服务来获得其信息。REST 是 REpresentational State Transfer 的缩写。它是 World Wide Web 所基于的架构模型。REST 的原理包括:以资源为中心、所有相关资源均使用 URI 寻址、使用 HTTP (GET、POST、PUT、DELETE)统一访问。我们希望能够在非连接的本地模式下进行测试。因此,我们将 RESTful 服务的结果保存到测试文件内,并创建了一个抽象方法来获得给定 REST 调用的 URL。 自动检测和交换的例子 此抽象借助 document.location.protocol 的 JavaScript 值来判断访问是本地的还是远程的,并返回正确的 URL。这可通过将这些本地测试文件放入类似于此服务器 URI 的一个目录结构实现。比如,对于 URI: myui/catalog/types on server http://<server>:<port>,我们只是将此 URI 置于本地的基础测试目录 <local-test-base-dir>/myui/catalog/types。根据访问是本地还是远程,只有此 URI 的基础部分需要更改。我们对配置对象 BASE_URL 属性的设置如下所示。 config.BASE_URL = (document.location.protocol=="file:") ? "data" : ".."; 总的来说,我们发现开始进行 Dojo 开发所需的学习曲线很少,这归功于 Dojo 工具箱以及 Dojo 社区提供的大量可用示例以及 Internet 上丰富的 JavaScript 信息。但是,作为 Java 开发人员,我们还是缺少强大的 IDE 支持、优秀的 API 文档、强类型缺乏、不同 Web 浏览器的不同运行时行为以及 JavaScript 开发的编译时检查。学习如何进行定制有时十分痛苦,并且通常定制的过程十分琐碎且容易出现错误。还好,当我们掌握了这些过程后,我们发现它们是可重复进行的。我们最终得到的原型是一个看起来很专业的应用程序,并且具备启用了 Ajax 的 Web 应用程序所应具备的所有性能优点。

2010-03-17

示例 iPhone 和 Google 应用程序引擎代码

App Engine 和 iPhone 开发综合在一起就形成了一种功能强大的工具,可用于编写和原型化移动应用程序。这个示例 Web 应用程序支持着一个小型的 iPhone 应用程序 Sonnet,这个小程序可从 Apple 的 Application Store 免费下载。综合 Google App Engine 和 iPhone 开发的强大之处在于可以使用 Python 快速原型化应用程序的某些部分,在这之前用 Objective-C 进行编码十分繁琐,另外这种综合也增强了(在线和离线)数据存储的灵活性。TouchEngine 汇集了各种优点于一身。借助 TouchEngine,混合应用程序的开发人员可以很容易地编写软件,实现在异步更新云数据的同时在 iPhone 上本地缓存数据。这就让应用程序既能迅速响应用户输入,同时又能在线维护数据以便及时更新。 iPhone 和 Google App Engine 开发人员社区均提供了丰富的资源,可用来加速开发。如果您对面向这两个平台的开发或综合两平台的特性(如本文所示)感兴趣,我们建议您详细阅读官方文档的相关内容。Google 和 Apple 均有很棒的书面教程,某些情况下,也都提供有基于视频的教程。Google App Engine 还在全球范围内举行了 “Hack-A-Thon” 活动,您不妨用 Google 查查,看在您所在地区是否有这样的活动。Apple 的 WWDC 会议也是面向 iPhone SDK 程序员的一个很有价值的资源。

2010-03-17

将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

现有的 Java EE 应用 假定我们已经拥有了一个管理雇员信息的 Java EE 应用,名为 EmployeeMgmt-Server,结构如 图 1 所示: 图 1. Java EE 工程结构 这是一个典型的 Java EE 应用,使用了流行的 Spring 框架。为了简化数据库操作,我们使用了内存数据库 HSQLDB。对这个简单的应用,省略了 DAO,直接在 Façade 中通过 Spring 的 JdbcTemplate 操作数据库。最后,EmployeeMgmt 应用通过 Servlet 和 JSP 页面为用户提供前端界面: 图 2. EmployeeMgmt Web 界面 该界面为传统的 HTML 页面,用户每次点击某个链接都需要刷新页面。由于 Employee Management 系统更接近于传统的桌面应用程序,因此,用 Flex 重新编写界面会带来更好的用户体验。 回页首 集成 BlazeDS 如何将 Flex 集成至该 Java EE 应用呢?现在,我们希望用 Flex 替换掉原有的 Servlet 和 JSP 页面,就需要让 Flex 和 Java EE 后端通信。Flex 支持多种远程调用方式,包括 HTTP,Web Services 和 AMF。不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。 BlazeDS 是 Adobe LifeCycle Data Services 的开源版本,遵循 LGPL v3 授权,可以免费使用。BlazeDS 为 Flex 提供了基于 AMF 二进制协议的远程调用支持,其作用相当于 Java 的 RMI。有了 BlazeDS,通过简单的配置,一个 Java 接口就可以作为服务暴露给 Flex,供其远程调用。 尽管现有的 EmployeeMgmt 应用程序已经有了 Façade 接口,但这个接口是暴露给 Servlet 使用的,最好能再为 Flex 定义另一个接口 FlexService,并隐藏 Java 语言的特定对象(如 清单 1 所示): 清单 1. FlexService interface public interface FlexService { Employee createEmployee(String name, String title, boolean gender, Date birth); void deleteEmployee(String id); Employee[] queryByName(String name); Employee[] queryAll(); } 现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public class FlexServiceImpl implements FlexService { private static final Employee[] EMPTY_EMPLOYEE_ARRAY = new Employee[0]; private Facade facade; public void setFacade(Facade facade) { this.facade = facade; } public Employee createEmployee(String name, String title, boolean gender, Date birth) { return facade.createEmployee(name, title, gender, birth); } public void deleteEmployee(String id) { facade.deleteEmployee(id); } public Employee[] queryAll() { return facade.queryAll().toArray(EMPTY_EMPLOYEE_ARRAY); } public Employee[] queryByName(String name) { return facade.queryByName(name).toArray(EMPTY_EMPLOYEE_ARRAY); } } 然后,我们将 BlazeDS 所需的 jar 包放至 /WEB-INF/lib/。BlazeDS 需要如下的 jar: 清单 3. BlazeDS 依赖的 Jar backport-util-concurrent.jar commons-httpclient.jar commons-logging.jar flex-messaging-common.jar flex-messaging-core.jar flex-messaging-proxy.jar flex-messaging-remoting.jar 在 web.xml 中添加 HttpFlexSession 和 Servlet 映射。HttpFlexSession 是 BlazeDS 提供的一个 Listener,负责监听 Flex 远程调用请求,并进行一些初始化设置: 清单 4. 定义 Flex Listener <listener> <listener-class>flex.messaging.HttpFlexSession</listener-class> </listener> MessageBrokerServlet 是真正处理 Flex 远程调用请求的 Servlet,我们需要将其映射到指定的 URL: 清单 5. 定义 Flex servlet <servlet> <servlet-name>messageBroker</servlet-name> <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> <init-param> <param-name>services.configuration.file</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>messageBroker</servlet-name> <url-pattern>/messagebroker/*</url-pattern> </servlet-mapping> BlazeDS 所需的所有配置文件均放在 /WEB-INF/flex/ 目录下。BlazeDS 将读取 services-config.xml 配置文件,该配置文件又引用了 remoting-config.xml、proxy-config.xml 和 messaging-config.xml 这 3 个配置文件,所以,一共需要 4 个配置文件。 由于 BlazeDS 需要将 Java 接口 FlexService 暴露给 Flex 前端,因此,我们在配置文件 remoting-config.xml 中将 FlexService 接口声明为一个服务: 清单 6. 定义 flexService 服务 <destination id="flexService"> <properties> <source>org.expressme.employee.mgmt.flex.FlexServiceImpl</source> <scope>application</scope> </properties> </destination> 服务名称通过 destination 的 id 属性指定,Flex 前端通过该服务名称来进行远程调用。scope 指定为 application,表示该对象是一个全局对象。 然而,按照默认的声明,BlazeDS 会去实例化 FlexService 对象。对于一个 Java EE 应用来说,通常这些服务对象都是被容器管理的(例如,Spring 容器或 EJB 容器),更合适的方法是查找该服务对象而非直接实例化。因此,需要告诉 BlazeDS 通过 Factory 来查找指定的 FlexService 对象,修改配置如下: 清单 7. 通过 factory 定义 flexService <destination id="flexService"> <properties> <factory>flexFactory</factory> <source>flexService</source> <scope>application</scope> </properties> </destination> 现在,Flex 如何才能通过 BlazeDS 调用 FlexService 接口呢?由于 FlexService 对象已经被 Spring 管理,因此,我们需要编写一个 FlexFactory 告诉 BlazeDS 如何找到 Spring 管理的 FlexService 的实例。flexFactory 在 services-config.xml 中指定: 清单 8. 定义 flexFactory <factories> <factory id="flexFactory" class="org.expressme.employee.mgmt.flex.FlexFactoryImpl"/> </factories> FlexFactoryImpl 实现了 FlexFactory 接口,该接口完成两件事情: 创建 FactoryInstance 对象; 通过 FactoryInstance 对象查找我们需要的 FlexService。 因此,需要一个 FactoryInstance 的实现类,我们编写一个 SpringFactoryInstance,以便从 Spring 的容器中查找 FlexService: 清单 9. SpringFactoryInstance class class SpringFactoryInstance extends FactoryInstance { private Log log = LogFactory.getLog(getClass()); SpringFactoryInstance(FlexFactory factory, String id, ConfigMap properties) { super(factory, id, properties); } public Object lookup() { ApplicationContext appContext = WebApplicationContextUtils. getRequiredWebApplicationContext( FlexContext.getServletConfig().getServletContext() ); String beanName = getSource(); try { log.info("Lookup bean from Spring ApplicationContext: " + beanName); return appContext.getBean(beanName); } catch (NoSuchBeanDefinitionException nex) { ... } catch (BeansException bex) { ... } catch (Exception ex) { ... } } } FlexFactoryImpl 负责实例化 SpringFactoryInstance 并通过 SpringFactoryInstance 的 lookup() 方法查找 FlexService 接口对象: 清单 10. FlexFactoryImpl class public class FlexFactoryImpl implements FlexFactory { private Log log = LogFactory.getLog(getClass()); public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { log.info("Create FactoryInstance."); SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties); instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId())); return instance; } public Object lookup(FactoryInstance instanceInfo) { log.info("Lookup service object."); return instanceInfo.lookup(); } public void initialize(String id, ConfigMap configMap) { } } 以下是 BlazeDS 查找 FlexService 接口的过程: BlazeDS 将首先创建 FlexFactory 的实例—— FlexFactoryImpl; 当接收到 Flex 前端的远程调用请求时,BlazeDS 通过 FlexFactory 创建 FactoryInstance 对象,并传入请求的 Service ID。在这个应用程序中,被创建的 FactoryInstance 实际对象是 SpringFactoryInstance; FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。 注意到 destination 的 id 并没有写死在代码中,而是通过以下语句获得的: 清单 11. 获取 destination 的 ID properties.getPropertyAsString(SOURCE, instance.getId()) Property 的 SOURCE 属性由 BlazeDS 读取 XML 配置文件获得: 清单 12. 配置 destination 的 id <destination id="flexService"> <properties> <factory>flexFactory</factory> <source>flexService</source> <scope>application</scope> </properties> </destination> 如果您没有使用 Spring 框架,也不要紧,只需修改 FactoryInstance 的 lookup() 方法。例如,对于一个 EJB 来说,lookup() 方法应该通过 JNDI 查找返回远程接口。无论应用程序结构如何,我们的最终目标是向 BlazeDS 返回一个 FlexService 的实例对象。 回页首 开发 Flex 客户端 首先安装 Flex Builder 3,可以在 Adobe 的官方网站获得 30 天免费试用版。然后,打开 Flex Builder 3,创建一个新的 Flex Project,命名为 EmployeeMgmt-Flex: 图 3. 新建 Flex 工程 - 第一步 Flex Project 需要指定 Server 端的配置文件地址: 图 4. 新建 Flex 工程 - 第二步 因此,需要填入 EmployeeMgmt-Server 项目的 web 根目录,该目录下必须要存在 /WEB-INF/flex/。点击“Validate Configuration”验证配置文件是否正确,只有通过验证后,才能继续。默认地,Flex Builder 将会把生成的 Flash 文件放到 EmployeeMgmt-Server 项目的 web/EmployeeMgmt-Flex-debug 目录下。 一个 Flex Project 的目录结构如下: 图 5. Flex 工程的目录结构 用 Flex Builder 做出漂亮的用户界面非常容易。Flex Builder 提供了一个可视化的编辑器,通过简单的拖拽,一个毫无经验的开发人员也能够设计出漂亮的布局。如果熟悉一点 XML 的知识,编辑 MXML 也并非难事。我们设计的 Employee Management 系统界面的最终效果如下: 图 6. 用 Flex Builder 的可视化编辑器设计界面 本文不打算讨论如何编写 Flex 界面,而是把重点放在如何实现远程调用。 为了能在 Flex 中实现远程调用,我们需要定义一个 RemoteObject 对象。可以通过 ActionScript 编码创建该对象,也可以直接在 MXML 中定义一个 RemoteObject 对象,并列出其所有的方法: 清单 13. 定义 flexServiceRO <mx:RemoteObject id="flexServiceRO" destination="flexService"> <mx:method name="queryAll" result="handleQueryAll(result : ResultEvent)"/> </mx:RemoteObject> 现在,就可以调用这个名为 flexServiceRO 的 RemoteObject 对象的方法了: 清单 14. 调用 FlexServiceRO.queryAll() flexServiceRO.queryAll(function(result : ResultEvent) { var employees = result.result as Array; }); 运行该 Flex Application,雇员信息已经被正确获取了: 图 7. 在浏览器中运行 Flex application 回页首 增强 RemoteObject 对象 通过 RemoteObject 进行调用虽然简单,但存在不少问题:首先,RemoteObject 是一个 Dynamic Class,Flex Builder 的编译器无法替我们检查参数类型和参数个数,这样,在编写 ActionScript 代码时极易出错。此外,接口变动时(这种情况常常发生),需要重新修改 RemoteObject 的定义。此外,Flex 团队需要一份随时修订的完整的 FlexService 接口文档才能工作。 因此,最好能使用强类型的 RemoteObject 接口,让 Flex Builder 的编译器及早发现错误。这个强类型的 RemoteObject 最好能通过 Java EE 应用的 FlexService 接口自动生成,这样,就无需再维护 RemoteObject 的定义。 为了能完成自动生成 RemoteObject 对象,我编写了一个 Java2ActionScript 的 Ant 任务来自动转换 FlexService 接口以及相关的所有 JavaBean。JavaInterface2RemoteObjectTask 完成一个 Java 接口对象到 RemoteObject 对象的转换。使用如下的 Ant 脚本: 清单 15. 生成 ActionScript class 的 Ant 脚本 <taskdef name="genactionscript" classname="org.expressme.ant.JavaBean2ActionScriptTask"> <classpath refid="build-classpath" /> </taskdef> <taskdef name="genremoteobject" classname="org.expressme.ant.JavaInterface2RemoteObjectTask"> <classpath refid="build-classpath" /> </taskdef> <genactionscript packageName="org.expressme.employee.mgmt" includes="Employee" orderByName="true" encoding="UTF-8" outputDir="${gen.dir}" /> <genremoteobject interfaceClass="org.expressme.employee.mgmt.flex.FlexService" encoding="UTF-8" outputDir="${gen.dir}" destination="flexService" /> 转换后的 FlexServiceRO 类拥有 Java 接口对应的所有方法,每个方法均为强类型签名,并添加额外的两个可选的函数处理 result 和 fault 事件。例如,queryByName 方法: 清单 16. 自动生成的 queryByName() 方法 public function queryByName(arg1 : String, result : Function = null, fault : Function = null) : void { var op : AbstractOperation = ro.getOperation("queryByName"); if (result!=null) { op.addEventListener(ResultEvent.RESULT, result); } if (fault!=null) { op.addEventListener(FaultEvent.FAULT, fault); } var f : Function = function() : void { op.removeEventListener(ResultEvent.RESULT, f); op.removeEventListener(FaultEvent.FAULT, f); if (result!=null) { op.removeEventListener(ResultEvent.RESULT, result); } if (fault!=null) { op.addEventListener(FaultEvent.FAULT, fault); } } op.addEventListener(ResultEvent.RESULT, f); op.addEventListener(FaultEvent.FAULT, f); op.send(arg1); } 转换 Java 接口是通过 Interface.as 和 InterfaceMethod.as 两个模板文件完成的,此外,所有在 Java EE 后端和 Flex 之间传递的 JavaBean 对象也通过 JavaBean2ActionScriptTask 自动转换成对应的 ActionScript 类,这是通过 Bean.as 模板完成的。 有了 Java 类到 ActionScript 的自动转换,我们在编写 ActionScript 时,就能享受到编译器检查和 ActionScript 类方法的自动提示了: 图 8. Flex Builder 的代码自动补全 唯一的缺憾是通过反射读取 FlexService 接口时,我们失去了方法的参数名称,因此,FlexServiceRO 的方法参数名只能变成 arg1,arg2 …… 等,要读取 FlexService 接口的方法参数名,只能通过解析 Java 源代码实现。 现在,Java EE 后端开发团队和 Flex 前端开发团队只需协商定义好 FlexService 接口,然后,利用 Java2ActionScript,Flex 团队就得到了强类型的 FlexServiceRO 类,而 Java EE 团队则只需集中精力实现 FlexService 接口。 在开发的前期,甚至可以用硬编码的 FlexService 的实现类。每当 FlexService 变动时,只需再次运行 Ant 脚本,就可以获得最新的 FlexServiceRO 类。这样,两个团队都可以立刻开始工作,仅需要通过 FlexService 接口就可以完美地协同开发。

2010-03-16

软件设计师教程 清华大学出版社 软考指定教程

软件设计师教程 清华大学出版社 软考指定教程 软件设计师教程 清华大学出版社 软考指定教程 软件设计师教程 清华大学出版社 软考指定教程

2010-03-11

信息系统监理师教程 清华大学出版社 软考指定用书

信息系统监理师教程 清华大学出版社 软考指定用书 信息系统监理师教程 清华大学出版社 软考指定用书 信息系统监理师教程 清华大学出版社 软考指定用书

2010-03-11

JavaScript 权威指南(第四版).

JavaScript 权威指南(第四版). JavaScript 权威指南(第四版).

2010-03-04

软件测试与质量保证(Testing&SQA)

软件测试与质量保证(Testing&SQA) 软件测试与质量保证(Testing&SQA) 软件测试与质量保证(Testing&SQA)

2010-03-04

Java测试与设计.从单元测试到自动Web测试

Java测试与设计.从单元测试到自动Web测试 Java测试与设计.从单元测试到自动Web测试 Java测试与设计.从单元测试到自动Web测试

2010-03-04

软件测试与Junit实践

软件测试与Junit实践 软件测试与Junit实践 软件测试与Junit实践

2010-03-04

eclipseme j2me手机开发官方最新插件

eclipseme j2me手机开发官方最新插件 eclipseme j2me手机开发官方最新插件 eclipseme j2me手机开发官方最新插件

2010-03-04

J2ME手机移动无线开发最新开发包 WTK Java(TM) Wireless Toolkit 2.5

J2ME WTK的内容和目录结构   2.1 安装过程   在说明WTK文件结构之前,让我们首先把它安装起来。   WTK的安装程序与普通程序一样简单,只有一点需要注意,由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK(我们这里选用的是JDK1.4.2)。   WTK会首先自动检测当前系统已有的Java虚拟机:   然后显示出当前虚拟机所在路径   您在确定无误后,就可以继续了,最后安装成功后,您将得到一个包括多种实用工具的开发包。以下是安装显示的菜单项。   2.2 目录结构   无论哪个版本的WTK都会包括以下几个目录:   appdb目录: RMS数据库信息   apps目录: WTK自带的demo程序   bin目录: J2ME开发工具执行文件   docs目录: 各种帮助与说明文件   lib目录: J2ME程序库,Jar包与控制文件   session目录:性能监控保存信息   wtklib目录: JWTK主程序与模拟器外观   WTK是用来开发MIDP的,为了让MIDlet可以顺利编译和执行,WTK必须具有CLDC和MIDP的类库,WTK可以帮助我们省去额外安装调试这些类库的时间。而不同版本的WTK包含的程序库内容是不一样的,比如说2.0中包含了midpapi.jar, wma.jar, mmapi.jar,而在2.1中则变为了cldcapi10. jar, cldcapi11.jar, midpapi10.jar, midpapi20.jar, wma.jar以及mmapi.jar;在2.2中,wma.jar又细分为wma11.jar, wma20.jar。如果您在开发中需要某个特定的jar包而当前的WTK版本又没有时,您可以简单把这个jar包拷贝如当前WTK的lib文件夹即可。   apps目录中包括了许多Demo程序,为我们演示了J2ME的一些技术实例,这些往往是很好的学习材料。

2010-03-04

权限管理系统(Struts+Hibernate+Sql2000)

权限管理系统(Struts+Hibernate+Sql2000) 权限管理系统(Struts+Hibernate+Sql2000) 权限管理系统(Struts+Hibernate+Sql2000)

2010-02-10

J2ME手机移动开发大全(资料全面)

J2ME手机移动开发大全(资料全面) J2ME手机移动开发大全(资料全面) J2ME手机移动开发大全(资料全面)

2010-02-10

dwr实现实时刷新实例

dwr实现实时刷新实例 dwr实现实时刷新实例

2010-02-02

Dwr 完整实例-------

Dwr完整实例 Dwr完整实例 Dwr完整实例

2010-02-02

dwr-Ajax框架开发所需的最新Jar包及源码和实例

dwr-Ajax框架开发所需的最新Jar包及源码和实例 dwr-Ajax框架开发所需的最新Jar包及源码和实例

2010-02-02

dwr官方最新war包(经典实例)

放到TomCat服务器的webapps目录下就可以运行 dwr官方最新war包(经典实例) dwr官方最新war包(经典实例) dwr官方最新war包(经典实例)

2010-02-02

Ajax+Struts应用(完整源码)

Ajax+Struts应用(完整源码) Ajax+Struts应用(完整源码) Ajax+Struts应用(完整源码)

2010-01-30

Git-2.23.0-64-bit最新版64位

Git-2.23.0-64-bit最新版64位 常用命令如下: git config --global user.name “xxxx” 设置用户名 git config --global user.email “xxxx” 设置邮箱 git config user.name 查看用户名 git config user.email 查看邮箱 git config --global user.name “xxxx” 修改用户名 git config --global user.email "[email protected]" 修改邮箱

2019-10-19

java实现图片转pdf文件

参考大家学习,使用步骤和例子,压缩包中有,可以将大量图片转成pdf文件,用扫描仪扫到的图片转成pdf必用

2014-02-21

Oracle集群数据库最佳应用架构及实现

Oracle集群数据库最佳应用架构及实现 Oracle集群数据库最佳应用架构及实现 Oracle集群数据库最佳应用架构及实现

2010-08-11

人力资源管理系统(需求技术项目开发文档)

人力资源管理系统(需求技术项目开发文档). 人力资源管理系统(需求技术项目开发文档).

2010-06-21

大学图书管理系统(j2EE)

大学图书管理系统(j2EE) 大学图书管理系统(j2EE)

2010-06-21

SSO(单点登录) 技术的实现

SSO(单点登录) 技术的实现 SSO(单点登录) 技术的实现

2010-06-21

数据结构试题大全 ----

数据结构试题大全 数据结构试题大全 数据结构试题大全

2010-05-21

DebugBar最新版

DebugBar是一款Internet Explorer插件。它可以用于检查DOM,HTTP,Javascript及HTML代码合法性等。

2010-05-05

IEWebDeveloper

一款用于IE浏览器的插件,允许直接地在浏览器窗口中浏览、传输和更新HTML DOM。该软件可以实时分析网页并且显示为一种允许你察看表格风格、Java脚本,表格以及其它网页元素的树形风格。该软件还可以在浏览器中交互式地突出显示被选择的网页元素,因此你可以在实际网页中定位其代码。

2010-05-05

IEtester 最新绿色版

FirebugHTML查看和编辑、Javascript控制台、网络状况监视于一体,可以说是开发人员必备扩展之一。Firebug从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。

2010-05-05

Firebug最新版

FirebugHTML查看和编辑、Javascript控制台、网络状况监视于一体,可以说是开发人员必备扩展之一。Firebug从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。

2010-05-05

IETester 官方最新版下载 V0.4.3 支持WIN7 支持IE9 完全排除崩溃

IETester 最新版下载 V0.4.3 支持WIN7 支持IE9 完全排除崩溃 马上下载 IEtesterV0.4.3中文版 – 调试IE6,IE7,IE8,IE9的CSS兼容性的免费工具 IETester可模拟出不同的IE引擎来帮助设计师兼容css代码 ietester.org

2010-05-05

JQuery实战:标签页效果

JQuery实战:标签页效果 JQuery实战:标签页效果

2010-04-23

JQuery实战:横向纵向菜单

JQuery实战:横向纵向菜单 JQuery实战:横向纵向菜单

2010-04-23

JQuery实战:可以编辑的表格

JQuery实战:可以编辑的表格 JQuery实战:可以编辑的表格

2010-04-23

Struts2.x 项目实战

Struts2.x 项目实战 Struts2.x 项目实战 Struts2.x 项目实战

2010-04-23

JQuery实战视频教程

JQuery实战视频教程SRC&amp;PPT JQuery实战视频教程SRC&amp;PPT JQuery实战视频教程SRC&amp;PPT

2010-04-16

官方最新的MySQL 5.1.45 GA数据库下载

该版本升级 InnoDB 插件到 1.0.6 版本,目前 1.0.6 版本的 InnoDB 的质量差不多是 RC 候选发行级别的。另外一些命令行工具各自增加了一些参数选项,详情请看这里。MySQL是一个开放源码的关系数据库管理系统,开发者为瑞典MySQL AB公司,现为Sun公司的一部分。 2009年Oracle宣布收购Sun公司,因此MySQL可能成为Oracle旗下产品。MySQL由于性能高、成 本低、可靠性好,已经成为最流行的开源数据库,被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站 和应用,比如维基百科、Google和Facebook。非常流行的开源软件组合LAMP中的M就是指 MySQL。

2010-03-22

DB2 性能优化快速入门

本文是针对 DB2® Universal Database(DB2 UDB)的初学者在遇到 DB2 的性能问题的时候不知道从何分析,从何入手的这一问题,从 DB2 的体系结构介绍开始,由浅入深的讲述了 DB2 性能优化的一些基础知识,简单地介绍调优的原理和工具。同时针对性能上的一些典型问题,如 DML 性能问题 ( 查询和插入操作 ), DDL 性能问题(建表,建索引),并发性问题等等,介绍一种渐进的分析方法,同时结合一些具体的优化案例进行分析以及成型的 DB2 调优工具 (DB2 Performance Expert) 的介绍,使得初学者能够在很短的时间内掌握 DB2 性能优化的基本技巧,并且能够在数据库早期设计时考虑到一些性能因素而防范于未然。

2010-03-17

DB2 最佳实践: 性能调优和问题诊断最佳实践

大多数 DB2 系统都经过了性能的演变。首先,不论出于硬件还是软件的观点,该系统首先要能被配置。在多数情况下,这将成为系统在实施后如何运行的基础。其次,系统一经发布,勤勉的数据库管理员(DBA)将监控系统的性能,来监测任何可能的开发问题。如果发现任何问题,我们就进入下一个阶段 - 故障诊断阶段。每个阶段都是基于上一阶段,如果没有适当的准备,我们极有可能需要处理比较困难的问题。 本文介绍了 DB2 系统性能的最优方法。我首先涉及到一些有助于我们确保良好软硬件性能的重要原则。然后我们讨论多种在操作和故障诊断的情况下,有助于我们了解系统性能的监控方法。最后,尽管我们做了最好的准备,性能问题仍然可以降临到我们身上,我们讨论如何逐步地处理它们,并有条不紊的进行

2010-03-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除