某某님의 프로필┢┦aPpY☆→ 小新的窝窝사진블로그리스트기타 도구 도움말

某 某某

직업
지역
관심 분야
赚钱买房,结婚!任重而道远。
联系方法:
사진(1/8)
2009-04-07

java.util.date java.sql.date java.sql.timestamp

整理一:

这里的一片文章,我个人认为讲解的很详细,有对 java.sql.Date的使用还有困惑的请看。

java.sql.Date 只存储日期数据不存储时间数据

// 会丢失时间数据
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));

//可以这样来处理

preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));


//想要得到完整的数据,包括日期和时间,可以这样

java.util.Date d = resultSet.getTimestamp(1);

//这样处理更合适一些,可以避免一些潜在Timestamp 问题

java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());

自己补的话

这样的话:

        往数据库存储的时候可以接收 java.util.Date类型 再用getTime()方法得到代表那个Date对象的long值,再以这个long值 构造一个Timestamp对象 存进数据库中。

       从存数据库里取的时候,可以先得到Timestamp用他的getTime()方法得到long值,再以这个long值构造一个 java.util.Date对象,这样就可以对这个Date对象操作了。不如说 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等

 

整理二:

用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式。        Timestamp转化为String: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒 Timestamp now = new Timestamp(System.currentTimeMillis());//获取系统当前时间 String str = df.format(now);         String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(new Date());
Timestamp ts = Timestamp.valueOf(time);     整理三:   在ResultSet 中我们经常使用的setDate或getDate的数据类型是java.sql.Date,而在平时java程序中我们一般习惯使用 java.util.Date。因此在DAO层我们经常会碰到这俩种数据类型的相互转换,经过了一个下午的折腾,鄙人对两者的转换方法做出了小小总结,希望大家不吝指教。
两者的关系
java.lang.Object
    |
    +---java.util.Date
            |
            +----java.sql.Date

从这个图中我们可以知道java.sql.Date是从java.util.Date继承过来的。

相互转换
1. 使用getTime()函数
这两个类都提供了getTime()函数,用于返回对应的毫秒数(long类型)。利用这个函数可以实现转换:
    java.util.Date utilDate = new java.util.Date(sqlDate.getTime());   // sql -> util
    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());   // util -> sql

2. 使用SimpleDateFormat类实现转换
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。
SimpleDateFormat dateFormat = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");
java.util.Date utilDate = dateFormat.parse(sqlDate.toString());

3. 直接转换
由于java.sql.Date是从java.util.Date中继承过来的,所以可以直接用:
utilDate = sqlDate;

4. 另类获得日期的方法:
SimpleDateFormat sy=new SimpleDateFormat("yyyy");
SimpleDateFormat sm=new SimpleDateFormat("MM");
SimpleDateFormat sd=new SimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date);

ps: java.util.Date类中的getYear()要加上1900才可得到实际值,getMonth()则要加上1
     

 
2008-05-12

2012 世界末日

2012
开放分类: 数字列车世界末日2012
2012,是2011与2013之间的自然数。

小写
二零一二

大写
贰零壹贰

因数分解 2012=2*2*503

年份属相:龙年

