<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>努力原创，渴望为自主研发贡献力量</title>
    <description>架构设计师,也是我不变的追求与目标.
             ---我心依旧 </description>
    <link>http://beyondsanli.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>优秀员工感想</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/212665" style="color:red;">http://beyondsanli.javaeye.com/blog/212665</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我叫***，是***DSS部门一名java前端工程师。在此夏日炎炎之际，我很荣幸被评为该次优秀员工，借此机会我想与大家一起分享我</p>
<p>得奖后的喜悦和一些感想。<br />&nbsp;&nbsp;&nbsp;&nbsp; 来到***已经有半年了，到这里给我最深刻的感受是这里是充满活力的团队，沟通和协作都可以在很畅快且又很严谨的氛围下度过。我想</p>
<p>这样的工作氛围应该是同公司倡导的内部开放、透明、无等级的沟通，无障碍的交流是保持一致的。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们DSS部门是做分析的，在工作中接触了数据仓库，维度等概念，我想借用数据仓库概念来表达自己作为***一分子的感受。***像个</p>
<p>数据仓库但是这个数据仓库呢主要是面向电信业务的。我们就是数据仓库中的数据。<br />&nbsp;&nbsp; 首先被录入的人员要经历一次抽取(选拔)的过程<br />抽取的过程是一次模型的转换，就像员工被录用了完成了从普通社会一份子到职业人的转变。<br />&nbsp; 因为为了满足不同客户的需求或者业务的需求，我们需要多维的展现自己来满足用户的需求。在不段满足满足客户和业务需求的过程中。<br />我们又需要不段的调整展示的维度逐步的完善。数据仓库让多维展示自己成为了可能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把现实的数据以多维的形式来表达，有利于分析。公司是个平台让我们在各自的岗位上发挥自己的才华，尽量发挥其特长。包括维度自</p>
<p>由组合、旋转、钻取等等，而这些行为是比较直观的，符合人脑的思维习惯。我把这段话理解为我们作为多维的数据的同时还要怎样去完成维</p>
<p>度间(同事间)的自由组合， 知识点灵活的运用触类旁通。我想完全更改钻取的概念把它理解是一个钻研和突破的过程。一个产品在经历用户体</p>
<p>验和长期使用以后有很多值得完善的地方，我们员工有责任在各自工作的岗位上进行超越。秉承追求卓越、超越自我，坚持不懈、不断进步 客</p>
<p>观公正、正直诚实的思想为平台的壮大服务。<br />&nbsp;&nbsp;&nbsp; 希望自己在以后工作中更好的为公司服务。&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; 祝愿公司更加辉煌。</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/212665#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 11:30:49 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/212665</link>
        <guid>http://beyondsanli.javaeye.com/blog/212665</guid>
      </item>
      <item>
        <title>c语言 温习</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/212370" style="color:red;">http://beyondsanli.javaeye.com/blog/212370</a>&nbsp;
          发表时间: 2008年07月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="c">#include &lt;stdio.h&gt;         /* 包含标准库的信息 */
main()                     /* 定义名为main的函数，它不接受参数值 */
{                          /* main函数的语句都被括在花括号中 */
printf("hello world\n");  /* main函数调用库函数printf以显示字符序列，其中\n代表换行符*/
}
</pre>
<p>&nbsp;温习从打印出下列内容：&ldquo;hello world&rdquo;开始</p>
<p>&nbsp;&nbsp; </p>
<pre name="code" class="cpp">#include&lt;iostream&gt;
    using namespace std; 

    int main() { 
        cout &lt;&lt; "Hello, world!" &lt;&lt; endl; 
        return 0; 
    } </pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/212370#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Jul 2008 16:11:52 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/212370</link>
        <guid>http://beyondsanli.javaeye.com/blog/212370</guid>
      </item>
      <item>
        <title>鸡声某店月，人迹板桥霜 转载中国青年散文作家三利</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/210365" style="color:red;">http://beyondsanli.javaeye.com/blog/210365</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 翻来覆去怎么也睡不着，我想我是顶不住这突如其来的压力，父母的埋怨，朋友的嘲笑，还有自责，模糊中似乎听到了六弦琴被波动响了一下，于是决定去流浪了，踏上运动鞋穿上了发白的牛仔裤，当然少不了背上了吉他。<br />&nbsp;&nbsp;&nbsp; 使出了用不完的叛逆我冲到了街道，路途中惊醒了睡在路边的也许同样在流浪的鸡群，它们四处逃窜，偶尔听到了母鸡可能要跟随公鸡咯咯的叫声。秋高气爽一阵冷风使我裹紧了上衣，明月高挂。我看到仍然有几个影子在晃动。我的第一站是公园，公园此刻冷静的像坟墓。很远便看到了板桥，孤孤单单，尽是石板，破石，石头因被长期的踏磨，在月光下泛出了白光，坐在长椅上有点湿，坐下来听到草丛中伴有的虫叫，虫也还没有睡觉，难道也在忧伤吗？嘶嘶，旁边的小树被风一吹，又不情愿的掉下了几片树叶。我扣好了衣服上的扣子，抱起吉他来首&lt;&lt;无尽空虚&gt;&gt;吧。伴着我那不怎么样的伴奏，我感觉风更大了，树叶在拼命的晃着，板桥泛白的石边也越发的亮了，虫也许是吓跑了不再叫了....<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好像是浑身都湿了，也是是屁股下面太冰冷了，我竟然有点清醒了，听到几声鸡鸣，看到了公园里有晨练的人了，但是他们并没有留意我，椅子上已经白了，我浑身不舒服。<br />&nbsp;&nbsp;&nbsp; 索性站起来，走出公园，街上人渐渐多了，昨晚那几只鸡也不知道跑到哪儿去了，回家了吧。<br />&nbsp;&nbsp; 我努力在身上搜出了五元钱，吃顿早餐，归家吧！难忘这鸡声明月人迹，板桥还有那霜。</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/210365#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 08:17:57 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/210365</link>
        <guid>http://beyondsanli.javaeye.com/blog/210365</guid>
      </item>
      <item>
        <title> 遗憾  转载中国青年散文作家三利</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/209988" style="color:red;">http://beyondsanli.javaeye.com/blog/209988</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java"><span style="font-size: large;"><strong>                                                      遗憾
当我再次拥有遗憾时，我又是在寻觅着原因。可能是因为异想天开突然的跳在我眼前。于是我想到一定是诱惑勾引了我。

   诱惑真的很讨厌，诱惑是初春河上飘过的第一丛草垒，像暮晚天际掠过的飞鸿，是月光如水的庭院，像满城满花间衣袖盈风的少女的笑黡。是令人心动的温暖与温柔。诱惑曾经使我快乐，但是遗憾使我迷惘，我想说我要拒绝诱惑，舍去遗憾。

    逝者如斯，想着曾经的为遗憾痛惜，时间便从泪水中跑掉，记着在咒骂诱惑的可恶时，时间又从肮脏的话语中溜走。再于是便冒出了想法，我想对诱惑大吼：走开。
    因为遗憾我开始不在天天快乐了，开始没有好脸色了，我也开始偶尔讨厌别人欣喜的东西。我开始稳重对待每件虽然会是微不足道的事情。我开始学着总结。。。。至此我由感到了欣喜。蓦然回首，没有遗憾的到来真的好难走。
      想到以前和朋友一起玩到了深夜，第二天上课了成为了班级中唯一的睡觉者。那时真的没有考虑过做个什么人。更没有考虑会留下遗憾。也许是瞌睡的诱惑太强大了吧。
      想着自己痛苦时的借酒消愁，酒陶醉了快乐，灭了哀愁，本来酵母是无罪的，但是却在我身上印证了少年不知道愁滋味。
      看看现在，经历过多次的违背自己的最初的梦想的事情后，竟然在心里慢慢的构筑了道道防线，用来抵制诱惑，我发现我迷惘的次数越来越少了，
  简单的说：熬夜浪费了睡觉的时间，苦了身体，喝酒也是要伤害身体的。
      
当然我们需要继续成长下去，我们没有必要惊诧自己的改变，可能变化是在无声无息中完成。幼稚的想世界是没有完人的，但是进步是时刻存在的只要你努力，这种进步的多少也许就是可以用你抛弃多少遗憾，
拒绝多少诱惑可以体现的吧？
     当我们惊叹大海的广阔宇宙的深奥的时候，当遗憾再次侵扰我们的时候便有了简单的道理：
      当你得到了友情，别告别那深恶痛绝的狡诈。当你得到了真诚便告别貌似善良的虚假，当你得到希望之角，
便告别了那忧郁之岸的彷徨。当一次的遗憾一次次的不再遗憾伴随你我左右后我应该欣喜的是此真是你我的成长的故事、

                                                                                                                                     2000年10.25

        

 

 

  



 


 
</strong></span></pre>
<p style="text-align: center;"><span style="font-size: large;"><strong>&nbsp;</strong></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/209988#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 07:19:49 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/209988</link>
        <guid>http://beyondsanli.javaeye.com/blog/209988</guid>
      </item>
      <item>
        <title>程序员平民化，idea 可以帮助你我插上翅膀</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/207721" style="color:red;">http://beyondsanli.javaeye.com/blog/207721</a>&nbsp;
          发表时间: 2008年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近讨论很热的主题facebook,openSocial我理解idea太重要了!大家发表下自己的看法！</p>
