利用 Ant 的 SQL Task 来实现自己的 Java 执行 SQL 脚本文件的功能

前面记载过一篇 Java 执行 SQL 脚本文件,这里边完全是由自己写代码来分离出脚本中的每一个 SQL 语句的,有不少缺陷。当时还不太清楚 ANT 本身提供了功能很强的执行 SQL 语句和脚本的 SQL Task 可用。以下依次简单介绍如何在 build.xml 中执行 SQL 语句或脚本;Java 代码中如何调用 ant 的 SQLExec 类执行 SQL 脚本,最后考虑  ant.jar 的个头说大也不小,1M 多,如果只用于执行 SQL 脚本,则绝大部分代码就是垃圾,所以从同抽离出需要的两个类 JDBCTask 和 SQLExec,完全去除了对 ant.jar 包的依赖。

有关 ant 的更详细的记录请参见,http://ant.apache.org/manual/CoreTasks/sql.html阅读全文 >>

Unmi 的 Struts2 学习笔记(九)

中世纪的欧洲《礼仪书》中说:痰不要吐到桌子上,也不要飞过桌子。1774年,欧洲的《礼仪与基督教礼貌守则》中说:我们再也不能原谅那些把痰吐到窗户外、墙上或者家具上的人。可见,欧洲人的素质也是在他们工业化富了之后的事。至少那个时候,我们的老祖宗再不争气,也绝不会把痰吐到桌子上。

1. OGNL 中有生成 List 和 Map 的表达式,分别是:{e1,e2,e3,...} 和 #{key1:val1,key2:val2,...}。对集合 OGNL 提供了两个操作符 in 和 not in,如:
   <s:if test="'foo' in {'foo','bar'}" ... </s:if>            ---- not in 的用法当然是一样的了。
之外,OGNL 还允许通过某个规则取集合的子集
    ·? :取出所有符合条件逻辑的元素
    ·^:取出符合条件的第一个元素 阅读全文 >>

运行《Struts2 权威指南》 s-if.jsp 的异常引出对 EL 和 OGNL 的思考

我用 MyEclipse 建了一个 Web 项目,配置了能支持 Struts2。在验证标签应用时,把 《Struts2权威指南--基于WebWork核心的MVC开发》一书的例子 10.3 controlTag 中的 s-if.jsp 拷入当前应用。该 jsp 文件的内容是:想像一下我访问它时得到了什么样的结果?

然后把该应用 TestStruts2 部署到 Tomcat 5.0.28 下,启动 Tomcat,地址栏输入 http://localhost:8080/TestStruts2/s-if.jsp,确定,执行结果让我傻眼了,任凭我百般刷新,也都是赫然显示着:

阅读全文 >>

Unmi 的 Struts2 学习笔记(八)

吾同人数进寺庙,却从未点过一柱香。概因精神世界里终无所寄托。既不为生儿还是女而筹算,也无须因落下亏心事要请得神灵庇佑。想来,真要的东西,阿弥陀佛也给不了。在物价飞涨之际,谁能给你加薪,何来民主,看看这辈子能不能有机会参与选一回国家领导人,少说几句了,就这点言论自由了。

1. Struts 2 标签库以 OGNL 表达式为基础,对集合、对象的访问功能更强了。Struts 2 的标签用统一的前缀,一般为 "s",不再像 Struts1 那样分 <html:.../>、<bean:.../>、<logic:.../> 等多个命名空间的标签。如果在 JSP 2.0 之前用过 JSTL,也就知道什么是 OGNL 表达式的。

2. Struts2 提供了很多 Struts1 标签没有的东西,如日历、树型控件、Tab页等;同时可借助 DWR,有标签支持 Ajax,除此还提供了主题、模板,还允许在页面中使用自定义组件。Struts2 标签都定义在 URI 为 "/struts-tags" 的命名空间下,Struts2 的标签库功能很强大,使用起来却更简单。 阅读全文 >>

Unmi 的 Struts2 学习笔记(七)

小时候,大人们的谆谆教诲:做人要诚实。并真以此为做人原则。长大后才知道何谓社会。譬如530,再如艳照门,风声乍起之时,有人辟谣;直东窗事发后,道貌岸然者有之、恬不知耻者亦有之。原本成功就不属于规矩之人。纵观,无玄武门之血腥,何来一代宗皇;老毛若不有理而造反,一味守规矩,或为一介书匠耳。雅各一碗红豆汤便谋得以扫的长子权,再行骗去亚伯拉罕的祝福,并顺理成章让耶和华与他同在,可见上帝之“贤明”?。高等教育中有一句,顺利的是骗子,倒霉的是傻子,我是?不还有企业家的原罪吗?有时竟被社会所放任?