关于2012年世界末日有以下几种说法。
1.水晶头骨之迷中讲到2012年12月21日太阳下山之后,世界变化,只有非洲和中国西部地区部分人存活
2.科学预测2012年地球磁极颠倒,前几次分别导致了冰川时代和大洪水等事件
3.俄罗斯人预测2009年世界大战爆发,核危机
4.台湾一个学龄前班的孩子突然说起古maya语,大概意思是说要净化地球,时间是2012年
5.藏僧预言:2012年全球爆发核战神将显现干预
6.2012年,太阳磁极也会颠倒
7.星相上,2012年将出现大十字,土木相冲,日月相冲,这代表流血和死亡,上次十字发生在伊拉克战争
8.黄櫱禅师预测2012年台湾回归
9.中国的推背图指2012年有难
10.星相上,2012年5月5日从双鱼时代正式过度为水瓶时代,双鱼时代的特征是工业和科学技术发展,水瓶时代的特征是精神领域的提升
11.协波汇聚是说:在某个时间,成千上万的新时代人在世界各地的灵性地点(中心)聚会,引导和平降临地球、祈愿所有生命合一、冥想新时代来临。协波汇聚的重要日期是1987年12月31日,以及2012年的一个顶峰.
12.Amorah Quan Yin通灵预测洪水、地震、大陆板块移动、火山喷发、以及最终的两极变换,将会在2013年之前发生
13.:《圣经密码》指出,彗星将在那一年撞击地球;玛雅年历的注解显示宇宙末日将发生在2012年的12月21日.2012年让我们一起 迎接新的世界.新的人种.新的历史.
同时世界是一个多次元的空间,也许2012将不是以上这么进行着,一秒的时间存在着多个事实,是实是虚,我们拭目以待吧!
2012年是世界末日?
   陆续出现了一些关于2012年的预言,难道这仅仅是一种巧合吗?
  
  1.地球与太阳的磁极将于2012年发生颠倒
  
  天体和物理学家与电脑科学家共同研究发现,上次发生同等现象的时间是在恐龙消失时。在现代人类历史中,还没有此类现象发生时的场景记载。
  北极与南极磁场发生颠倒的过程即为磁极颠倒。这一现象导致的最坏结果,将让地球磁场的磁力为零高斯(高斯为磁感应单位),如果此时再遇上周期为11年的太阳两极磁场颠倒,地球上所有动物(包括人类)的免疫系统将大为降低;地球的外壳会发生更多的火山喷发,地震,泥石流等现象;地球磁气圈将被减弱,来自太阳的宇宙辐射就会增大,最终可能对人类造成辐射灾难;一些小行星将朝地球方向飞来;地球的重力也会发生变化。
  研究结果最后认为,如果所有的零磁力推测都同时发生,那么,只有居住在地球外壳深部地带的有机体能够不受影响。届时,人类躲避灾难的方法就是躲到地壳以下,或者搬去其它星球上居住。也许火星会是一个合适的选择。
  但美国宇航局发表声明说,磁力为零只是最坏的可能而已,并不一定会发生。
  
  2.厄尔尼诺
  
  2011年是很特殊的一年,共发生4次日食。其中1月4日、6月1日和11月25日的日食发生在极区,7月1日的日食发生在高纬地区,有利于诱发厄尔尼诺。2012年发生2次日食,5月20日发生在高纬地区,11月13日发生在中纬地区。
  根据日食-厄尔尼诺系数理论,计算出2011年日食-厄尔尼诺系数为10.5,2012年日食-厄尔尼诺系数为13。
  可以对比的是,1997年日食-厄尔尼诺系数为12,但在那一年,却发生了20世纪最强的厄尔尼诺事件。
  南京大学教授林振山等人预测,2011年会发生厄尔尼诺事件。
  自然界的巧合,使厄尔尼诺事件与磁力危机,在2012年共同威胁地球上的生命。
  
  3.古文明预言
  
  2012年12月31日是玛雅人长历法(Long Count Calendar)中本次人类文明结束的日子。此后,人类将进入与本次文明毫无关系的一个全新的文明。
  究竟2012年会发生什么事呢?
  不过我非常相信,自然灾难永远不会是毁灭人类的元凶。
  玛雅古文明密码
  斐声国际的作家、工程师兼业余科学家“摩利斯.科特罗(Maurice Cotterell)”精于玛雅古文明研究,他从许多古庙与碑石中发现了一组一再重覆出现的密码:1,366,560。若将这个密码的单位视为“天”,则 换算为年的话,为3,740年。玛雅族诞生于公元前3113年,到750年突然消失,其中间生存的年代接近3740这个年数。根据玛雅文献的记载,地球每 隔3,740年就会被毁灭一次,而地球生命在过去已曾被毁灭四次;换言之,现代人类应已是地球第五代子孙了。
  
  “摩利斯”将玛雅文化中的圣数1,366,560与太阳磁场变化周期,这二个表面上毫不相干的事连接在一起。科学的计算显示太阳磁极每隔3,740年就会对调一次,而3,740年就会对调一次,而3,740年刚好是1,366,560天换算的年数。
  由于地球的磁场受到太阳磁场很大的牵制,当太阳磁极逆转时,“摩利斯”推论地球磁极也跟着对调,令地球磁南北两球互换。生物无法适应突然发生的 重大气候变化,而集体死亡。长毛象咸信是热带地区的生物,但由于磁极的对调,使它们生存的地方变成天寒地冻的不毛之地,于是发生长毛像在西伯利亚、阿拉斯 加集体死亡的事情。而考古学上的证据显示这二个地方原本属于热带气候的。
  
  如果地球磁极逆转而造成生物大量灭绝,那就不难解释为何每隔一段时间,使地球文明周期性的毁灭。
  古玛雅人早就已经将那个日子准确地算出来。在不少预言中,年代记载最完整的,算是《克奥第特兰年代记》。说我们得知第五太阳纪于公元前3113年。在经历玛雅大周期的5125年后,第五大阳纪迎向最终。与现在西历相对照的话,便可知“太阳纪”将于“某纪的某日”结束。
  这个终结日,就在公元2012年12月22日的前后。
  2012 年曾被多次引用,其中北美的玛雅人历法讲我们人类正在经历着一个历时五千多年的星系更新,时间是从公元前3113年起到公元2012年止。其中每二十年又是一个小周期,从1992年到2012年这二十年是本次太阳纪的最后一个周期,又被叫做“地球更新期”,其间一切都将面临净化和更新,然后人类就将进入新纪元。不谋而合的是,中国唐代的《推背图》第五十二象里的“乾坤再造在角亢”(“角亢”是借传统上的东方青龙七宿寓指龙年),2012年也恰恰是龙年。
  
  4.天王星异常接近地球引关注
  
  据德通社2005年3月31日报导,德国最畅销报章《图片报》周三在头版以“异常的天王星”为题,指神秘的“灾难行星”天王星正异常的接近地球,恐将给地球带来海啸地震等异常现象。
  《图片报》报导说,有逾500万读者的《图片报》周三引述美国太空总署科学家以及占星家等专家,指太阳系的第7枚行星天王星拥有“四极”磁场,功能有如“一个巨大的宇宙真空吸尘机,”把地球的地壳板块吸离地层。
  报导指出,这种磁场拉力在地球的赤道地带较强,因为热带地区较南、北极更接近天王星。这种磁场力量“强度足以在赤道上吸起带电的尘粒子,”可能干扰到地球的地壳,引发海底地震及夺命的海啸。
  报导说,最近发生地震的密度增加,天王星的轨道令该遥远行星反常的接近地球,由原本距地球31.4亿公里,拉近至目前只有25.9亿公里,并将一直保持此距离至2012年。报导警告,未来10年将会发生更多由天王星引发的地震,直至天王星慢慢退回原有的太阳系位置。
  报导引述负责美国行星探测器“航海家号”计划的科学家斯通指出,“航海家号”亦发现强大、异常的天王星磁场。
  报导引述占星学家指出,天王星一向古怪奇特,它在18世纪被发现后纳入用于占星的天宫图,被视为剧变、灾难性转变及狡诈多变的象征。
  报导称,这与德国一名占星家的预言不谋而合,他说“天王星入了双鱼宫,正是灾难之兆。”
  另据印度日报(India daily)3月1日报导,海德拉巴德(Hyderabad)的一家公司的研究人员预言2012年地球和太阳的磁极将发生逆转。地球磁极逆转是指地球磁场的北极和南极发生对调,在这个过程中地球将经历在某个时间点上没有磁场的状态。
  据称上一次发生这样的事件是在数千万年前恐龙灭亡的年代。
  通过电脑模拟发现,除了造成电力失效和候鸟失去辨别方向的能力外,还有其它的严重后果,包括:
  ——所有动物,包括人类的免疫系统将明显削弱。
  ——地壳变动会有更频繁的火山、更剧烈的地质构造运动、地震和山体滑坡。
  ——磁场减弱造成宇宙射线成倍增加,导致的放射污染会造成更多的癌症。
  ——小行星可能会更容易接近地球。
  ——地球重力场发生变化。
  
  5.藏僧遥视2012年 外力拯救,地球不灭
  
  据《印度日报》(India Daily)12月26日报道,遥视功能在西藏寺院里不是甚么新鲜事,几千年来,它一直是主导西藏文化的精神活动之一,而最近一些从几个西藏寺院归来的印度游客了解到的信息,着实极其使人震惊又引人入胜。
  这些游客说,据遥视功能的藏僧看到,目前世界正在自我毁灭的过程中,但他们同时也看到,世界不会被毁坏。
  西藏僧人说,从现在到2012年间,世界超级大国将继续参与地方战争,恐怖主义和隐蔽的战争将是主要问题。2010年左右,世界政治将发生某种变化,世界大国将威胁互相毁坏。2010年到2012年间, 全世界将变得极端化,并为末日做准备,繁多的政治回旋与交涉将不会有一点进展。2012年, 世界将开始进入一次全面破坏性的核战争,那时一件卓越的事件将会发生。超自然的神力量将干预,世界将不会自我毁灭于此时。
  
  如果以科学解释僧人的声明,显然有地球以外的力量在观察着我们走的每一步,在2012年他们将出面并拯救世界于自毁。
  当被问到最近在印度和中国发生的不明飞行物(UFO)出没事件时,僧人们微笑着说,神正在观察着我们所有的人,人类不能也不会被准许大幅度地改变未来。虽然每个人目前生活中的“业”可能在某种程度上改变其未来的生活,但那样大幅度地改变未来是不会被允许的。
  僧人们还提到了,2012年以后,人类文明将会明白,科学和技术最前沿是在精神灵性区域,而并非物质的物理和化学。此后,技术将转到另外一个方向。人们将学会精神的精华、身体与灵魂的关系、轮回、我们相互之间事实上存在联系并都是“上帝”的一部份。
  在印度和中国,UFO出没事件增加了几倍,许多人认为外星人与中国和印度政府都有过接触,近来UFO频繁活动在那些致力发展核武器的国家。当问到那些地球外的力量是否会在2012年显示时,僧人们说: 他们将会必不使我们惊吓的形式显露自己,他们只会在必需的情况下才会显露自己。随我们的科学技术进步,我们注定会看到并与他们接触的。
  据遥视僧人们说,我们的地球是被保佑的,并一直被从各种各样不断的危险中拯救出来,我们只是不知道而已。我们将意识到外力是如何拯救我们的。

  寅卯年间忧加忧,
  奇事一定在中秋。
  眼前似是太平巷,
  三灾过后世界勾。
                             秘密道家分支—
                                                            圣仙道

   寅—2011
   卯—2012

  巧合?
  