<p><a href="../../../blog/207655"><span style="color: #108ac6;">&nbsp;</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/207721#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jun 2008 08:58:19 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/207721</link>
        <guid>http://beyondsanli.javaeye.com/blog/207721</guid>
      </item>
      <item>
        <title>Portal实现原理 转载</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/207474" style="color:red;">http://beyondsanli.javaeye.com/blog/207474</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>出自<a href="http://www.javaeye.com/topic/7005">http://www.javaeye.com/topic/7005</a>，转自：<a href="http://buaawhl.javaeye.com">http://buaawhl.javaeye.com</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div id="related_topics" style="LEFT: 25px; POSITION: relative; TOP: 0px">
<ul>
<script type="text/javascript"></script>
<strong>关键字：Portal实现原理</strong> <br /><br />1．Portal用例 <br />读者可以在下面三个网站上注册自己的用户，体会Portal的功能。 <br />http://my.msn.com <br />http://my.yahoo.com <br />http://my.liferay.com <br /><br />My MSN的功能最灵活强大，用户可以任意拖放操作栏目(column)和内容版块(content)的位置和个数。 <br />My Liferay只能选择固定的栏目(column)布局，但可以在本栏目(column)内移动内容版块(content)的位置。 <br />My Yahoo只能选择固定的栏目(column)布局，而且不能移动内容版块(content)的位置。 <br /><br />Portal的结构分为三层。 <br />(1) Page <br />(2) Column，或者称为Pane <br />(3) Content，或者称为Portlet <br /><br />我们来看看Portal的整个操作流程。 <br />(1) 每个Column的下方都有一个[Add Content]按钮，让用户选择加入自己喜欢的内容。 <br />从这里，我们知道，Portal系统里面有一个公用的Common Portlet Repository，供用户选用。 <br /><br />JSR168 Portlet规范里面定义了Portlet Deployment Discriptor。Common Portlet Repository以这个Portlet Deployment Discriptor的格式存放。 <br /><br />开源项目JetSpeed的XReg文件用来存放Common Portlet Repository的定义。 <br /><br />(2) 加入Content之后，用户的Page和Column里面就多了这个Content。下次用户登陆的时候，就会看到自己订制的Portal版面。 <br />从这里，可以看出，Portal系统会纪录用户的个人Portal配置信息 &ndash; User Portal Config。 <br /><br />开源项目JetSpeed的PSML文件用来存放User Portal Config的定义。 <br /><br />------- 综上。 <br />Add Content的整个流程为： <br />Common Portlet Repository --&gt; Add Content --&gt; Personal Portal Config <br /><br />Display Portal的整个流程为： <br />从Personal Portal Config读取用户配置的Portlet ID --&gt; 根据Portlet ID，从Common Portlet Repository查找详细的Portlet定义 --&gt; 根据这个详细的Portlet定义显示这个Portlet。 <br /><br />2．Portal实现 <br />我们考虑如何用Java来实现Portal。 <br /><br />2.1 Dynamic Include <br />首先，我们采用最简单的思路，我们用100个JSP文件(1.jsp, 2.jsp, 3.jsp, &hellip; 100.jsp等)，代表100个Portlet。 <br />用户页面MyPage.jsp包含用户选定的多个Portlet。 <br />现在，假设用户选取的Portlet为1.jsp, 3.jsp, 7.jsp等3个Portlet，那么我们如何在MyPage.jsp中显示这些Portlet？最直观的做法是，用jsp:include。比如： <br />&lt;table&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;jsp:include page=&rdquo;1.jsp&rdquo; /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;jsp:include page=&rdquo;3.jsp&rdquo; /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;jsp:include page=&rdquo;7.jsp&rdquo; /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;/table&gt; <br />由于&lt;jsp:include&gt;只能指定固定的jsp文件名，不能动态指定jsp文件名。我们需要把&lt;jsp:include&gt;翻译为Java code &ndash; RequestDispatcher.include(); <br />下面我们换成这种写法。 <br />[code:1] <br />&lt;table&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;% request.getRequestDispatcher(&rdquo;1.jsp&rdquo;).include(request, response); /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;% request.getRequestDispatcher(&rdquo;3.jsp&rdquo;).include(request, response); /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;% request.getRequestDispatcher(&rdquo;7.jsp&rdquo;).include(request, response); /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;/table&gt; <br />[/code:1] <br />进一步改进MyPage.jsp。 <br />[code:1] <br />&lt;% String[] fileNames = {&ldquo;1.jsp&rdquo;, &ldquo;3.jsp&rdquo;, &ldquo;7.jsp&rdquo;}; %&gt; <br />&lt;table&gt; <br />&lt;% for(int i = 0; i &lt; fileNames.length; i++) { <br />String fileName = fileName s[i]; %&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;% request.getRequestDispatcher(fileName).include(request, response); /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;% } // end for %&gt; <br />&lt;/table&gt; <br />[/code:1] <br />其中的fileNames的内容可以各种各样，只要RequestDispatcher能够处理。 <br />比如Velocity，fileNames = {&ldquo;1.vm&rdquo;, &ldquo;3.vm&rdquo;, &ldquo;7.vm&rdquo;}; <br />比如URL，fileNames = {&ldquo;/portlet1.do&rdquo;, &ldquo;/portlet3.do&rdquo;, &ldquo;/portlet4.do&rdquo;}; <br />我们可以看到，如果我们从用户配置中读取fileNames的内容，这就是一个简单的Portal实现。 <br />[code:1] <br />&lt;% String[] fileNames = (String[])session.getAttribute(&ldquo;portlets.config&rdquo;); %&gt; <br />&lt;table&gt; <br />&lt;% for(int i = 0; i &lt; fileNames.length; i++) { <br />String fileName = fileNames[i]; %&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;% request.getRequestDispatcher(fileName).include(request, response); /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;% } // end for %&gt; <br />&lt;/table&gt; <br />[/code:1] <br />2.2 Portlet Interface <br />下面我们来扩展这个例子。 <br />假设每个Portlet都规定实现一个Portlet接口。 <br />[code:1] <br />interface Portlet { <br />void render(request, response); <br />}; <br /><br />MyPage.jsp如下： <br /><br />&lt;% String[] portletClassNames = (String[])session.getAttribute(&ldquo;portlets.config&rdquo;); %&gt; <br />&lt;table&gt; <br />&lt;% for(int i = 0; i &lt; portletClassNames.length; i++) { <br />String className = portletClassNames[i]; <br />Portlet portlet = (Portlet)Class.forName(className).newInstance(); %&gt; <br />&lt;tr&gt;&lt;td&gt; <br />&lt;% portlet. render (request, response); /&gt; <br />&lt;/td&gt;&lt;/tr&gt; <br />&lt;% } // end for %&gt; <br />&lt;/table&gt; <br /><br />Portlet类的示例代码如下： <br />public class Portlet7{ <br />public void render(request, response){ <br />request.getRequestDispatcher(&ldquo;7.jsp&rdquo;).include(request, response); <br />} <br />}; <br />[/code:1] <br />上述代码是Portal显示Portlet的核心流程的一个简化版本。 <br />JSR168 Portlet规范里面定义了真正的Portlet接口定义。 <br /><br />2.3 Portlet Action <br />Portlet的操作包括，最大化/最小化/恢复/关闭/编辑/帮助/上下移动，等等。 <br />这些操作都有对应的Action类。 <br />开源项目JetSpeed的module/actions/controls目录下面包含Maximize, Minimize, Close等Action类。 <br />开源项目Liferay的portal/action目录下面包含Maximize, Minimize, Close等Action类。 <br /><br />Portal的操作不仅包括上述Portlet的操作，而且包括其它更高级别的操作。 <br />比如，Add/Move Page, Add/Move Column, 换Layout, 换Skin，之类。 <br /><br />2.4 Portlet Cache <br />我们操作Portlet的时候，往往只操作某个特定的Portlet，或者只是变化Portlet的位置。这时候，页面中大多数的Porlet的内容是不变的，只有一小块Portlet变化。 <br />我们需要把Portlet的内容缓存起来。Portlet接口有一个render(request, response)方法，我们可以订制定制response类，截获portlet的输出，保存到Portal系统的内容Cache当中。 <br />比如，前面提到liferay开源项目，其StringServletResponse类把Portlet的输出保存到一个String当中。 
</ul>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/207474#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 14:28:08 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/207474</link>
        <guid>http://beyondsanli.javaeye.com/blog/207474</guid>
      </item>
      <item>
        <title>网络管理系统OpenNMS的安装配置 转载</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/207315" style="color:red;">http://beyondsanli.javaeye.com/blog/207315</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>出处&nbsp; <a href="http://martri.javaeye.com/blog/203477">http://martri.javaeye.com/blog/203477</a></p>