1. 前面讲的自定义类型转换器是基于 OGNL 的 DefaultTypeConverter 类并实现 convertValue() 方法,两个转换方向的逻辑都写在这一个方法中。而 Struts 2 为我们提供了一个 DefaultTypeConverter 的抽象子类 StrutsTypeConverter 来继承,并实现其中两个抽象方法 convertFromString() 和 convertToString(),这要简单易懂。对比 Struts 1 的转换器是要实现 org.apache.commons.beanutils.Converter 接口,以及它的 convert() 方法的。 阅读全文 >>

任务列表分派给多个线程的策略及方法(含完整代码和演示)

多线程下载由来已久,如 FlashGet、NetAnts 等工具,它们都是依懒于 HTTP 协议的支持(Range 字段指定请求内容范围),首先能读取出请求内容 (即欲下载的文件) 的大小,划分出若干区块,把区块分段分发给每个线程去下载,线程从本段起始处下载数据及至段尾,多个线程下载的内容最终会写入到同一个文件中。

只研究有用的,工作中的需求:要把多个任务分派给多个线程去执行,这其中就会有一个任务列表指派到线程的策略思考:已知:1. 一个待执行的任务列表,2. 指定要启动的线程数;问题是:每个线程实际要执行哪些任务。

策略是:任务列表连续按线程数分段,先保证每线程平均能分配到的任务数,余下的任务从前至后依次附加到线程中--只是数量上,实际每个线程执行的任务都还是连续的。如果出现那种僧多(线程) 粥(任务) 少的情况,实际启动的线程数就等于任务数,一挑一。这里只实现了每个线程各扫自家门前雪,动作快的完成后眼见别的线程再累都是爱莫能助。 阅读全文 >>

JAVA程序启动单一实例妙招[转]

每日E读,间隔几天,显的每日E读不每了,新闻过后,精彩继续!

今儿,想起来昨儿,解决的一问题,贴出来大家学习下,由于工作需要,学习,哈哈~!

手头的一个任务,是个java的SWT做的桌面应用程序,有一需求是,程序只能启动一个实例,二次启动会提示启动失败!网上转了一大圈几天也没找到比较理想的解决方法,在CSND等专业程序员网站上查找过,也没有找到!我正要放弃的时候,哈哈,被我找到了!

找了一写方案,总结起来就是,系统单一实例,就是查看共用资源,如果被占用,说明已经启动!有人说用单例模式,那是没有作用的!

网上找到的几种解决方案: 阅读全文 >>

SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序

我们有些程序会想要托盘处显示图标,最小化到系统栏;关闭按钮不关闭程序,也是最小化到系统栏;点击托盘图标激活窗口,通过托盘图标的弹出菜单来退出程序。

本段代码就是要完成这样的功能,是 SWT  来实现的。

直接代码给出,代码中有较详细的注释,说明了本程序的功能及实现。文中的任务栏和系统栏应该知道是指哪一段吧,微软就是这么定义的,用 spyxx 的 findwindow 窥探一下就知道了。 阅读全文 >>

JSPWeaver消灭JSP开发中的“一回生”[转]

之前整一星期忙得不可开交,关于技术已无暇顾及,这个星期总算有朝向正常化的迹象了。回到网络上多紧跟着技术变化的步伐,拣自认为好的东西摘记下来。

原文:http://www.infoq.com/cn/news/2008/02/JSPWeaver10

作者 Charles Humble译者 李剑 发布于 2008年2月25日 上午4时46分

社区 Java
主题 动态语言, 企业架构

ZeroTurnaround的JSPWeaver是一个实时JSP解释器,它旨在消除因为服务器从JSP标记中创建和编译后台servlet而造成的“一回生(译者注:即第一个访问Web应用的JSP页面的人,响应时间会比别人长)”。 阅读全文 >>

Unmi 的 Struts2 学习笔记(六)

米洗毕,水适量,盖合上,心摇摆,总觉水多了一分或是少了几点,于是重又加上或倒出少许,其实这丁点份量完全无碍煮出香喷喷的饭来。及至将熟之际,亦有犹豫,心中默数至少10,如再有不定辄至20,掐火,20对最终质量来说或有所损。

1. Struts2 的 Action 中可直接用属性来封装请求参数和处理结果,此谓之属性驱动。也可以像 Struts1 那样使用专门的 ActionForm 来处理请求参数和结果,只不过 Struts2 用的是一个更单纯的 POJO,这就做模型驱动;此时的 Action 需要实现 ModelDriven 接口,并实现其 getModel() 方法将 Action 与对应 Model 相关联。

2. 例子说明采用模型驱动的 Action (UserBean 是一个普通 JavaBean,其中定义了 username 和 password 两个属性): 阅读全文 >>