我们的太阳系,每两万六千年就会进入一个精神高能量的光子带,地球曾于一九八七
  年三月十六日通过此一光子带,七天后离去;此后,每年以增加十四天的时间通过光子带
  ,一九八八年则为廿一天,一九九六为一百三十三天,一九九七年为一百四十七天,二0
  00年为一百八十九天。到了二0一二年十二月廿一日,整个太阳系将完全地进入此一光
  子带。
  
    在无限的宇宙中有无限的光子带,而我们的太阳系,即将进入的则为昴宿星系的光子
  带,这个光子带是以昴宿星系里的爱克尼星为主轴,而其它的昴宿星球是以螺旋状的方式
  循渐地进入,目前共有六个星系进入昴宿星系,最靠近爱克尼星的是莫洛培星、依次是玛
  亚、依雷叉、太吉塔、扣尔、阿特里斯星、及即将进入的太阳星系。
  
    爱克尼星的存在体是活在第五度空间里,离它愈远的空间度愈小,然而只要进入这个
  星系里,至少是第四度空间,也就是说,太阳星系即将进入第四度空间,换句话说就是:
  地球即将转性形进入第四度空间。
  
    当然爱克尼星也不是一直固定地停留在第五度空间,它也将转入第六度空间,当爱克
  尼星转入第六度空间时,其它的星系也将转入第七度空间。这就是星系的大进化。
  
    将地球推入第四度空间的能量,是来自于地球人类的精神进化,这种说法是违反达埃
  文的演化论的,因为不是环境造成人去演化,而是人的精神进化决定了一切外在环境的演
  化。所谓「适者生存」的假说,并不适合人类的精神进化,同时它也不适合星系的进化,
  它只适合达埃文本身的演化。
  
    至于地球是否真的能安全地进入第四度空间?这任谁也无法预测的,因为决定权在全
  体人类的身上,是我们选择是否要进入第四度空间的?所以我们应该问谁呢?
  
    如果人类的精神能量在二0一二年尚未提高地话,地球将无法进入第四度空间,而冲
  出它应循的轨道,引起爆炸,而人类将全部消失在宇宙中。这就是有些人所说的「世界末
  日」的来临。但是因为克里昂改变这网格,所以不会死很多,会没太阳没光,变的快速冷冻,
  几天后会正常,天气环境会变的更好
  
    为了人类能转形到第四度空间,整个银河系已开始清除过去业的型态,在二O一二年将
  全部清除完毕,「业」的学习课程到时将全面停止。
  
    即将来临的世界,是一个崭新的世界,这个世界没有竞争、没有恐惧、没有疾病、没
  有暴力、没有权力斗争、没有肉体的死亡。