<div class="blog_content">最近公司本人为做了一个内部项目，是有关网络监控方面，想借鉴Open Source的资源，上网搜索了一下，基本可以分两类： <br />1） 主要对流量及主机在线状态监控软件,如最初的MRTG,PRGT,CACTI,Hobbit, <br />2） 能对服务器的关键服务及进程进行监控的软件,如Big Brother,Nagios,OpenNMS <br />综合考虑后，决定选用OpenNMS，从公司的角度方面考虑主要它是用java开发，可以和公司的有关软件进行集成，从监控的应用方面，OpenNMS的界面虽然不是很美观，但其在监控服务方面有出色的表现，功能也在众多相关软件里是表现非常出色的。选定以后，首先当然就是安装配置，然后进行重新的分析和设计，参考网络的一些经验，现在就其安装和配置做相关总结： <br /><br />一、安装 Sun J2SE Java SDK <br />之前已经安装好，故就不安装，就设置相关的环境变量： <br />JAVA_HOME=/usr/jdk/jdk1.5.0_01 <br />export PATH=$PATH:$JAVA_HOME/bin <br /><br />二、安装postgresql <br />下载postgressql然后运行一下命令： <br />./configure --prefix=/usr/local/pgsql <br />make <br />make install <br />安装成功后，开始配置postgresql： <br />PostgreSQL 不能以 root 用户运行，必须建立对应的用户和组。 <br /><br /># useradd postgre （自动建立 postgre 组） <br /><br /># vi ~postgre/.bash_profile <br />添加： <br />PGLIB=/usr/local/pgsql/lib <br />PGDATA=$HOME/data <br />PATH=$PATH:/usr/local/pgsql/bin <br />MANPATH=$MANPATH:/usr/local/pgsql/man <br />export PGLIB PGDATA PATH MANPATH <br /><br />修改设定参数postgresql.conf及pg_hba.conf <br />vi /export/home/postgres/data/postgresql.conf <br />修改下列参数 <br />tcpip_socket = true <br />max_connections = 256 <br />shared_buffers = 1024 <br />vi /var/lib/pgsql/data/pg_hba.conf <br />加入下面二行 <br />local all all trust <br />host all all 127.0.0.1 255.255.255.255 trust <br />原文提到如果您的系统支持IPv6则可加入(不支持建议不要增加) <br />host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff trust <br /><br />以 postgres 用户登录， <br /># su - postgre <br />建立数据库目录： <br />$ mkdir data <br /><br />启动数据库引擎： <br />$ initdb <br />最后会显示如下: <br />/usr/local/pgsql/bin/postgres -D /export/home/postgres/data <br /><br />/usr/local/pgsql/bin/pg_ctl -D /export/home/postgres/data start <br />建立数据库 <br />$createdb mydb <br />$psql mydb <br />建立表 <br />CREATE TABLE mytable ( <br />id varchar(20), <br />name varchar(30)); <br />插入数据 <br />INSERT INTO mytable values('Author', 'MartriWang'); <br /><br />三、安装 Tomcat4 <br />现阶段，OpenNMS只支持tomcat4（安全认证问题），不能支持tomcat5，故只能采用tomcat4 <br />到 http://archive.apache.org/dist/jakarta/tomcat-4/archive/v4.1.24/rpms/ 处下载 <br />tomcat4-4.1.24-full.2jpp.noarch.rpm <br />tomcat4-webapps-4.1.24-full.2jpp.noarch.rpm <br />vim /etc/tomcat4/tomcat4.conf <br />修改下面二行 <br />JAVA_HOME="/usr/java/j2sdk1.4.2_08/" <br />TOMCAT_USER="root" <br /><br />四、安装 rrdtool <br />下载源代码，然后运行一下命令： <br />./configure --prefix=/usr/local/rrdtool <br />make <br />make install <br /><br />五、安装 OpenNMS <br />1.利用svn下载OpenNMS: <br />svn co https://opennms.svn.sourceforge.net/svnroot/opennms/opennms/branches/OPENNMS_1_2_BRANCH opennms <br /><br />2.配置OpenNMS环境变量 <br />export OPENNMS_HOME=/opt/Opennms <br /><br />3.编译OpenNMS： <br />sh build.sh compile <br />sh build.sh install <br /><br />4.配置OpenNMS <br />$OPENNMS_HOME/bin/runjava -s <br />/usr/local/opennms/bin/install -disU <br />$OPENNMS_HOME/bin/install -y -w $CATALINA_HOME/webapps -W $CATALINA_HOME/server/lib <br /><br />修改$OPENNMS_HOME/etc/discovery-configuration.xml <br />&lt;discovery-configuration threads="1" packets-per-second="1" <br />initial-sleep-time="300000" restart-sleep-time="86400000" <br />retries="3" timeout="800"&gt; <br /><br />&lt;include-range retries="2" timeout="3000"&gt; <br />&lt;begin&gt;192.168.31.1&lt;/begin&gt; <br />&lt;end&gt;192.168.31.254&lt;/end&gt; <br />&lt;/include-range&gt; <br /><br />&lt;include-url&gt;file:/opt/OpenNMS/etc/include&lt;/include-url&gt; <br /><br />&lt;/discovery-configuration&gt; <br /><br />您可以侦测多个网段只要加入以下的参数在设定档中即可。 <br />&lt;include-range retries="2" timeout="3000"&gt; <br />&lt;begin&gt;192.168.X.1&lt;/begin&gt; <br />&lt;end&gt;192.168.X.254&lt;/end&gt; <br />&lt;/include-range&gt; <br /><br />启动执行： /usr/local/opennms/bin/opennms start <br />开启浏览器，地址 <br />http://192.168.0.6:8080/opennms <br />预设使用者为：admin密码：admin <br /><br />至此OpenNMS安装成功，最后可以利用elipse进行开发，通过FTP进行同步。以后想配置一个ANT文件进行自动编译管理。至于改造设计，以后将近一步开发探索。 </div>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/207315#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 09:04:05 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/207315</link>
        <guid>http://beyondsanli.javaeye.com/blog/207315</guid>
      </item>
      <item>
        <title>报表工具 基本概念 </title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/207204" style="color:red;">http://beyondsanli.javaeye.com/blog/207204</a>&nbsp;
          发表时间: 2008年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>两种定义<br />1、语义层&mdash;&mdash;是将数据库中的列(字段)按决策主题重组为面向用户的对象,对象可以是数据库中的表、列、连接(多字段组合)以及对多字段进行运算的表达式。<br />2、语义层是一个覆盖在数据库内部数据对象之上的一个解释层，是用户和数据库之间的一个代码翻译层，也就是：将数据库中比较凌乱、复杂的数据对象（例如：存储在table中的各个字段的记录）通过预先定义好的规则（&ldquo;语义层&rdquo;）过滤转换成实际使用的业务对象。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Universe 是对数据库中数据结构（表，列和连接等）的面向业务的映射。<br />类是Universe中对象的逻辑分组，通常，类名反映了业务概念，体现了对象的类型和种类。<br />对象是Universe中的最具体的内容，对象映射了数据库中的数据或数据派生物。<br />为了进行多维分析，对象被限定为以下三种类型之一：维、明细或度量。<br />维对象是用于分析的参数，维通常和一个层次结构相关。<br />明细对象为维对象提供描述，但不是分析的重点。<br />度量对象体现了数值的信息，用这些信息来对维对象进行度量。</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/207204#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Jun 2008 19:11:14 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/207204</link>
        <guid>http://beyondsanli.javaeye.com/blog/207204</guid>
      </item>
      <item>
        <title>byte,char int 之间关系即转换</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/207154" style="color:red;">http://beyondsanli.javaeye.com/blog/207154</a>&nbsp;
          发表时间: 2008年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>曾经遇到一个问题 char word='a',转换成'b'的问题。</p>
<p>&nbsp;在过去的记忆中汇编中20H转换成b的情况</p>
<p>&nbsp;</p>
<p>问了别人才有个解决方案</p>
<pre name="code" class="java">	char word='a';
	System.out.println(word = (char)(word+1));</pre>
<p>&nbsp;</p>
<p>现在的程序员呀，什么都不懂呀是程序员呀，就是典型的IT民工！</p>
<p>大家在byte,char int 上有什么经验可以拿来共享下，谢谢</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/207154#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Jun 2008 16:49:04 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/207154</link>
        <guid>http://beyondsanli.javaeye.com/blog/207154</guid>
      </item>
      <item>
        <title>表的自连接同子查询有区别？</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/207051" style="color:red;">http://beyondsanli.javaeye.com/blog/207051</a>&nbsp;
          发表时间: 2008年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>运用自连接同子查询之间有什么区别？请大家给点意见</p>
<p>&nbsp;</p>
<p>SELECT R1.readerid,R1.readername,R1.unit,R1.bookcount<br />FROM ReaderInfo AS R1,ReaderInfo AS R2<br />WHERE R2.readerid=9704<br />AND R1.bookcount&gt;R2.bookcount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--连接关系<br />ORDER BY R1.bookcount</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>SELECT readerid,readername,unit,bookcount<br />FROM ReaderInfo<br />WHERE bookcount&gt;(SELECT bookcount&nbsp;&nbsp;&nbsp;--使用子查询<br />FROM ReaderInfo <br />WHERE readerid=9704)<br />ORDER BY bookcount</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/207051#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Jun 2008 11:54:48 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/207051</link>
        <guid>http://beyondsanli.javaeye.com/blog/207051</guid>
      </item>
      <item>
        <title>转载 男人一生必须要做10件事</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/204543" style="color:red;">http://beyondsanli.javaeye.com/blog/204543</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">1.至少挑战一次自己的极限，并且坚持到成功。不管是考试得第一名，或者游泳游过不曾穿越的河流，或者在讲台上当众演讲，你至少要成为一次主角，至少要让成功证明你一次，这样，在漫长而平淡的一生之中，你都始终相信自己是最棒的，自己有权在这个世界好好生活。 

2.至少要有几个哥们，找到年少轻狂时共同成长的友谊。不管是纵酒狂歌，还是浪迹天涯；不管是春风得意，还是屡败屡战；在一起时，经常握握朋友的手，从中汲取力量分手之后，有一天记得寻找久已失去联系的旧日朋友。男人的友谊是你面对战场时坚实的依靠。 

