日历
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 |
|
统计
- 随笔 - 11
- 文章 - 0
- 评论 - 28
- 引用 - 0
导航
常用链接
留言簿(2)
随笔分类
随笔档案
搜索
最新评论
阅读排行榜
评论排行榜
|
2007年2月2日
在linux下用rm删除大量文件时会出现这个错误:
rm -rf 'wz-a1.2007-02*' rm -rf * -bash: /bin/rm: 参数列表过长
经过google, 发现这个方法, 特记下来, 以防以后忘记 find . -name "wz-a1.2007-02*" | xargs rm -rf 'wz-a1.2007-02*'
2006年12月28日
摘要: 在某个项目中,经过几个同事的修改, 最终得到这个支持分页的action基类, 使用非常简单:1. 在写action类时把派生ActionSupport类改成派生这个PaginationSupportAction类2. 实现这两个抽象方法, 其中doExecute方法就是你原来的execute方法的代码, queryCount()返回符合条件的记录数 /** *//** * just ... 阅读全文
2006年12月27日
1。通过cmpp协议接收短信不是在自己的服务器的7910端口监听,而是链接到移动短信服务器的7910端口 2。短信内容的长度是byte的类型,8个字节,应该是无符号的,但是java的byte是有符号的,所以最大值是127,当大于127时长度就小于0了,所以这两天一直郁闷为什么发长短信就死在那里,解决: bytetmpLen=in.readByte(); msg_ 文章来源: http://www.yourblog.org/Data/20054/249969.html
packagecom.kelefa.glidewindow; importjava.util.HashMap; importjava.util.LinkedHashMap; importjava.util.Map; /** *滑动窗口. *有些工作(例如网络通信)需要回应,但不需要一个一个的等待回应,可并发的进行,但需要控制流量, *滑动窗口是比较好的方法 文章来源: http://www.yourblog.org/Data/20054/250650.html
摘要: 不知道是自己对hibernate不了解,用的不对, 还是db2版本问题, 以前的一个项目用到db2, hibernate, 以为hibernate已经帮我们做好分页的一切事情,只要用就行了, 代码大概如下: /** *//** * 设置分页, pageNo或pageList<=0时返回所有记录 * * @param pageNo * ... 阅读全文
摘要: 一般主动告警系统的告警信息采集主要有5种方法: 1. 在告警服务器ping各种设备, 判断设备是否存活和掉包率 2. 接收设备发过来的系统日志(syslog), 并通过相应的规则库(正则表达式)匹配判断是否需要告警 3. 接收设备发过来的snmp Trap信息, 进行判断告警 4. 提取网管系统的告警信息 5. 通过snmp协议, 取回相应oid的值, 进行判断告警 什么是snmp: Si... 阅读全文
2006年7月13日
用webwork的datepicker时, 如果格式是"%Y-%m-%d"工作很正常, 但是有些格式需要带上时间的: "%Y-%m-%d %H:%M", 这时用webwork默认的类型转换就不行了,需要自己实现, 根据javaeye论坛某高手的建议用正则表达式来判断form传过来的日期字符串是"%Y-%m-%d"还是"%Y-%m-%d %H:%M",再用相应的SimpleDateFormat来parse分析字符串生成Date对象, 代码如下:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map;
import org.apache.log4j.Logger;
import com.opensymphony.webwork.util.WebWorkTypeConverter;
public class DateConverter extends WebWorkTypeConverter { private static final Logger log = Logger.getLogger( DateConverter.class );
private final static String regex_time = "[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}";
private final static SimpleDateFormat sdf_time = new SimpleDateFormat( "yyyy-MM-dd HH:mm" );
private final static String regex_date = "[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}";
private final static SimpleDateFormat sdf_date = new SimpleDateFormat( "yyyy-MM-dd" );
@Override public Object convertFromString( Map context, String[] values, Class toClass ) { if ( values.length == 1 ) { Date date = null; try { date = convertToDate( values[0] ); } catch ( ParseException e ) { log.warn( e.getMessage() ); } return date; }
Date[] results = new Date[values.length];
for ( int i = 0; i < values.length; i++ ) { String value = values[i]; try { results[i] = convertToDate( value ); } catch ( ParseException e ) { log.warn( e.getMessage() ); } }
return results; }
private Date convertToDate( String value ) throws ParseException { if ( value.matches( regex_time ) ) return sdf_time.parse( value ); else if ( value.matches( regex_date ) ) return sdf_date.parse( value );
return null; }
@Override public String convertToString( Map context, Object o ) { if ( o instanceof Date ) { Date date = (Date) o; return sdf_time.format( date ); }
return o.toString(); }
public static void main( String[] args ) { System.out.println( "2006-07-11".matches( regex_date ) ); System.out.println( "2006-07-11 00:21".matches( regex_time ) ); } }
要让这个类来代替webwork默认的转换你还需要在classpath目录, 一般就是classes目录放置配置文件 xwork-conversion.properties: java.util.Date=DateConverter 这种方法是对整个application起作用,. 如果要只对单个action起作用, 在action同一个package写一个ActionClassName-conversion.properties: startDate=DateConverter
近日研究使用webwork(版本:2.2.1)的datepicker标签, 它用jscalendar来实现, 使用非常简单:
<
ww:datepicker
cssClass
="ListBox"
size
="16"
showstime
="true"
name
="start"
id
="start"
format
="%Y-%m-%d %H:%M"
/>
显示页面总说js错误, 什么什么对象没有定义之类的, 具体忘记了, 查看网页源代码发现它需要3个js文件: <script type="text/javascript" src="/webwork/jscalendar/calendar.js"></script> <script type="text/javascript" src="/webwork/jscalendar/lang/calendar-ch.js"></script> <script type="text/javascript" src="/webwork/jscalendar/calendar-setup.js"></script> 用winRAR打开webwork-2.2.1.jar发现com\opensymphony\webwork\static\jscalendar\lang 目录并没有 calendar-ch.js文件,倒是有一个calendar-zh.js文件, 不晓得是怎么回事, 小弟对i18n没有研究, 估计是webwork的一个bug吧,发现有两个解决方法: 1.把calendar-zh.js改名为calendar-ch.js, 或把calendar-zh.js另存为calendar-ch.js, 然后重新打包webwork-2.2.1.jar 2.假设你的webwork.properties有这样的设置:
### Standard UI theme ### Change this to reflect which path should be used for JSP control tag templates by default webwork.ui.theme=xhtml webwork.ui.templateDir=template #sets the default template type. Either ftl, vm, or jsp webwork.ui.templateSuffix=ftl 修改/template/xhtml/datepicker.ftl: <#if !stack.findValue("#datepicker_js_included")?exists> <#assign trash = stack.setValue("#datepicker_js_included", true)/> <script type="text/javascript" src="<@ww.url value="/webwork/jscalendar/" encode='false'/>calendar.js"></script> <script type="text/javascript" src="<@ww.url value="/webwork/jscalendar/lang/" encode='false'/>calendar-zh.js"></script> <script type="text/javascript" src="<@ww.url value="/webwork/jscalendar/" encode='false'/>calendar-setup.js"></script> </#if> <#include "/${parameters.templateDir}/simple/text.ftl" /> <a href="#" id="${parameters.id}_button"><img src="../images/pdate.gif" width="16" height="16" border="0" alt="点击这里选择日期"></a> <script type="text/javascript"> Calendar.setup({ inputField : "${parameters.id}", <#if parameters.format?exists> ifFormat : "${parameters.format}", </#if> <#if parameters.showstime?exists> showsTime : "${parameters.showstime}", </#if> button : "${parameters.id}_button", <#if parameters.singleclick?exists> singleclick : ${parameters.singleclick}, </#if> step : 1 }); </script> 其实就是把calendar-${parameters.language?default("en")}.js修改成calendar-zh.js
2006年7月3日
一个使用webwork和hibernate的项目一直用mysql做为数据库,一直工作正常,但是最近改用ms SqlServer时发现了两个问题: 1。在mysql用“user”作为一个表的表名,但是在SqlServer中“user”也许是个保留关键字,创建表失败, 只好改成“Tuser”才ok; 2。由于大意,程序中有这一个hql: from Device device group by device.ip, device.name 在mysql中正常,但是在SqlServer抛出异常,改成这样就ok了: from Device device order by device.ip, device.name
2006年6月30日
kelefa是某公司的一个程序员,传说他是一流的程序员,开发了一个系统非常稳定,从来没有出现过问题,当然这世界上没有完美的人,也没有完美的软件,这个系统也有bug,而且他已经发现了,但是一直没有找到很好的办法解决,还好这个bug很少有机会能发作,关键是一发生这种情况时严重影响系统的运行,停止服务后再重新启动是目前最好的方法。 为了保住“高手”的称号,他又搞了一个监控该系统的小程序,能及时发现系统是否工作正常,如果发现异常情况立刻发送email给自己,email又跟自己的手机短信绑定,使他能迅速的发现情况并跑到电脑前: //telnet进来后 [root@kelefa root]$ su - [root@kelefa root]$ password [root@kelefa root]# cd /usr/local/resin-3.0.14/bin [root@kelefa bin]# ./httpd.sh stop [root@kelefa bin]# ./httpd.sh start 一切又正常了,1分钟内搞定,一流程序员再次得到验证,可是email有时会发送失败,sp的短信也不是绝对的正常,而且每个月还给n元大洋给sp,万一收到告警短信旁边没有电脑也无能为力。 终于发现更好的方法:在监控程序里直接telnet到设备上进行操作,动手前当然要看看有什么开源的可以利用,它就是Jakarta的Commons Net,这个包支持ftp,telnet,pop3,smtp,nntp等协议。 首先实现一个telnet的基类,它有个connectAndDocommad()的方法,实现链接到指定的设备上,并启动一个线程执行一个模板方法(某设计模式): // 登陆 log.debug( "login................" ); if ( false == login() ) { String msg = new Date().toString() + " telnet登陆不成功,ip:" + remoteip; log.warn( msg ); SyslogUtil.send( msg ); return; }
log.debug( "doCommand................" ); // 抽象方法 doCommand(); // 退出 log.debug( "exit................" ); exit(); 其次类RestartTask继承该抽象类,实现doCommand()抽象方法,往输出流发送操作命令,实现重启: @Override protected void doCommand() { log.debug( "resin restart................" ); try { writeLine("su -"); writeLine("password"); writeLine("cd /usr/local/resin-3.0.14/bin"); writeLine("./httpd.sh stop"); writeLine("./httpd.sh start");
readResult(); } catch ( IOException e ) { log.warn( e.getMessage() ); } } 以上为伪代码,需要实现一些子方法, 如有雷同,纯属虚构!
|