2008-05-03

MSN Messenger无法登陆的另类解决办法

MSN Messenger无法登陆的另类解决办法

      经常看到用户反映说MSN Messenger无法登陆,碰到类似0x81000370,88048820的错误码。现搜集到下述另类方法,大家可以根据自己的情况加以设置从而解决不能登陆的问题。
  你的电脑上"日期/时间属性"是否设置正确:双击时间,检查日期和时间是否正确设置。很多时候是因为时间没有同步,双击日期,选择Internet时间,同步即可。
      如果你的帐号和密码没有在MSN中保存,你需要确认你输入的帐号和密码是正确的(请注意大小写字母及帐号的后缀)。

      禁用您浏览器中的“自动检测”设置。对于 Internet Explorer 用户,请单击 IE“工具”菜单、单击“Internet 选项”、单击“连接”选项卡、单击“局域网设置”按钮、然后清除“自动检测设置”框。

      清除IE cache和Cookies:打开Internet Explorer浏览器,按工具菜单,然后选择“Internet 选项”,点击“删除文件”按钮和“删除 Cookies”按钮。

      检查 IE 安全设定:打开Internet Explorer浏览器,按工具菜单,选择“Internet 选项”,选择“高级”,拖动滚动条到安全选区,证实“检查服务器证书吊销”没有被选中,同时证实“使用 SSL 2.0”和“使用 SSL 3.0”被选中。然后按“确定”。

      点击“开始”--“运行”,依次键入:regsvr32 softpub.dll,regsvr32 mssip32.dll,regsvr32 initpki.dll(这一次时间比较长)。

      检查错误的代理服务器设置。在 MSN Messenger“工具”菜单上,单击“选项”。在“连接”选项卡上,确保您清除了“我使用代理服务器”复选框。

       防火墙和第三方应用程序可能会影响连接到 MSN Messenger。您可以禁用应用程序、防火墙或打开防火墙相应端口,然后尝试连接到 .Net MessengerService。

       如果您为局域网使用 ICS 或路由器,则可能需要调整一些设置或更新硬件/固件驱动程序。

       如果您的 Passport 未被识别,请登录 Passport 站点www.passport.com ,并确认在该处可被识别。如果在该处可被识别,但仍不能登录到 .NET Messenger Service,则可能是消息服务器暂时关闭正在维护或达到了 Internet 的最大通流量(使用率高峰期间)。请稍后再试。也可以检查服务器状态页以查看服务器的最新信息。

       如果在Passport 站点仍然不可识别,请到这里:memberservicesnet.passport.com/memberservice.srf ,然后选择:“我忘记了密码”。

       C:\Documents and Settings\[用户名]\Application Data\Microsoft\MSN Messenger 下会为每个登录过MSN Messenger的用户创建一个文件夹,把该文件夹删除,然后重新登陆成功。(其中的用户名是指你登陆操作系统的用户名)