3.至少投入地爱一次。使人燃烧的爱情也许不能持久，但足够点亮男孩子一生的前程。曾经真爱，男人的肩膀才开始变得伟岸，因为只有为了自己的最爱，男人最优秀的品质才得以开发，才成为一个可以托付的大写的人。有人说爱情使人脆弱，但是真正的爱情使人坚强。 

4.至少体验一次挫折，学习承受失败，并且学会反抗。男人的成人礼与他的三十岁生日无关———麦康伯在非洲猎狮子的时候忽然明白这个道理，这时候他被他一直害怕失去的妻子射杀，海明威没有告诉我们是不是误杀———但重要的是，男人不怕失去任何东西，丈夫轻身重一诺，从容游走于困境之中，将它变成辉煌的铺垫。 

5.至少定一个计划，并且不折不扣地完成它。如有可能，体验一次军旅生活，在限制中强化律己与责任意识；男人的计划力和执行力决定了这个男人成功的概率，勇于并且善于实现自己的目标，男人的理想就具体为现实的成功，而成功，今天似乎成了男人的硕大特征。 

6.至少每天衷心夸一次家人，感谢他们与你共同经营一个美满家庭。有机会的话倾听婴儿的第一声啼哭，让孩子带你成长在新时代，让你感受成熟也感受童心。常回家看看父母，陪父母聊聊天，至少像宠孩子一样关心父母。拜访你的恩师，大声说出你的爱，只有爱和感谢可以让你的幸福常在常新。 

7.至少培养一种个人爱好，体验工作和家庭之外的另一种生活方式。寻找适合自己的娱乐及健身方式；珍藏一件特殊的物品；参加一次狂欢活动，感受激情与狂野；在野外远足，小住数日，倾听大自然的声音；买几张彩票，碰碰运气。所有爱好告诉你，生活并不只是按部就班，还有好多梦想来不及实现，稍微收敛一下狂妄之心，去体验丰富多彩生活的各个方面。 

8.至少向自己所伤害过的人道一次歉，尽管你的选择迫不得已。至少宽恕一次，那个曾有负于你的人也有不得已之处；重新认识你的对手，从他们身上找到值得你与之竞争的优良素质；接受并珍惜生活赐予你的一切，如有可能，弥补一下生活的缺陷。 

9.至少每年放纵自己旅行游玩一次。天地很大，你做得再成功也有可能呆在井底———到海阔天空，名山大川去扩充自己的胸襟：飘飘何所似，天地一沙鸥。到文化古迹去追寻历史的脚步：吟诗作对，风流自赏一把；凭吊古战场，感受苍凉和悲壮；纵身大化，然后悲天悯人。 

10.至少写一点小东西，记录成长过程中的酸甜苦辣。写一个小自传，看看自己能写下的东西有多少；想象生命的最后一刻，假如明天来临，能否感悟生死；写下遗嘱，看看一生的安排是否已经妥当，是否还有未了的心愿，抓紧现在赶紧去做，因为身为男人，你今生一定有机会有能力去做自己想做的事！</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/204543#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 07:50:03 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/204543</link>
        <guid>http://beyondsanli.javaeye.com/blog/204543</guid>
      </item>
      <item>
        <title>lucene 的分词StandardAnalyzer</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/204152" style="color:red;">http://beyondsanli.javaeye.com/blog/204152</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package analyzer;

import java.io.IOException;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;

public class StandardAnalyzerTest {
/**
 * 构造函数
 *
 */
	public StandardAnalyzerTest()
	{
		
	}
	
	public static void main(String[] args)
	{//初始化一个standardAnalyzer对象
		Analyzer aAnanyzer=new StandardAnalyzer();	
		StringReader sr=new StringReader("People are always talking about 'the problem of youth'.");
		//生成TokenStream对象
		TokenStream ts=aAnanyzer.tokenStream(sr);	
		int i=0;
		Token t;
		try {
			//调用next()方法不断的取得下一个切出的词
			t = ts.next();
			while(t!=null)
			{
				i++;
				System.out.println("Line "+i+":"+t.termText());
				t=ts.next();
			}
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
	}
}
</pre>
<p>&nbsp;1:对空格进行了分词</p>
<p>&nbsp;2：大写都转换成小写</p>
<p>&nbsp;3：对停止词的过滤如a,an ,the 等小词</p>
<p>&nbsp;4:删除了所有的标点符号</p>
<p>&nbsp;</p>
<p>下面是汉语的效果</p>
<pre name="code" class="java">package analyzer;

import java.io.IOException;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;

public class StandardAnalyzerTestForCH {

	public StandardAnalyzerTestForCH()
	{
		
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
      Analyzer a=new StandardAnalyzer();
      StringReader sr=new StringReader("龙门石窟位于山西省大同市西 郊，是 '我国古代艺术的宝贝!");
      
      TokenStream ts=a.tokenStream(sr);
      
      int i=0;
      try {
		Token t=ts.next();
		while(t!=null)
		{
			i++;
			System.out.println("Line "+i+":"+t.termText());
			t=ts.next();
		}
	} catch (IOException e) {
		// TODO 自动生成 catch 块
		e.printStackTrace();
	}
      
      
	}

}
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/204152#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jun 2008 14:42:06 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/204152</link>
        <guid>http://beyondsanli.javaeye.com/blog/204152</guid>
      </item>
      <item>
        <title>lucece 对txt建立索引并且查询的案例</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/203445" style="color:red;">http://beyondsanli.javaeye.com/blog/203445</a>&nbsp;
          发表时间: 2008年06月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package case1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateField;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;

public class IndexFiles {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
	
		File   indexDir = new File("C:\\luceneIndex");
		try {
			IndexWriter writer=new IndexWriter(indexDir,new StandardAnalyzer(),true);
			File files=new File("D:\\chenzk\\lucene");//要对这个文件目录下的所有文件建立索引，保存在indexDir中
			String [] Fnamelist=files.list();
			for(int i=0;i&lt;Fnamelist.length;i++)
			{
				File file=new File(files,Fnamelist[i]);
				
				Document doc=new Document();
				Field fld=Field.Text("path",file.getPath());
				doc.add(fld);
				fld=Field.Keyword("modified",DateField.timeToString(file.lastModified()));
			    doc.add(fld);
				//下面很重要要将查询的东西保存索引文件中去  文件内容
			    FileInputStream in = new FileInputStream(file);
			    Reader reader = new BufferedReader(new InputStreamReader(in));
			    fld = Field.Text("contents", reader);
			    doc.add(fld); 

				writer.addDocument(doc);
				System.out.println("Added:"+doc.get("path"));
				//索引中有3个字段 文件路径，最后修订时间，文件内容
				
			}
		    writer.optimize();
		    writer.close();
		    System.out.println(" Has Added Total "+Fnamelist.length);
		
		
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		
		
	}

}
</pre>
<p>&nbsp; 以上对文件目录建立索引的过程</p>
<p>&nbsp;</p>
<pre name="code" class="java">package case1;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;

public class SearchFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		Analyzer  anlzr=new StandardAnalyzer();
     
		try {
			Query q=QueryParser.parse("java","contents",anlzr);
		    System.out.println(" Searching for :"+q.toString("contents")) ;
		    
		    Searcher serch=new IndexSearcher("C:\\luceneIndex");//索引所在的目录
		    Hits hts=serch.search(q);
		    for(int i=0;i&lt;hts.length();i++)
		    {
		    	Document doc=hts.doc(i);
		    	String path=doc.get("path");
		    	System.out.println("Find "+i+":" +path);
		    	System.out.println("Find :"+doc.get("modified"));
		    	System.out.println("Find: " + doc.get("contents"));

		    	
		    }
		    System.out.println("Find Total: " + hts.length());

		
		} catch (ParseException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		
		
		
	}

}
</pre>
<p>&nbsp;</p>
<p>以上是对索引中关键字查询的过程</p>
<p>&nbsp;</p>
<p>下面是将索引放在内存中的案例：</p>
<pre name="code" class="java">package case2;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.DateField;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

public class IndexTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		try {
			Directory directory = new RAMDirectory();// 将索引放在内存中
			Analyzer analyzer = new SimpleAnalyzer();

			IndexWriter writer = new IndexWriter(directory, analyzer, true);
			String[] docs = { "a b c d e", "a b c d e a b c d e",
					"a b c d e f g h i j", "a c e", "a c e a c e",
					"a c e a b c" };
			for (int j = 0; j &lt; docs.length; j++) {
				Document d = new Document();
				d.add(Field.Text("contents", docs[j]));
				writer.addDocument(d);
			}
			writer.close();
			// 以上是生成索引
			Searcher searcher = new IndexSearcher(directory);
			String[] queries = { "a ", };
			Hits hits = null;
			QueryParser parser = new QueryParser("contents", analyzer);
			parser.setPhraseSlop(0);