2008-04-23

ANT Build.xml例子

<?xml version="1.0"  encoding="GB2312" ?>
<!--
    =======================================================================
      hello-ant 项目 ,学习ant工具的build file.

      参照ant的jakarta-ant-1.6alpha的build.xml

      Copyright (c) 2002 The Neusoft Software Foundation.  All rights
      reserved.

    =======================================================================
-->

<!--
    文档结构为:
    <project>
        <property/>               全局变量的定义
        <property/>...

        <target name="1">         任务组(tasks)
            <javac></javac>       一项javac任务
            ...
            <oneTask></ontTask>   一项其它任务
        </target>

        <target name="2">
            <javac></javac>
            ...
            <oneTask></ontTask>
        </target>
    </project>

    project代表一个项目,
    default:运行到名称为"dist"的target(任务组)
    basedir:基准路径。
-->
<project default="dist" basedir=".">

<!--
    ===================================================================
      定义属性(property tasks)
      最好把用到的路径呀,名称呀都在这里定义成全局变量
      例:定义
          <property name="a" value="hello"/>
      以后就可以这样用它:
          <property name="b" value="${a}/b"/>
      现在:b=="hello/b"
    ===================================================================
-->

    <!--主要的系统环境属性-->
    <property environment="env"/><!--取window,unix...的环境变量-->
    <property name="java.home" value="${env.JAVA_HOME}"/>
    <property name="ant.home"  value="${env.ANT_HOME}"/>

    <!--主要的app环境属性-->
    <property name="app.name"      value="hello-ant"/>
    <property name="app.jar"       value="${app.name}.jar"/>
    <property name="app.copyright" value=" Copyright (c) 2002 The Neusoft Software Foundation.  All rights reserved."/>


    <!--app中src的属性-->
    <property name="src.dir"    value="src" />
    <property name="src.main"   value="${src.dir}/main"/>
    <property name="src.script" value="${src.dir}/script"/>

    <!--app用到的lib-->
    <property name="lib.dir" value="lib"/>

    <!--app的build目录中-->
    <property name="build.dir"      value="build" />
    <property name="build.classes"  value="${build.dir}/classes"/>
    <property name="build.docs"     value="${build.dir}/docs"/>
    <property name="build.docs.api" value="${build.docs}/api"/>
    <property name="build.lib"      value="${build.dir}/lib"/>

    <!--app的dist (distribution) 目录中-->
    <property name="dist.dir"      value="dist"/>
    <property name="dist.bin"      value="${dist.dir}/bin"/>
    <property name="dist.docs"     value="${dist.dir}/docs"/>
    <property name="dist.lib"      value="${dist.dir}/lib"/>

    <!--app的docs目录中-->
    <property name="docs.dir"      value="docs"/>

    <!--
    定义一组路径以后可以通过id重用这组路径 ,例:
    <javac srcdir="src/main" destdir="build/classes">
            <classpath refid="classpath"/>
    </javac>
    -->
    <path id="classpath">
        <!--本项目只有一个java,用不上classpath,这里只是做个例子-->
        <pathelement location="${build.classes}"/>
        <pathelement path="${java.home}/lib/tools.jar"/>
    </path>