			for (int j = 0; j &lt; queries.length; j++) {
				Query query = parser.parse(queries[j]);
				System.out.println("Query :" + query.toString("contents"));
				hits = searcher.search(query);
				// 以上是初始化查询，分析编号1,2
				System.out.println(hits.length() + " total results");

				for (int i = 0; i &lt; hits.length() &amp;&amp; i &lt; 10; i++) {
					Document d = hits.doc(i);

					System.out.println(i + "  " + hits.score(i) + "  " + " "
							+ d.get("contents"));

				}

			}
			searcher.close();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}

	}

}
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/203445#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 15 Jun 2008 11:34:02 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/203445</link>
        <guid>http://beyondsanli.javaeye.com/blog/203445</guid>
      </item>
      <item>
        <title>中关村游行记 跑步版 最初的梦想让我雨中奔跑</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/203425" style="color:red;">http://beyondsanli.javaeye.com/blog/203425</a>&nbsp;
          发表时间: 2008年06月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 这是我第二次来北京出差了，中间有个周末所以有空欣赏下北京的风景，这次的目标是到学府圣地清华看看。第一次来北京<br />是在很忙碌的情况下去了天安门，这个全中国人都向往的地方。那次去天安门因为和同事一起去，少了自我陶醉的感觉！<br />这次我是到北京我没有考虑到要做地铁，公交车等交通工具，我选择了跑步，早上7点多，我从西二旗出发，是用小跑的方式，<br />中间经过了上地七街，在那儿看到huawei不知道是不是传说中的华为，接着就是中国体育大学了，<br />&nbsp; 因为我对海淀区是一点都不了解的，为了让我有方向感我决定跟随工交车 运通205，<br />在跟随的过程中，时不时会看不到公交车或者到了转弯的地方，也不知道怎么走<br />&nbsp;&nbsp; 这个时候我是通过询问别人解决的：<br />&nbsp; 在自己跑步的过程中既然悟出点道理，<br />&nbsp;想法一：<br />&nbsp;&nbsp;&nbsp; 因为我们年轻人价值观，人生观都在不断的完善，有人说你善变，有人说你没有目标，<br />但是我们都清楚，人生道理上拐点会更多，我们会迷惘，会失去方向，在现实的行程中我们会选择了询问，也存在不清楚的误导你的人，<br />但是很容易纠正，在人生的旅途中可以帮助我们识途的，小时候有爸爸妈妈，大点有老师（现在真正传道授业解惑的老师很少了，<br />从我接触到的），然后就是社会上的同事，领导，书籍，视频，社会氛围，我有的时候会同年轻人讨论说，我们要理性思考，<br />中间也有年轻人说要独立思考，每个人心中都有希望那个是目标，目标有小有大，人生旅途更宽广的时候，目标可以订的更大点，<br />如果我们在遇到很多拐点的时候不可以明确方向，小的方面会走很多远路，消耗了体力，大的方面是走了不归路，渐行渐远。<br />所以说我们踏入社会时候，在自己的事业，价值观都待完善的时候，我们是善变的，但是善变的过程中要看到离自己的最初的目标是不是偏离了<br />，这个最初的目标是可以放大的。<br />想法二：</p>
<p>&nbsp; 古代李白同杜甫有一起出游，我们伟大的毛主席也有同朋友一起出游不带一分钱。我在跑步的过程中，既然感觉到自己的孤独，<br />这个问题要深思：是这个世界太大知己难求，还是自己的思维进入了一个小巷了，还是用那句话说成大事者都是孤独的呢，这个是意淫的想法，<br />我们要抵制的呵呵！</p>
<p>&nbsp;</p>
<p>&nbsp; 在通过一个立交桥的时候，我不知道要怎么走了，询问别人后，我知道我穿过立交桥就可以到圆明园遗址了，<br />在圆明园我知道是要收费的，我装自然的想进去，未遂，于是就想，中国的经济还是很独特的，<br />破遗址的，应该用来教育人，也用来赚钱了，不过这个同中国的教育行业，赚钱一样，是保持一致的了。在那看到了毛主席语录，<br />第一次来北京买了很多枚毛主席胸章，问到25元作罢了！</p>
<p><br />&nbsp;&nbsp; 我知道我要到清华了，很是激动，<br />&nbsp;&nbsp;&nbsp; 在清华中，这个是清华官方的描述：绿草青青，树木成荫，湖光山色，景色优雅<br />&nbsp;&nbsp; 我很激动的写下自己的感触，是写在短信上的：清华很美，没有浮华，没有嘈杂，像少女腼腆而又尊贵，像智者饱经风霜而又精神抖擞。<br />青石边槐树下无不承载了历史的底蕴。</p>
<p><br />&nbsp; 之后出了清华，到了北大，因为是先到了清华，到了北大感触不是很大，博雅塔 ，未名湖，顺便我是想到清华北大看有没有书卖，清华没有看到书店<br />北大，倒是看到了计算机的基础课程了，原来人家是搞文的，&ldquo;鄙视&rdquo;下。但是我感觉现在主席都是清华的了，对北大有的资源调整是不是要<br />与时俱进了？<br />&nbsp;还是想买书，还想欣赏沿途的风光，下雨了浑身都湿了，快到西直门外大街的时候我真的太累了，我选择做运通205，回来了，看看站牌我已经走了12站多了，累的不行</p>
<p>在返程的路上，要经过一个立交桥，桥下有夫妻2在卖香瓜，妻子已经在马车上睡着了，丈夫在喂马，看到他妻子已经熟睡了！我轻声对男子说我买香瓜，但是我只买了一个，其实我没有吃这个的习惯！</p>
<p><br />。北京好运，中国好运，所有的在做技术想有所作为的人好运。<br />也许现实的生活，会磨灭我们最初的梦想，但是我还是祝福大家好运，大家加油，中国加油！</p>
<p><br />&nbsp;&nbsp; 声明，如有错别字和语句不通请见谅！<br />&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/203425#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 15 Jun 2008 09:06:55 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/203425</link>
        <guid>http://beyondsanli.javaeye.com/blog/203425</guid>
      </item>
      <item>
        <title>Lucene倒排索引原理  转网友</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/202959" style="color:red;">http://beyondsanli.javaeye.com/blog/202959</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;Lucene是一个高性能的java全文检索工具包，它使用的是倒排文件索引结构。该结构及相应的生成算法如下：<br /><br />0）设有两篇文章1和2<br />文章1的内容为：Tom&nbsp;lives&nbsp;in&nbsp;Guangzhou,I&nbsp;live&nbsp;in&nbsp;Guangzhou&nbsp;too.<br />文章2的内容为：He&nbsp;once&nbsp;lived&nbsp;in&nbsp;Shanghai.<br /><br />1)由于lucene是基于关键词索引和查询的，首先我们要取得这两篇文章的关键词，通常我们需要如下处理措施<br />a.我们现在有的是文章内容，即一个字符串，我们先要<span style="color: #ff0000;">找出字符串中的所有单词，即分词</span>。英文单词由于用空格分隔，比较好处理。中文单词间是连在一起的需要特殊的分词处理。<br />b.文章中的&rdquo;in&rdquo;,&nbsp;&ldquo;once&rdquo;&nbsp;&ldquo;too&rdquo;等词没有什么实际意义，中文中的&ldquo;的&rdquo;&ldquo;是&rdquo;等字通常也无具体含义，这些不代表概念的词可以过滤掉<br />c.用户通常希望查&ldquo;He&rdquo;时能把含&ldquo;he&rdquo;，&ldquo;HE&rdquo;的文章也找出来，所以所有单词需要统一大小写。<br />d.用户通常希望查&ldquo;live&rdquo;时能把含&ldquo;lives&rdquo;，&ldquo;lived&rdquo;的文章也找出来，所以需要把&ldquo;lives&rdquo;，&ldquo;lived&rdquo;还原成&ldquo;live&rdquo;<br />e.文章中的标点符号通常不表示某种概念，也可以过滤掉<br />在lucene中以上措施由Analyzer类完成<br /><br />经过上面处理后<br />&nbsp;&nbsp;&nbsp;&nbsp;文章1的所有关键词为：[tom]&nbsp;[live]&nbsp;[guangzhou]&nbsp;[i]&nbsp;[live]&nbsp;[guangzhou]<br />&nbsp;&nbsp;&nbsp;&nbsp;文章2的所有关键词为：[he]&nbsp;[live]&nbsp;[shanghai]<br /><br />2)&nbsp;有了关键词后，我们就可以建立倒排索引了。上面的对应关系是：&ldquo;文章号&rdquo;对&ldquo;文章中所有关键词&rdquo;。倒排索引把这个<span style="color: #ff0000;">关系倒过来</span>，变成：&ldquo;关键词&rdquo;对&ldquo;拥有该关键词的所有文章号&rdquo;。文章1，2经过倒排后变成<br />关键词&nbsp;&nbsp;&nbsp;文章号<br />guangzhou&nbsp;&nbsp;1<br />he&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />live&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,2<br />shanghai&nbsp;&nbsp;&nbsp;2<br />tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br /><br />通常仅知道关键词在哪些文章中出现还不够，我们还需要知道关键词在文章中出现次数和出现的位置，通常有两种位置：a)字符位置，即记录该词是文章中第几个字符（优点是关键词亮显时定位快）；b)关键词位置，即记录该词是文章中第几个关键词（优点是节约索引空间、词组（phase）查询快），lucene中记录的就是这种位置。<br /><br />加上&ldquo;出现频率&rdquo;和&ldquo;出现位置&rdquo;信息后，我们的索引结构变为：<br />关键词&nbsp;&nbsp;&nbsp;文章号[出现频率]&nbsp;&nbsp;&nbsp;出现位置<br />guangzhou&nbsp;1[2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3，6<br />he&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br />live&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1[2],2[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2，5，2<br />shanghai&nbsp;&nbsp;2[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br />tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br /><br />以live这行为例我们说明一下该结构：live在文章1中出现了2次，文章2中出现了一次，它的出现位置为&ldquo;2,5,2&rdquo;这表示什么呢？我们需要结合文章号和出现频率来分析，文章1中出现了2次，那么&ldquo;2,5&rdquo;就表示live在文章1中出现的两个位置，文章2中出现了一次，剩下的&ldquo;2&rdquo;就表示live是文章2中第2个关键字。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />以上就是lucene索引结构中最核心的部分。我们注意到关键字是按<span style="color: #ff0000;">字符顺序排列</span>的（lucene没有使用B树结构），因此lucene可以用二元搜索算法快速定位关键词。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />实现时&nbsp;lucene将上面三列分别作为词典文件（Term&nbsp;Dictionary）、频率文件(frequencies)、位置文件(positions)保存。其中词典文件不仅保存有每个关键词，还保留了指向频率文件和位置文件的指针，通过指针可以找到该关键字的频率信息和位置信息。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Lucene中使用了field的概念，用于表达信息所在位置（如标题中，文章中，url中），在建索引中，该field信息也记录在词典文件中，每个关键词都有一个field信息(因为每个关键字一定属于一个或多个field)。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;为了减小索引文件的大小，Lucene对索引还使用了压缩技术。首先，对词典文件中的关键词进行了压缩，关键词压缩为&lt;前缀长度，后缀&gt;，例如：当前词为&ldquo;阿拉伯语&rdquo;，上一个词为&ldquo;阿拉伯&rdquo;，那么&ldquo;阿拉伯语&rdquo;压缩为&lt;3，语&gt;。其次大量用到的是对数字的压缩，数字只保存与上一个值的差值（这样可以减小数字的长度，进而减少保存该数字需要的字节数）。例如当前文章号是16389（不压缩要用3个字节保存），上一文章号是16382，压缩后保存7（只用一个字节）。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;下面我们可以通过对该索引的查询来解释一下为什么要建立索引。<br />假设要查询单词&nbsp;&ldquo;live&rdquo;，lucene先对词典二元查找、找到该词，通过指向频率文件的指针读出所有文章号，然后返回结果。词典通常非常小，因而，整个过程的时间是毫秒级的。<br />而用普通的顺序匹配算法，不建索引，而是对所有文章的内容进行字符串匹配，这个过程将会相当缓慢，当文章数目很大时，时间往往是无法忍受的。</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/202959#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 14:33:55 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/202959</link>
        <guid>http://beyondsanli.javaeye.com/blog/202959</guid>
      </item>
      <item>
        <title>lucece建立索引过程</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/202777" style="color:red;">http://beyondsanli.javaeye.com/blog/202777</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<pre name="code" class="java">import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;


public class TextFileIndexer {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO 自动生成方法存根
		File fileDir=new File("D:\\chenzk\\lucene");
		Analyzer luceneAnalyzer=new StandardAnalyzer();
		//创建一个类StandardAnalyzer的一个实例，这个实例是从文本中提取索引项的
		File   indexDir = new File("C:\\luceneIndex");

		IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
        //第一个参数是存储索引文件的路径，第二个参数是指定了在索引的过程中使用什么样的分词器，最后一个参数是一个布尔的参数如果
		//为真表示要创建一个新的索引，如果值为假表示打开一个已经存在的索引
		File [] textFiles=fileDir.listFiles();
		long startTime=new Date().getTime();
		
		//add documents to the index
		for(int i=0;i&lt;textFiles.length;i++)
		{
			if(textFiles[i].isFile()&amp;&amp;textFiles[i].getName().endsWith(".txt"))
			{ //只要你能将要索引的文件转化成文本格式lucene就能为你的文档建立索引
				System.out.println("File "+textFiles[i].getCanonicalPath()+"  is being indexed");
				Reader textReader=new FileReader(textFiles[i]);
				
				//以下是如何添加一个文档到索引文件中
			    Document document=new Document();//	它是由一个或者多个Field组成，我们可以把它想象是一个实际文档
			    //实际的Field是实际文档一些属性，
			    document.add(Field.Text("content",textReader));//域的名称我们需要索引的文本文件的内容
			    document.add(Field.Text("path", textFiles[i].getPath()));//我们需要索引的文本文件的路径
			    indexWriter.addDocument(document);
			    
			    
			}
		}
		
		indexWriter.optimize();
		indexWriter.close();//当我们把文档添加到索引中后，不要忘记关闭索引，这样才保证Lucene把添加的文档写回到硬盘上。
		long endTime=new Date().getTime();
		
		
		
		System.out.println("It took "+(endTime-startTime)+" millseconds to create an index for the files in the directory "+fileDir.getPath()) ;
	}

}
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">File D:\chenzk\lucene\1.txt  is being indexed
File D:\chenzk\lucene\2.txt  is being indexed
File D:\chenzk\lucene\3.txt  is being indexed
File D:\chenzk\lucene\segments.txt  is being indexed
It took 187 millseconds to create an index for the files in the directory D:\chenzk\lucene</pre>
<p>&nbsp;</p>
<p>请大家提供宝贵的意见！谢谢</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/202777#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 08:22:59 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/202777</link>
        <guid>http://beyondsanli.javaeye.com/blog/202777</guid>
      </item>
      <item>
        <title>单点登录（Single Sign On）</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/202345" style="color:red;">http://beyondsanli.javaeye.com/blog/202345</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div style="margin: 0cm 0cm 5.95pt;"><strong><span style="font-size: 12pt;">关键字</span></strong><span style="font-size: 12pt;">：</span><span style="font-size: 12pt;">SSO, Java, J2EE, JAAS</span></div>
<div style="margin: 0cm 0cm 5.95pt;"><strong><em><span style="font-size: 14pt;">1 </span></em></strong><strong><em><span style="font-size: 14pt;">什么是单点登陆</span></em></strong></div>
<div style="margin: 0cm 0cm 5.95pt;"><span style="font-size: 12pt;">单点登录（</span><span style="font-size: 12pt;">Single Sign On</span><span style="font-size: 12pt;">），简称为 </span><span style="font-size: 12pt;">SSO</span><span style="font-size: 12pt;">，是目前比较流行的企业业务整合的解决方案之一。</span><span style="font-size: 12pt;">SSO</span><span style="font-size: 12pt;">的定义是在多个应用系统中，用户只需要登录一次就可以访问所有相互信任的应用系统。</span></div>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/202345#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 08:41:36 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/202345</link>
        <guid>http://beyondsanli.javaeye.com/blog/202345</guid>
      </item>
      <item>
        <title>什么是SOA？</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/202268" style="color:red;">http://beyondsanli.javaeye.com/blog/202268</a>&nbsp;
          发表时间: 2008年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>什么是SOA？要怎么学习，要有怎么样的学习轨迹？请赐教！</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/202268#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jun 2008 19:24:58 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/202268</link>
        <guid>http://beyondsanli.javaeye.com/blog/202268</guid>
      </item>
      <item>
        <title>网友精彩语录</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/201283" style="color:red;">http://beyondsanli.javaeye.com/blog/201283</a>&nbsp;
          发表时间: 2008年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1：</p>