<!--
    ===================================================================
      init 准备目录(File Tasks)
      主要的目录结构通常是不会变的,一起生成他们
    ===================================================================
-->
    <target name="init">DSC08168
        <!--清除以前目录-->
        <delete dir="${build.dir}" failonerror="false" />
        <delete dir="${dist.dir}"  failonerror="false"/>

        <!--准备目录-->
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${build.classes}"/>
        <mkdir dir="${build.docs}"/>
        <mkdir dir="${build.docs.api}"/>
        <mkdir dir="${build.lib}"/>

        <mkdir dir="${dist.dir}"/>
        <mkdir dir="${dist.bin}"/>
        <mkdir dir="${dist.lib}"/>

    </target>

<!--
    ===================================================================
      Build the code (Compile Tasks,File Tasks)
    ===================================================================
-->
    <target name="build" depends="init">
        <!--编译-->
        <javac srcdir="${src.main}" destdir="${build.classes}">
            <classpath refid="classpath"/>
        </javac>
    </target>

<!--
    ===================================================================
      打包文档(Archive Tasks)
      Create the project jars: xxx1.jar and xxx2.jar
    ===================================================================
-->
   <target name="jars" depends="build">
        <jar basedir="${build.classes}" jarfile="${build.lib}/${app.jar}"/>
    </target>