<p>严正声明：&nbsp;&nbsp;&nbsp; <br />&nbsp;此帖在全世界只有一个沙发，即本人现在所在的沙发。<br />&nbsp;沙发两边的扶手同属于一个沙发。任何企图妄想制造两个沙发， <br />&nbsp;或是一个沙发一个板凳的行为，都必将遭到包括中国人民在内的全体看帖人民的反对! </p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/201283#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 08 Jun 2008 11:34:16 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/201283</link>
        <guid>http://beyondsanli.javaeye.com/blog/201283</guid>
      </item>
      <item>
        <title>关于什么是数据仓库的一次对话 转自（http://stlin.javaeye.com）</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/201279" style="color:red;">http://beyondsanli.javaeye.com/blog/201279</a>&nbsp;
          发表时间: 2008年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前几天一个开发同事见我桌面上有一本书&lt;数据仓库&gt;,问我什么是数据仓库,因为他算是外行,于是发生一次有意思的对话,现在想起来,也挺有意思的. <br />问:数据仓库有什么特别的地方? <br />答:没什么特别,跟普通关系数据库没什么两样. <br />问:啊,那有什么特别? <br />答:数据仓库本身物理上也是关系数据库,只是数据仓库系统是一个体系,一个过程.数据仓库技术要解决的问题是如何建立,管理,维护运行一个数据仓库. <br />问:数据仓库跟普通数据库存储的数据不一样? <br />答:数据仓库面向分析,普通业务数据库面向交易,我们公司产品就是业务数据库.面向分析的数据库重点在查询,业务数据库重点在修改更新. <br />问:数据仓库就是把业务数据库的数据抽出来建立新的数据库,专门供分析查询用? <br />答:可以这么说,不过不是简单的抽取,因为两者的应用不同,所依赖的数据模型不同,数据仓库主要采用多维模型，而业务数据库采用关系模型。所以，抽取的过程是一次模型的转换，从关系模型转换为多维模型，这个过程业界成为ETL，除了转换外，还要考虑数据集成，清洗等。 <br />问：可是你不是说数据仓库物理上也是关系模型，怎么表示多维模型？ <br />答：业界用称为星型结构的多个表来表示多维模型，多个维表围绕在事实表转，其中事实表表示数据，维表表示维度。多维模型也成Cube，立方体，边是维度，格子是发生数据。 <br />问：那OLAP是什么，数据仓库不就是OLAP吗？ <br />答：OLAP是联机分析处理的意思，OLAP是一本技术，它的产品分为服务器和前端产品，OLAP服务器也叫做多维数据库，数据仓库跟OLAP的关系，就像父亲和孩子的关系，广义的数据仓库包含OLAP，有些产商把两者混起来。但是，实际上数据仓库可以脱离OLAP存在，不供OLAP使用。这个比较复杂，很难一下说清楚。 <br />问： 再说说嘛。 <br />答： 其实，OLAP技术是数据仓库的一种应用，OLAP一般基于数据仓库，也就是说，OLAP服务器中的多维数据，也是从数据仓库中来的。OLAP一般位为数据仓库之上，olap的作用是为前端报表或控件提供直观的易于分析的多维数据，是数据与信息之间的一种桥梁。 <br />问： OLAP还是挺神奇的，它到底能干什么？ <br />答： OLAP技术其实定义了一些逻辑模型，包括结构模型和行为模型，结构模型即维度、Cube模型，把现实的数据以多维的形式来表达，有利于分析。为什么有利于分析呢，行为模型就是定义在结构模型之上的分析行为，包括维度自由组合、旋转、钻取等等，而这些行为是比较直观的，符合人脑的思维习惯。 <br />问： 等等，钻取是什么，好像很熟，是数据挖掘吗？ <br />答： 晕，数据挖掘跟这不搭边的，等下再说。钻取是从高粒度的数据钻到低粒度的数据中，比如从广东省的汇总数据钻到各个城市的数据。这在以前的报表工具中是很难实现的。 <br />问： 怎么做到钻取？ <br />答： 其实，维度不是线性的，而是一颗树，术语叫&ldquo;带有层级关系的维度&rdquo;，这个层级关系就定义了父子关系，钻取路径。 <br />问： 哦，还是晕，那我们自己的OLAP工具在做什么。 <br />答： 我们自己的OLAP工具有别于国外产商，我们没有存储，也就是没有OLAP服务器的概念。我们有OLAP前端和OLAP服务引擎，服务引擎直接从业务数据库或者数据仓库中抽取数据生成Cube模型的数据，OLAP前端组件比如表格和图形，将Cube模型的数据表现出来，并提供分析功能。也就是说，我们的OLAP定义了一套OLAP模型，就是上面说的结构模型和行为模型，服务引擎负责把关系模型的数据转换为多维模型，并提供了OLAP分析行为借口，前端能够识别这个OLAP模型。其实，OLAP技术只是定义了一些模型，并未定义如何实现，每个专业产商都有自己的实现和理念。有些产商的产品根本就没有OLAP产品，它也能实现OLAP分析功能。 <br />问： 哦，听起来挺不错的，有空研究研究。 <br />答： 千万别，不懂更好：） <br /><br />后记： 过了一会儿，我听到他跟他们项目经理说：&ldquo;他们组做了一个3D引擎，能够将数据库数据变成3D图形&rdquo;，吐血。</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/201279#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 08 Jun 2008 10:29:20 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/201279</link>
        <guid>http://beyondsanli.javaeye.com/blog/201279</guid>
      </item>
      <item>
        <title>怀念高中时光</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/201262" style="color:red;">http://beyondsanli.javaeye.com/blog/201262</a>&nbsp;
          发表时间: 2008年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp; 近来同高中同学联系较频繁，</p>
<p>虽然自己在高中没有好好的学习，恰恰那段时光又越发的难以忘怀！</p>
<p>&nbsp;&nbsp; 让那些难以忘怀的记忆越来越清晰，也祝愿高中的兄弟姐妹都好，活的有意义！&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/201262#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 08 Jun 2008 07:27:25 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/201262</link>
        <guid>http://beyondsanli.javaeye.com/blog/201262</guid>
      </item>
      <item>
        <title>拯救世界前先拯救好自己先</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/201120" style="color:red;">http://beyondsanli.javaeye.com/blog/201120</a>&nbsp;
          发表时间: 2008年06月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>拯救世界前先拯救好自己先</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/201120#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 07 Jun 2008 10:14:25 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/201120</link>
        <guid>http://beyondsanli.javaeye.com/blog/201120</guid>
      </item>
      <item>
        <title>多项选择框的移入 移出 &lt;select multiple=&quot;multiple&quot;&gt;</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/200791" style="color:red;">http://beyondsanli.javaeye.com/blog/200791</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="js">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
&lt;HTML&gt;
 &lt;HEAD&gt;
  &lt;TITLE&gt; New Document &lt;/TITLE&gt;
  &lt;META NAME="Generator" CONTENT="EditPlus"&gt;
  &lt;META NAME="Author" CONTENT=""&gt;
  &lt;META NAME="Keywords" CONTENT=""&gt;
  &lt;META NAME="Description" CONTENT=""&gt;
 &lt;/HEAD&gt;

 &lt;BODY&gt;
  &lt;table&gt;
    &lt;tr&gt;
	   &lt;td&gt;
	    &lt;select multiple="multiple" size="15" style="width=200px" id="selectsrcid"&gt;
		&lt;option value="0"&gt;测试一&lt;/option&gt;
		&lt;option value="1"&gt;测试二&lt;/option&gt;
		&lt;/select&gt;
		&lt;/td&gt;
		 &lt;td&gt;
          &lt;input type="button" value=" &gt;&gt; "  onclick="javascript:srcToDest('selectsrcid','selectdestid')"&gt;
     &lt;br&gt;
     &lt;input type="button"  value=" &lt;&lt; " onclick="javascript:destToSrc('selectdestid')"&gt;
     &lt;/td&gt;
     &lt;td&gt;
      &lt;select multiple="multiple" size="15" style="width=200px" id="selectdestid"&gt;
 
  &lt;/select&gt;
  &lt;/td&gt;
	&lt;/tr&gt;
  &lt;/table&gt;
 &lt;/BODY&gt;
&lt;/HTML&gt;
&lt;script language="javascript"&gt;
   function srcToDest(srcid,destid)
      {
    var optionsObjects=document.getElementById(srcid);
    var optionsSubObjects=document.getElementById(destid);
   for(var o=0;o&lt;optionsObjects.length;o++)
    {
if(optionsObjects.options[o].selected==true)
     {
    var optionsvalue=optionsObjects.options[o].value;
    var optionstext=optionsObjects.options[o].text;
    addoptions(destid,optionstext,optionsvalue)
     }
    }
      }
      
      
      //向目标
function addoptions(objectid,textvalue,optionsvalue)
{
var optionsSubObjects=document.getElementById(objectid);
var hasexist=0;
for(var o=0;o&lt;optionsSubObjects.length;o++)
{
 var optionsvalue_sub=optionsSubObjects.options[o].text;
 if(optionsvalue_sub==textvalue)
 hasexist+=1;
}
if(hasexist==0)
{
 optionsSubObjects.add(new Option(textvalue, optionsvalue));
}
}


//将对象中所选的项删除

function destToSrc(objectid)
{
var optionsObjects=document.getElementById(objectid);

for(var o=0;o&lt;optionsObjects.length;o++)
{
if(optionsObjects.options[o].selected==true)
 {
 var optionsvalue=optionsObjects.options[o].value;
 var optionstext=optionsObjects.options[o].text;
      removeoption(objectid,optionstext,optionsvalue)
 }
}
}


//删除单个选项
function removeoption(objectid,textvalue,optionsvalue)
{
var optionsSubObjects=document.getElementById(objectid);
for(var o=0;o&lt;optionsSubObjects.length;o++)
{
 var optionsvalue_sub=optionsSubObjects.options[o].text;
 if(optionsvalue_sub==textvalue)
  optionsSubObjects.options.remove(o); 
}
}

&lt;/script&gt;
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/200791#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 09:58:37 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/200791</link>
        <guid>http://beyondsanli.javaeye.com/blog/200791</guid>
      </item>
      <item>
        <title>使用DatabaseMetaDate获取数据库信息</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/200739" style="color:red;">http://beyondsanli.javaeye.com/blog/200739</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">import java.sql.*;
public class GetDBInfo
{
  public GetDBInfo()
  {
  }

  public static void main(String[] args)
  {
  try{
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="dbc:oracle:thin:@localhost:1521:orcl";
    String user="system";
    String pass="******";
    String s;
    Connection con=DriverManager.getConnection(url,user,pass);
        DatabaseMetaData dbmd=con.getMetaData();
    s = dbmd.getDriverName();
    System.out.println("驱动程序的名称是: "+s);
    System.out.println(" ");

    s = dbmd.getDatabaseProductName();
    System.out.println ("数据库名称是："+s);
    System.out.println(" ");

    ResultSet rs = dbmd.getSchemas();
    System.out.println("模式名有：");
    while(rs.next())
      System.out.print("  "+rs.getString(1));
      System.out.println();
      
     s = dbmd.getSQLKeywords();
    System.out.println("SQL中的关键词为: "+s);
    System.out.println(" ");

    int max=dbmd.getMaxColumnNameLength();
    System.out.println ("列名的最大长度可以是："+max);
    System.out.println(" ");

    max = dbmd.getMaxTableNameLength();
    System.out.println ("表名的最大长度可以是："+max);
    System.out.println(" ");

    max = dbmd.getMaxColumnsInSelect();
    System.out.println ("一个select 子句所能返回的最多列数列名的最大长度可是是："+max);
    System.out.println(" ");

    max = dbmd.getMaxTablesInSelect();
    System.out.println ("一个SELECT语句最多可以访问多少个表："+max);
    System.out.println(" ");


    max = dbmd.getMaxColumnsInTable();
    System.out.println ("表中允许的最多列数："+max);
    System.out.println(" ");

    max = dbmd.getMaxConnections();
    System.out.println ("并发访问的用户个数："+max);
    System.out.println(" ");

    max = dbmd.getMaxStatementLength();
    System.out.println ("SQL语句最大允许的长度："+max);
    System.out.println(" ");

    s = dbmd.getNumericFunctions();
    System.out.println("数据库的所有数学函数的列表: "+s);
    System.out.println(" ");

    s = dbmd.getStringFunctions();
    System.out.println("数据库的所有字符串函数的列表: "+s);
    System.out.println(" ");

    s = dbmd.getSystemFunctions();
    System.out.println("数据库的所有系统函数的列表: "+s);
    System.out.println(" ");

    s = dbmd.getTimeDateFunctions();
    System.out.println("数据库的所有日期时间函数的列表: "+s);
    System.out.println(" ");

    rs = dbmd.getTypeInfo();
    while(rs.next())
      {
        System.out.print(" 数据类型名："+rs.getString(1));
        System.out.print("  数据类型："+ rs.getString(2));
        System.out.print("  精度："+   rs.getString(3));
        System.out.println("  基数："+   rs.getString(18));
      }
      System.out.println(" ");

    s = dbmd.getURL();
    System.out.println("此数据库的url: "+s);
    System.out.println(" ");

    s = dbmd.getUserName();
    System.out.println("此数据库的用户: "+s);
    System.out.println(" ");
//好像要注意是大写
    String [ ] t = { "TABLE", "VIEW" };
    rs = dbmd.getTables(null, "HR", "%", t);
    while(rs.next()){
      System.out.print("目录名："+rs.getString(1));
      System.out.print(" 模式名："+rs.getString(2));
      System.out.print(" 表名："+rs.getString(3));
      System.out.print(" 表的类型："+rs.getString(4));
      System.out.println(" 注释："+rs.getString(5));
      }
      System.out.println(" ");

    rs = dbmd.getPrimaryKeys(null, "HR","EMPLOYEES");
    while(rs.next()){
      System.out.print("目录名："+rs.getString(1));
      System.out.print(" 模式名："+rs.getString(2));
      System.out.print(" 表名："+rs.getString(3));
      System.out.print(" 列名顺序号："+rs.getString(4));
      System.out.print(" 列名顺序号："+rs.getString(5));
      System.out.println(" 主键名："+rs.getString(6));
      }
      System.out.println(" ");

     rs = dbmd.getTableTypes();
     System.out.println(" 表的类型有：");
     while(rs.next())
       System.out.print("  "+ rs.getString(1));
       System.out.println();
       System.out.println(" ");

     rs = dbmd.getColumns(null, "HR", "EMPLOYEES", "%");
     System.out.println(" 表名 "+" 列名 "+"  数据类型"+" 本地类型名"+" 列的大小"+ " 小数位数"+" 数据基数"+" 是否可空"+" 索引号");
     while(rs.next()){
      System.out.print(rs.getString(3)+" ");
      System.out.print(rs.getString(4)+" ");
      System.out.print(rs.getString(5)+" ");
      System.out.print(rs.getString(6)+" ");
      System.out.print(rs.getString(7)+" ");
      System.out.print(rs.getString(9)+" ");
      System.out.print(rs.getString(10)+" ");
      System.out.print(rs.getString(11)+" ");
      System.out.println(rs.getString(17)+" ");
      }
      System.out.println(" ");

      rs = dbmd.getIndexInfo(null, "HR", "EMPLOYEES", false, false);

       System.out.println(" 表名"+" 索引名"+" 索引类型"+" 索引列名"+" 索引顺序"+ " 小数位数"+" 数据基数"+" 是否可空"+" 索引号");
      while(rs.next()){
      System.out.print(rs.getString(3)+" ");
      System.out.print(rs.getString(6)+" ");
      System.out.print(rs.getString(7)+" ");
      System.out.print(rs.getString(9)+" ");
      System.out.println(rs.getString(10)+" ");
      }
      System.out.println(" ");
    
    rs.close();
       con.close();
    }
    catch(Exception e){System.out.println(e);}
    new GetDBInfo();
  }
}


</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/200739#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 08:00:52 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/200739</link>
        <guid>http://beyondsanli.javaeye.com/blog/200739</guid>
      </item>
      <item>
        <title>ant 的学习点滴</title>
        <author>beyondsanli</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://beyondsanli.javaeye.com">beyondsanli</a>&nbsp;
          链接：<a href="http://beyondsanli.javaeye.com/blog/199600" style="color:red;">http://beyondsanli.javaeye.com/blog/199600</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一环境</p>
<p>&nbsp; 1：ANT的项目的地址为 <a href="http://ant.apache.org/">http://ant.apache.org/</a>&nbsp; 下载zip包&nbsp; apache-ant-1.7.0-bin.zip<br />&nbsp; 2:解压到本地的某个目录下 <br />&nbsp; 3:设置环境变量 ANT_HOME&nbsp;&nbsp; D:\apache-ant-1.7.0 (这个是你解压的路径)<br />&nbsp; 4:在path 中添加 %ANT_HOME%/bin;&nbsp; 这里%ANT_HOME%=D:\apache-ant-1.7.0<br />&nbsp; 5:ctrl+r 输入cmd 在命令行中输入 ant <br />&nbsp;&nbsp; Buildfile: build.xml does not exist!&nbsp; 正确的说明尚没有配置build.xml</p>
<p>二：eclipse下ant 的小案例</p>
<p>&nbsp;&nbsp; 1：新建/项目/java项目</p>
<p>&nbsp;&nbsp; 2:下一步 输入HelloWorld</p>
<p>&nbsp; 3:在项目中新建文件夹 src ,classes 一个作为java源代码目录一个作为 class文件保存目录或者说目标目录dest</p>
<p>&nbsp;4:在eclipse下右键项目名称，选择属性/构建路径/源代码 a:构件路径的源文件夹&nbsp; 添加文件夹为 选择HelloWorld/src</p>
<p>&nbsp; 缺省输出的文件夹为HelloWorld/classes&nbsp; 确定</p>
<p>5：在src中建立文件</p>
<p>&nbsp;&nbsp;HelloWorld.java</p>
<p>&nbsp;</p>
<pre name="code" class="java">public class HelloWorld {

	
	public static void main(String[] args)
	{
		System.out.println("test for gui !");
	}
}</pre>
<p>&nbsp;build.xml</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!--ant是工程的名称--&gt;
&lt;project name="HelloWorld" default="run" basedir="."&gt;
&lt;!--定义属性--&gt;
&lt;property name="src" value="src"/&gt;
&lt;property name="dest" value="classes" /&gt;
&lt;!--init 初始化 建立dest定义的class目录--&gt;	
&lt;target name="init"&gt;
&lt;mkdir dir="${dest}" /&gt;
&lt;/target&gt;
&lt;!--compile只有一个任务--&gt;	
&lt;target name="compile" depends="init" &gt;
	&lt;javac srcdir="${src}" destdir="${dest}" /&gt;
&lt;/target&gt;
	
 &lt;target name="build" depends="compile"&gt;
	&lt;jar jarfile="${hello_jar}" basedir="${dest}" /&gt;
 &lt;/target&gt;

&lt;target name="run" depends="build" &gt;
	&lt;java classname="HelloWorld" classpath="${hello_jar}" /&gt;
&lt;/target&gt;
	
&lt;/project&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;6:在eclipse下右键项目名称 选择构建器/新建/ant&nbsp;构建&nbsp;</p>
<p>&nbsp;浏览工作空间 P&nbsp; ${workspace_loc:/HelloWorld/src/build.xml}&nbsp;&nbsp;&nbsp;&nbsp; 构建文件就似乎build.xml所在路径</p>
<p>&nbsp;浏览工作空间 P ${workspace_loc:/HelloWorld}&nbsp; 项目HelloWorld的路径</p>
<p>确定</p>
<p>&nbsp;7：在eclipse下右键项目名称 选择构建器 将ant以外的构建器去掉（不打钩）</p>
<p>8：选择HelloWorld.java&nbsp; 运行方式选择ant 构建成功！</p>
<p>9:我将我新建的构建器名称更改为ant，选择项目HelloWorld构建该项目</p>
<pre name="code" class="java">Buildfile: E:\webapps\HelloWorld\src\build.xml

init:

compile:
       [javac] Compiling 1 source file to E:\webapps\HelloWorld\classes

build:
         [jar] Building jar: E:\webapps\HelloWorld\${hello_jar}

run:
        [java] test for gui !
BUILD SUCCESSFUL
Total time: 3 seconds</pre>
<p>&nbsp;<span style="color: #ff0000;">&nbsp;为什么有时候编译HelloWorld.java不是打印以上信息呢？郁闷</span></p>
<p><span style="color: #ff0000;">&nbsp; 我理解的时候你重复对HelloWorld进行运行的操作，因为没有改动，所以ant对没有更改的部分没有进行&ldquo;编译&rdquo;</span></p>
<p><span style="color: #ff0000;">当你更改了HelloWorld.java文件是可以看到</span></p>
<pre name="code" class="java">public class HelloWorld {

	
	public static void main(String[] args)
	{
		System.out.println("test for gui ! beyondsanli");
	}
}
</pre>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">又可以看到ant的构建信息了！</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://beyondsanli.javaeye.com/blog/199600#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jun 2008 08:31:17 +0800</pubDate>
        <link>http://beyondsanli.javaeye.com/blog/199600</link>
        <guid>http://beyondsanli.javaeye.com/blog/199600</guid>
      </item>
  </channel>
</rss>