<!--
     ===================================================================
       Creates the API documentation
     ===================================================================
-->
    <target name="javadocs"
            depends="jars"
            description="--> creates the API documentation">
        <!--copy docs 手册... -->
        <copy todir="${build.docs}">
            <fileset dir="${docs.dir}"/>
        </copy>

        <javadoc packagenames="hello.ant.*"
                 sourcepath="${src.main}"
                 defaultexcludes="yes"
                 destdir="${build.docs.api}"
                 author="true"
                 version="true"
                 use="true"
                 windowtitle="Docs API">
             <doctitle><![CDATA[<h1>hello ant Docs API</h1>]]></doctitle>
             <bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
             <tag name="todo" scope="all" description="To do:" />
         </javadoc>
    </target>

<!--
     ===================================================================
       Create the distribution that can run (Archive Tasks)
       主要是从各目录中把该copy的copy上
     ===================================================================
-->
   <target name="dist" depends="javadocs">
        <!--copy bin 执行文件 -->
        <copy todir="${dist.bin}">
            <fileset dir="${src.script}/"/>
        </copy>
        <copy todir="${dist.docs}">
            <fileset dir="${build.docs}/"/>
        </copy>
        <!-- copy lib 文件 -->
        <copy todir="${dist.lib}">
            <fileset dir="${build.lib}/"/>
        </copy>

    </target>
<!--
     ===================================================================
      Cleans everything(File Tasks)
      例如可以删除build中的文件,留给你发挥吧
     ===================================================================
-->

</project>

2008-03-24

关于Html解析器(转载)

关于Html解析器

一段时间makefire一直在和我讨论关于html解析的话题,但是一直没有怎么用心去看看有没有三方的开源项目可以实现.窃以为就和xml解析的过程差不多,但是可能会灵活一些,毕竟html的语法不如xml那么强制规范,所以遇到不规范的书写就不知道该怎么解析了.

今天在google和sourceforge.net上面找了找,发现有人确实有心,做了一个html parser的开源项目,jericho-html而且已经到了1.5版本了,看样子也应该比较成熟了,于是下载看看能否适应我的需求.发现一共只有50个类左右(大部分都是数据bean,比如emlment,tag之类的),不依赖于其他三方的lib,所以可以直接就使用了.看了一下使用的sample:

import au.id.jericho.lib.html.*;
import java.util.*;
import java.io.*;
import java.net.*;
 
public class DisplayAllElements {
public static void main(String[] args) throws Exception {
String sourceUrlString="data/test.html";
if (args.length==0)
  System.err.println("Using default argument of \""+sourceUrlString+'"');
else
sourceUrlString=args[0];
if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString;
URL sourceUrl=new URL(sourceUrlString);
String htmlText=Util.getString(new InputStreamReader(sourceUrl.openStream()));
Source source=new Source(htmlText);
source.setLogWriter(new OutputStreamWriter(System.err));
                  // send log messages to stderr
for (Iterator i=source.findAllElements().iterator(); i.hasNext(); )
 
{
Element element=(Element)i.next();
 
System.out.println("---------------------------------"
                                 +"----------------------------------------------");
System.out.println(element.getDebugInfo());
System.out.println(element);
}
  }
}

有一个Util类从给如的uri中得出所有的htmlstr,然后再对这个str转换成为一个html的source,source可以设置logwriter,这样子一来就可以注入log4j的工具和其结合起来,如果放到一个aop的框架里面也会和其他的lib造成依赖和耦合关系.Tag类中静态定义了一大批的字符串变量,代表各种html的标签,而source中有方法遍历(iterate)和查找(findAllStartTags),找到则可以显示其内容和属性.

同时这个项目还提供了对jsp,asp,php等脚本语言的支持,可以对jsp或者php的源码进行分析.项目的实际意义可以在于网页搜索工具,比如做一个baidu或者google类似的搜索工具,只需要对我库中已经注册过的网站(url)定点的进行页面分析,分析关键字并且存在数据库中,则搜索的速度可以大大提高.

不知道google的实现方式是文本搜索,全文索引还是其他方式?

 
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.
추가한 리스트 항목이 없습니다.