<?xml version="1.0" encoding="GBK" ?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dcterms="http://purl.org/dc/terms/">
 <channel>
  	  <title><![CDATA[冰风的博客]]></title>
	  <link>http://nikyok.blog.163.com</link>
	  <description><![CDATA[个人生活、感情、感想博客 有点内向但很善良的男孩子。]]></description>
	  <language>zh-CN</language>
	  <pubDate>Sat, 30 Aug 2008 16:58:58 +0800</pubDate>
	  <lastBuildDate>Sat, 30 Aug 2008 16:58:58 +0800</lastBuildDate>
	  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
	  <generator><![CDATA[NetEase Space]]></generator>
	  <managingEditor><![CDATA[nikyok]]></managingEditor>
	  <webMaster><![CDATA[♂冰风♂]]></webMaster>
		  <ttl>120</ttl>
	  <image>
	  	<title><![CDATA[冰风的博客]]></title>
	  	<url>http://ava.blog.163.com/photo/V7SdXJGnPOTF57bf0oyY7w==/201536083324871073.jpg</url>
	  	<link>http://nikyok.blog.163.com</link>
	  </image>
  <item>
  	<title><![CDATA[程序员的爱情表白]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/55508453200851883952447</link>
    <description><![CDATA[<div>我能抽象出整个世界．．． <br>但是我不能抽象出你．．． <br>因为你在我心中是那么的具体．．． <br>所以我的世界并不完整．．． <br>我可以重载甚至覆盖这个世界里的任何一种方法．．． <br>但是我却不能重载对你的思念．．． <br>也许命中注定了 你在我的世界里永远的烙上了静态的属性．．． <br>而我不慎调用了爱你这个方法．．． <br>当我义无返顾的把自己作为参数传进这个方法时．．． <br>我才发现爱上你是一个死循环．．． <br>它不停的返回对你的思念压入我心里的堆栈．．． <br>在这无尽的黑夜中．．． <br>我的内存里已经再也装不下别人．．． <br>我不停的向系统申请空间．．． <br>但却捕获一个异常－－－我爱的人不爱我．．． <br>为了解决这个异常．．． <br>我愿意虚拟出最后一点内存．．． <br>把所有我能实现的方法地址压入堆栈．．． <br>并且在栈尾压入最后一个方法－－－将字符串＂我爱你，你爱我吗？＂传递给你．．． <br>如果返回值为真－－我将用尽一生去爱你．．． <br>否则－－我将释放掉所有系统资源．</div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/55508453200851883952447</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/55508453200851883952447</guid>
    <pubDate>Wed, 18 Jun 2008 20:39:52 +0800</pubDate>
    <dcterms:modified>2008-06-18T20:39:52+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[eclipse 或是myeclipse6 快捷键ctrl  /没有代码提示问题]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320085160516354</link>
    <description><![CDATA[<div>先试一下这个：<br>1、菜单window-&gt;Preferences-&gt;Java-&gt;Editor-&gt;Content Assist-&gt;Enable auto activation 选项要打<br><br>上勾 <br>&nbsp;&nbsp;&nbsp;&nbsp; 2、window-&gt;Preferences-&gt;Java-&gt;Editor-&gt;Content Assist-&gt;Advanced&nbsp;&nbsp; 上面的选项卡Select<br><br>the proposal kinds contained in the 'default' content assist list: 中把 Other Java<br><br>Proposals 选项打上勾就可以了。<br>说明一下，我个人习惯用ctrl /打开代码提示功能。<br>对于3.x的版本则可以这样试一下：<br>示用alt+/.需要做两件事.<br>1,windows--&gt;preference--&gt;workbench--&gt;keys 下设置Content&nbsp;&nbsp;&nbsp; Assist&nbsp;&nbsp;&nbsp; 的快捷键 <br>对于是myeclipse6.0那么就要做一下：<br>2,windows--&gt;preference--&gt;workbench--&gt;keys 下设置wordcomletion 的快捷键 改成其它的.<br></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320085160516354</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320085160516354</guid>
    <pubDate>Mon, 16 Jun 2008 12:51:06 +0800</pubDate>
    <dcterms:modified>2008-06-16T12:51:06+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[还记得的一点梦]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/555084532008423104128375</link>
    <description><![CDATA[<div><P>&nbsp;&nbsp;&nbsp; 真的好奇怪呀，早上醒来的时候还记得昨晚上做的一些梦，不知道是为什么，梦到艳，真的不知道为什么，前两天跟志聊天，还说到了的，不想再跟艳见面了，不知道是为什么，只是感觉她在回避着什么，只不过我前些时候没有感觉出来，现在想想感觉自己很无知。不过梦真的很奇怪，为什么会发生那件事呢，难道是我想要发生的，不是的那件事并不是我想要发生的。真的不是。可是因为那件事她却回到我的身边，梦醒的时候真是的点不知所措，只是希望这些不要发生在现实生活中。不知道怎样说自己，感觉自己的感觉向来都是乱的，从来没有理顺过。很多的时候在想木每，不知道是为什么，是因为失去吗？不得而知，只是感觉当时自己有些事做的不对，后悔我并不确定，因为我当时那样做真的是想她离开我，我不知道这些是为什么。可能是我从小就有的自卑感的原因吧。为什么对艳的感觉是这样，总是觉得想清楚了，可以放下了，可是又会常常想起。每每想到这些，感觉对木每来说真的是件好事，因为我似乎给不了别人幸福，因为我自己都不太了解自己了。现在知道木每生活的很好，有个对她很好的男朋友，我觉得真的很开心，是为什么呢，有点感觉自己就算喜欢别人，也不会给别人承诺。不知道是为什么。真的不知道。有的时候感觉自己真是个混蛋。不过从木每的事情中我知道了一点，那就是时候可以改变很多东西。而且对感情来就不需要太长。也许自己理想的感觉对现实来说不存在吧，不知道为什么，我总是相信那些一生一世的爱情。可是让我感觉真的很喜欢我的木每却是只用了两年的时候就喜欢上别人了。我不知道她是不是因为伤痛才接受别人的，还是真的是这样，事情并非总是我想的那样发展。就是她是真的作出了选择吧。而我的选择呢，似乎还不知道也许时候可能到一定的时候就会起到作用吧。不过都十来年了，艳跟我的事还是一样没有结果，当然结果还是有的，那就是我很清楚这件事对我们来说只是我单方面的罢了。但是我为什么就不能像木每一样潇洒呢，时间对我来说真的是很多吗？不是吧，也许时间对我来说只是为也伤害别人吧。草方也是我伤害过的人之一，不过对她来说我觉得那些伤害应该没有什么吧。也话她会骂我****，随便吧。有的时候真想做点什么，可以让自己忘记所有的一切。可是静下来的时候还是一样，时间对我来说并非没有作用，也许到了一定的时候，事情多了，我也会想明白吧。只是在这期间我想解脱一下，得想点办法解脱一下。。。</P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/555084532008423104128375</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/555084532008423104128375</guid>
    <pubDate>Fri, 23 May 2008 10:41:28 +0800</pubDate>
    <dcterms:modified>2008-05-23T10:41:28+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[默默表达我的祝福]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/555084532008420105450637</link>
    <description><![CDATA[<div>从四川地震到现在，我一直在想是不是自己要写点什么，可是一直没有写什么，只是在心里不停的想，大家一定要坚强。每天都是特别关注救灾的消息。心情也不算很好，只是难过。加油呀，中国，现在这样的时候只有自己救自己。再多的话都没什么用，就让我默默的为受灾的人祈祷吧。</div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/555084532008420105450637</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/555084532008420105450637</guid>
    <pubDate>Tue, 20 May 2008 10:54:50 +0800</pubDate>
    <dcterms:modified>2008-05-20T10:54:50+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[java随机读写应用]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/555084532008210112631927</link>
    <description><![CDATA[<div><P>package com.yuyanshan;</P>
<P>import java.io.IOException;<BR>import java.io.RandomAccessFile;</P>
<P>public class Example {<BR>&nbsp;<BR>&nbsp;public static void main(String args[]) {<BR>&nbsp;&nbsp;RandomAccessFile inAndOut = null ;<BR>&nbsp;&nbsp;int data[] = {20,30,40,50,60};<BR>&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;inAndOut = new RandomAccessFile("D:\\a.bat","rw");<BR>&nbsp;&nbsp;} catch(Exception e) {<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;int dataLength = data.length;<BR>&nbsp;&nbsp;&nbsp;for(int i=0; i&lt;dataLength; i++&nbsp; ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;inAndOut.writeInt(data[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;inAndOut.seek(0);<BR>&nbsp;&nbsp;&nbsp;for(long i = 0; i&lt;dataLength; i++) {<BR>//&nbsp;&nbsp;&nbsp;&nbsp;inAndOut.seek(i*4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("result:"+inAndOut.readInt()+"&nbsp;&nbsp;&nbsp; ");<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;System.out.printf("\tdfdfdfd%d",inAndOut.readInt());<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;inAndOut.seek(0);</P>
<P>//将第一个INT覆盖<BR>&nbsp;&nbsp;&nbsp;inAndOut.writeInt(10);<BR>&nbsp;&nbsp;&nbsp;inAndOut.seek(0);<BR>&nbsp;&nbsp;&nbsp;long dataLength1 = inAndOut.length()/4;<BR>&nbsp;&nbsp;&nbsp;for(long i = 0; i&lt;dataLength1; i++) {<BR>//&nbsp;&nbsp;&nbsp;&nbsp;inAndOut.seek(i*4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("result:"+inAndOut.readInt()+"&nbsp;&nbsp;&nbsp; ");<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;System.out.printf("\tdfdfdfd%d",inAndOut.readInt());<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;inAndOut.close();<BR>&nbsp;&nbsp;} catch(IOException e) {<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;<BR>}<BR></P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/555084532008210112631927</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/555084532008210112631927</guid>
    <pubDate>Mon, 10 Mar 2008 11:26:31 +0800</pubDate>
    <dcterms:modified>2008-03-10T11:27:55+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[SSH下的HQL删除语句的写法]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320082853919126</link>
    <description><![CDATA[<div><P>if (hql != null &amp;&amp; hql.length() &gt; 0) {<BR>&nbsp;&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;final String _hql =hql;<BR>&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().execute(new HibernateCallback() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Object doInHibernate(Session session)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws HibernateException {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query query = session.createQuery(_hql);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return query.executeUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;});<BR>&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;} catch (DataAccessException ex) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;&nbsp;logger.error("执行删除 " + hql + " 时发生错误");<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw ex;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;throw SessionFactoryUtils<BR>&nbsp;&nbsp;&nbsp;&nbsp;.convertHibernateAccessException(new HibernateException(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"不能删除空值."));</P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320082853919126</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320082853919126</guid>
    <pubDate>Sat, 8 Mar 2008 17:39:19 +0800</pubDate>
    <dcterms:modified>2008-03-08T17:39:19+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[servlet下载文件]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/55508453200801693243499</link>
    <description><![CDATA[<div><P>protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</P>
<P>&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("application/vnd.ms-excel");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.addHeader("Content-Disposition","attachment;&nbsp;&nbsp; filename=\""&nbsp;&nbsp; + FormatName.getFormatName(this.fileName)&nbsp; +&nbsp;&nbsp; "\"");&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream os;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; os = response.getOutputStream();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//通过os将文件写入内存</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; os.close();</P>
<P>&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;System.out.println("EXL输出错误，在CQuantityExl.java中");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}&nbsp;<BR>&nbsp;}</P>
<P>public static String getFormatName(String fileName) {<BR>&nbsp;&nbsp;if(fileName != null) {<BR>&nbsp;&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;return new String(fileName.getBytes("GBK"),"iso-8859-1");<BR>&nbsp;&nbsp;&nbsp;} catch (UnsupportedEncodingException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("中文文件名转换出错，在FormatName.java中");<BR>&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;}&nbsp; <BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return "";<BR>&nbsp;}</P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/55508453200801693243499</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/55508453200801693243499</guid>
    <pubDate>Wed, 16 Jan 2008 09:32:43 +0800</pubDate>
    <dcterms:modified>2008-01-16T09:32:43+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[爸爸,我怀了你的孩子(经典催泪故事)]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320071119112930259</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">第一次认识，我27，她19，我们相差8岁&nbsp;<BR>她说，你老得都可以做我爸啦。&nbsp;<BR>我笑笑，27与19差的8岁，不象37与29差的8岁，是两个世界的人。&nbsp;<BR>我们恋爱了，她喜欢叫我爸爸。&nbsp;<BR>时常粘过来，坐在我腿上，爸爸，你说我明天去面试好呢，还是和同学去唱歌好？&nbsp;<BR>我喜欢这种感觉，奇怪的是，我竟然喜欢。&nbsp;<BR>当一个女孩子叫你爸爸时，你感到你对她的宠爱绝对应该是无条件的，当她在床上，大汗淋漓地叫，爸爸，快一点，再快一点时。好刺激，简直让人兽性大发，当她乖乖地躺在你怀里，和你一起看碟时，你给她做鸡翅吃，她拿着送到你嘴巴里，然后自己只是抿一抿手指上的酱汁，然后撒娇地说，我孝顺吧？——的时候，她好乖。&nbsp;<BR><BR>这只是我们之间的秘密，当我们一起出门去街上，看起来是这么般配，她挽着我的手臂，我淡淡地走着，在人群中，她显得是这么成熟，这么游刃有余，只是回到家，她的孩童本性才暴露无疑，她才19岁，在爱的人面前，9岁都不为过。&nbsp;<BR><BR>的确我也渐渐发现了这一点，刚开始的新鲜刺激都变成了怀疑，她真的只象是我的女儿，永远在问，我这样好还是那样好？永远调皮捣蛋，永远在我骂过她后第二天在学校给我发来消息说，爸爸，我错了，对不起。我工作上的压力，我在这个人际场上遭遇的挫折，永远别想在她这里得到舒解，我跟她探讨一些形而上的问题时，她永远眨着眼睛，在钱柜里，她只认识she，我只是在不断地宠爱她，渐渐，这宠大过了爱，这和女儿有什么区别？和真的女儿有什么区别？&nbsp;<BR><BR>女朋友难道不应该是那个和你有精神交流的人吗？&nbsp;<BR>恋人之间难道不应该是彼此扶持吗？我好累。&nbsp;<BR><BR>我说我们还是分开吧，或许你真的只适合做我的女儿。她说爸爸你是不是要给我找个后妈？我看着她，哭笑不得。&nbsp;<BR>她说，那你还会疼我吗？象爸爸疼女儿一样，我说恩，我会的。&nbsp;<BR>她走了，双目含泪，问我，爸爸，我还可以找男朋友吗？&nbsp;<BR><BR>我有了新的女朋友，和我一般大。她没有了消息，我们再少联系。我渐渐忘了她，女朋友很好，我们在一起，我感到宁静，不那么累，她是如此善解人意，我开始有信心，工作有起色，只是偶尔会想到，曾经有过一个女孩子叫我爸爸。&nbsp;<BR><BR>有过一次在一个酒吧遇到她，我牵着女友的手走出去的时候，她和一帮男女嬉闹着拥进来，她没有看到我，我却注意到她，头发长了。&nbsp;<BR><BR>几个月后的一天，我和女友正准备睡觉，她打电话来，外面正在下雨，她站在我家门口，说太晚了，回不了宿舍，女友过来问是谁，我说是我认识的一个小妹妹，她有些愕然，但马上甜甜地唤，嫂子好。我给了她另一个房间，去卧室睡了。&nbsp;<BR><BR>半夜睡不着，去洗手间上厕所，一进门差点魂飞魄散，她正穿着牛仔裤坐在马桶上发呆，我问她在干什么，她只是看着我说，爸爸。&nbsp;<BR><BR>我们心急火燎地拥进另一个房间，在房间我们互相脱着彼此的衣服，互相野兽一般地吻，我突然想到套子在我与女友的卧室里，她说不要紧，进来。&nbsp;<BR><BR>黑暗中我搂着她，问她现在还好吗，她说好的。&nbsp;<BR><BR>回到卧室，女友已经起来了，在床上吸烟，我问她大半夜吸什么烟，她淡淡看我一眼，说我在计算时间，一支烟五分钟，我想看你厕所上了多久。然后一字字道，让她走。&nbsp;<BR><BR>第二天大清早，她早已不知所踪，留了张条子说，嫂子，对不起，爸爸是好人。女人嗤了一声，看我，这什么乱七八糟的？抄起手机就去上班了。&nbsp;<BR><BR>再一次看到她是再几个月后，也是在一个酒吧，我也很奇怪怎么我偶尔去酒吧，怎么每次都遇到她，她居然是这个酒吧的dancing&nbsp;Queen，她已经不是当初那个甜甜地笑着问我，爸爸，我孝顺吧的女孩了，我走出酒吧，回头发现她站在门口，穿着小可爱，远远地用手掌在小腹上划了一个圈。&nbsp;<BR><BR>这个动作让我莫名其妙了很久，回到家，用钥匙插进锁扭动的刹那，突然全身每个毛孔都沁出一滴冷汗。&nbsp;<BR>那晚她说不要紧，进来。&nbsp;<BR><BR>我拨她手机，没有人接听，我再拨，接起，我冲着电话喊，你不要那么任性！突然电话里是我女友莫名其妙地问，你说什么？&nbsp;<BR>我一个人呆呆地想，是的，这都是计划好的，她来我家，与我**，然后我拨她电话，第一遍她看着手机不接，然后在我拨第二遍的时候迅速把号码转移到我女友手机上。&nbsp;<BR>她行事如此眉头也不皱，我毛骨悚然。&nbsp;<BR><BR>我们在一起时她曾说过，要和我生个孩子，叫她妈妈，让他爱上自己的妈妈，她叫我爸爸，我们是乱伦家族。我当时觉得她无比可爱。&nbsp;<BR><BR>其实我不知道她在肚子上划个圈究竟是不是这个意思，我一点不确定她是否真的怀孕，只是我开始明白，她从来不是我以为的那个小孩子，她太了解我，从一开始她就了解我，她用一个动作就可以让我魂飞魄散，我一直以为她很幼稚。&nbsp;<BR><BR>原来我从一开始就错了&nbsp;</P>
<P style="TEXT-INDENT: 2em">人有时候喜欢自以为是地去解决什么问题，到头来捉襟见肘，我认为我应该主动地坦白从宽。&nbsp;<BR><BR>出乎我的意料，女友并不知道那天晚上我和“女儿”究竟做了什么，不过现在她知道了。&nbsp;<BR>也知道了爸爸是什么意思。&nbsp;<BR>她冷笑地看我，我努力让自己有勇气面对她。&nbsp;<BR>努力让自己有勇气面对我和女友的将来。&nbsp;<BR>可惜，没有将来了。&nbsp;<BR><BR>女友走了，我一个人在空荡的房间住了三天，突然跳起来往女儿的学校跑。&nbsp;<BR>我在校门口堵住她。&nbsp;<BR><BR>你那天那个动作是什么意思？&nbsp;<BR>什么动作？她眨着眼睛看我。&nbsp;<BR>我闭起眼睛，叹气。&nbsp;<BR>她笑了，笑得阳光灿烂。&nbsp;<BR>我如坠冰库。&nbsp;<BR>朝她赞赏地竖起大拇指，话也讲不出。&nbsp;<BR><BR><BR>她笑得象只甜蜜的小狐狸，一个男生远远跑来。&nbsp;<BR>对不起，下课迟了。&nbsp;<BR>男朋友？我斜着眼，望她。&nbsp;<BR>她朝我吐吐舌头，搂着男生的手往校门外走去&nbsp;<BR>回头招手，爸爸再见。&nbsp;<BR>男生远远狐疑地问，爸爸？&nbsp;<BR>认的啦！她笑，两个人如初春的阳光般慢慢离开。&nbsp;<BR><BR>晚上，她和那个男生来了，来做客。&nbsp;<BR>我不动声色地，“慈祥地”地招待他们。&nbsp;<BR>我“爸爸”对我可好了，他喜欢我的朋友们。&nbsp;<BR>男生胆怯地望着我，我朝他点点头。&nbsp;<BR>把刚才买的碟拿出来！爸爸这里音响好！&nbsp;<BR><BR>音响都是我和她一起时买的，我愿意砸钱在这种地方，她当时在旁边，看得心惊肉跳。&nbsp;<BR>啧啧，好贵。&nbsp;<BR>贵死啦！&nbsp;<BR>怎么会有这么贵的东西？爸爸，你买这个干吗呀。&nbsp;<BR>你好罗嗦……&nbsp;<BR>恩……嘟嘴。&nbsp;<BR><BR>我把音响全部打开，把他们的碟放进去，她和男生坐在沙发上。&nbsp;<BR>我……去厨房，给他们做吃的。&nbsp;<BR>看看他们买的一通碟，我实在嗤之以鼻，完全没兴趣陪他们看。&nbsp;<BR>我把薯条，水果，鸡翅端到茶几上。&nbsp;<BR>吃吧吃吧，我说，撑死你们。&nbsp;<BR><BR>谢谢叔叔。男生说。&nbsp;<BR>叔叔……&nbsp;<BR>我真是想掐死他。&nbsp;<BR><BR>转眼看她，对着鸡翅发楞。&nbsp;<BR>怕是想到以前的情景吧。&nbsp;<BR><BR>你们慢慢看。&nbsp;<BR>叔叔你不看吗？男生问我&nbsp;<BR>这孩子真是傻得可爱。&nbsp;<BR>我去自己房间看书，我跟你们有代沟。&nbsp;<BR>男生真是懂事，好象很体谅地朝我点点头。&nbsp;<BR>她听到代沟这个词，朝我飞了个媚眼。&nbsp;<BR>神采飞扬。&nbsp;<BR><BR>我回到房间，给女友写mail。&nbsp;<BR>我向她求婚，希望她嫁给我。&nbsp;<BR><BR>外屋一声尖叫。&nbsp;<BR>我张皇冲出去。什么事？&nbsp;<BR>可乐喝光了。&nbsp;<BR>她拿了可乐瓶冲我招摇。&nbsp;<BR>我下面买！男生蹭地站起来&nbsp;<BR>你给我坐下！她斥道，笑吟吟望我，爸爸，你疼我的吧？&nbsp;<BR><BR>我微笑，我去买。&nbsp;<BR>这男生好爱她，看她的眼神都惊慌。&nbsp;<BR>她不该如此骗他，利用他。&nbsp;<BR>今天周末，不用上班？我微笑看着她，盯着她问。&nbsp;<BR>每个周末她都会是一个酒吧的dancing&nbsp;Queen。&nbsp;<BR>那男生不会知道，果然他瞪大眼睛望她，上班？&nbsp;<BR>她亦微笑地看着我&nbsp;<BR><BR>不用，有爸爸养，我干吗要上班呢？她盯着我。&nbsp;<BR>说得也是。我叹气。&nbsp;<BR>下楼买可乐，突然很想哭，拿着可乐上楼，打开门。&nbsp;<BR>他们正在接吻。&nbsp;<BR>听到开门，男生想挣脱，她箍住她。&nbsp;<BR><BR>没关系，就当在自己家好了。我慈祥地说道，把可乐放在桌上。&nbsp;<BR>鸡翅一只也没有动过。&nbsp;<BR><BR>我回房，隐约听到。&nbsp;<BR>他到底是你什么人呀？&nbsp;<BR>爸爸呀。&nbsp;<BR>真的吗？&nbsp;<BR>不信就给我滚！&nbsp;<BR>其实关于那天晚上的事情我后来记得不是很清楚。&nbsp;<BR>后来到了一点多，我在卧室里辗转反侧的时候，她推门进来。&nbsp;<BR>你又想叫我买什么？女儿？我讥讽地看着她。&nbsp;<BR>她哀求地看着我，不发一言，我突然心软，搂住她，你怎么了到底？&nbsp;<BR>不要赶我走。&nbsp;<BR><BR>我看着她的眼神，突然记起以前好多个这样的夜晚，她调皮捣蛋的样子浮现在我面前，她对这里是多么熟悉，这里曾经是她的家。&nbsp;<BR><BR>如果女友回来怎么办？我问自己？&nbsp;<BR>我和女友再无可能。&nbsp;<BR>可她，我说了，我会此生象爸爸一样疼爱她，宠她。&nbsp;<BR>或许，今夜，事情会有转折，或许，我会和她重新开始。&nbsp;<BR><BR>你想住下来？我问她。&nbsp;<BR>恩。她重重地点点头。&nbsp;<BR><BR>我同意了，出乎我意料的，她马上兴高采烈地转身向客厅里的那个男生大叫，我爸爸同意啦，我们去睡觉吧。&nbsp;<BR>我呆呆看着她，他也住这里？&nbsp;<BR>他是我男朋友啊，你不是说我可以找男朋友吗？&nbsp;<BR>我感到我的心脏因为愤怒而颤抖，是的，她在玩我，她在用尽她19岁的智力在玩她曾经深爱的人。&nbsp;<BR><BR>我想我不会玩不过你。&nbsp;<BR>好啊，我微笑道，当然。&nbsp;<BR>我们注视着对方，她狠狠地盯着我，凶巴巴的。&nbsp;<BR><BR>曾经无数次，她这么瞪着我，我们在一起时，每当她不高兴时，她会大声宣布，我生气了！&nbsp;<BR>然后整个人嘟着嘴坐在那里。&nbsp;<BR>乖啦，我恐吓她，再不乖把你卖掉！&nbsp;<BR>她就抬起头，用这种眼神看我，瞪着我，凶巴巴的。&nbsp;<BR>然后跳起来，搂着我的脖子，撒娇道，爸爸，我看起来吓人吧？&nbsp;<BR><BR>无可否认，当时她这样看着我，我没有感到恐惧。可是，心痛如绞。&nbsp;<BR>他们去睡了，音响，电视，统统不关。&nbsp;<BR>我一一关掉，突然看到一张碟片，是他们刚才买来的。&nbsp;<BR>《我的野蛮女友》&nbsp;<BR>她曾经无数次央着我陪她一起看，说实话，我实在看不下去，看到一半就跑去阳台抽烟，每次被她拽回来，我就开始假寐。到后来，我乘她不注意，把碟找出来，扔掉了。&nbsp;<BR>她看了无数遍，看得台词都背得出来，居然今天又找人看了一遍。&nbsp;<BR>这个疯子。&nbsp;<BR><BR>收拾完客厅，我回卧室，刚要进去，他们那边房间打开，她打开门，笑嘻嘻地说&nbsp;<BR>老爸。&nbsp;<BR>干吗？&nbsp;<BR>借个套子。&nbsp;<BR>什么？&nbsp;<BR>借个套子&nbsp;<BR>**你大爷！&nbsp;<BR>她呆呆地看着我，过了一会，低下头开始掰手指——你是我爸，我大爷就是……&nbsp;<BR>我的眼泪突然流下来。&nbsp;&nbsp;<BR>那天晚上在我印象里有两个版本。&nbsp;<BR><BR>在第一个版本里，我躺在卧室的大床上，瞪大眼珠望着天花板，任凭隔壁欢愉的尖叫潮水般一波波涌来，我跳下床，翻箱捣柜地找棉花，塞耳朵。&nbsp;<BR><BR>不容怀疑，我是故意翻得惊天动地的，在翻弄的过程中，我脑中反复出现了一个被遗弃的怨妇的经典形象，头发散乱，动作迅疾且频率很大，还兼抽搐症状，如果你有看过尼古拉斯．凯奇演的《离开拉斯维加斯》，那会比较好理解一点，对，就是浑身发抖的那一种，最后我瘫在写字桌下，手里握着唯一找到的两片邦迪创可贴，上面还有一只小熊，一只小兔子。那是她上次从楼梯上摔下去，我给她买的，她觉得太可爱，不忍心贴。于是我把它们撕下来，贴在脑门上，呼呼喘气。&nbsp;<BR><BR>在第二个版本里，隔壁是很安静的，好象很纯洁，但这安静在脑中变成了最最恐怖的声音，他们现在在做什么？他们在用什么姿势？没有声音，他们不会在台灯下研究杜蕾斯包装上的英语语法吧？&nbsp;<BR><BR>老爸，这玩意好好玩哪。&nbsp;<BR>老爸，你戴这个不难受吗？&nbsp;<BR>老爸，这活象被人死死勒住脖子啊。&nbsp;<BR>老爸，会不会里面的血倒流啊？&nbsp;<BR><BR>我走出家门，凌晨三点，到了女友家，灯还亮着。&nbsp;<BR>我敲门，她开门。&nbsp;<BR>又是一场相对。&nbsp;<BR>她讶异地看着我。&nbsp;<BR>能不能进来坐一坐，我说，突然发现自己嗓子都是哑的。&nbsp;<BR>你怎么了？她问，你哭过了？&nbsp;<BR>没有，我想抱抱你。我说&nbsp;<BR><BR>那天晚上我是在女友家度过的，这是我生平最希奇的一夜。&nbsp;<BR>我住在分手的前女友家，原因是我被自己的前前女友从自己家活生生逼出来。&nbsp;<BR><BR>讽刺吧，生活就是这个样子的。&nbsp;<BR><BR>女友为我铺床叠被，当然，好笑的是，她在为我打地铺。&nbsp;<BR>她睡床，我睡地。&nbsp;<BR>一旦分了手，最狭小的空间也要分隔出最远的距离。&nbsp;<BR><BR>我躺在地板上，听着女友安静而均匀的呼吸声。&nbsp;<BR>想与之共度余生。&nbsp;<BR>她睡得这么安稳。&nbsp;<BR>她会同意吗？&nbsp;<BR>她翻了个身。&nbsp;<BR><BR>她翻身时呼吸的频率一点没有改变。&nbsp;<BR>她根本没有睡着，她在装睡。&nbsp;<BR>我想她会的。&nbsp;<BR><BR>你会不会嫁给我？黑暗里我问她。&nbsp;<BR>你说什么？&nbsp;<BR>你会不会嫁给我？&nbsp;<BR>不会，永远不会。&nbsp;<BR>我心凉了下去，为什么？&nbsp;<BR>她沉默了很久，一字字道&nbsp;<BR>你太变态了，我不适合你。&nbsp;<BR><BR>有没有人告诉你什么叫万念俱灰？那个时候我就是万念俱灰的。&nbsp;<BR><BR>我本来与她有最温馨的感情，我们一起上班，一起下班，周末看电影，一起逛家具店，经过钻饰店，她会似笑非笑地看我一眼，让我觉得，随时我牵她手进去，出来她就会是我的妻。&nbsp;<BR><BR>直到有一天，那个19岁的女孩闯了回来，把我打回原形。&nbsp;<BR>那段过去，原本是恋人的私密，现在全成了险恶。&nbsp;<BR>我无法往前走，前路全被堵死。&nbsp;<BR><BR><BR>早上回家的路上看到那个男生和她正去上学，迎面走来，她朝我摊开手。&nbsp;<BR><BR>什么？&nbsp;<BR>给我点钱。&nbsp;<BR>作什么？&nbsp;<BR>老去你家也不好，还是去开房。&nbsp;<BR><BR>Ok。退无可退，也就无需再退了。&nbsp;<BR>那一刹那，我决定正式应战。&nbsp;<BR><BR>我微笑望着她，伸出手指抵住脑门——那个贴着小熊创可贴的位置，笑。&nbsp;<BR><BR>地狱一共有几层？&nbsp;<BR>我想，我和我的宝贝女儿很快都会知道。&nbsp;<BR>我讲故事有一个很大的缺点，我从来不喜欢给人物编名字，这是一件非常头痛的事情，相比之下，我更喜欢称呼这样东西。&nbsp;<BR>一个人只有一个名字，但是可以有无数个称呼。&nbsp;<BR>每一个称呼是一个故事。&nbsp;<BR>所以这是一个没有名字，只有称呼的故事。&nbsp;<BR><BR>但是我不知道这种只靠他和她的称谓能坚持多久。&nbsp;<BR><BR>要报复一个人有多少办法？&nbsp;<BR>其实要惩罚她最好的办法就是接受。&nbsp;<BR><BR>于是我接受了“女儿”和她的男生。让他们自由进出我的房间，为他们所欲为的任何事。&nbsp;<BR>那段时间是我记忆中最为诡异的时光，每天下班回到家，就可以看到她和那个男生坐在桌子前，要么在看电视，要么凑在一起做作业，那个场面极其温馨，甚至在好几次，刹那间我产生异样的幻觉，对面坐着的长发女孩确然便是我的女儿，而她心之所系的并非是我，而是边上那个男生。&nbsp;<BR><BR>她亦变得温驯起来，看到我回来抬头望我，乖乖道，爸爸，你回来了。&nbsp;<BR>男生道，叔叔。&nbsp;<BR>我带回披萨给他们吃，问他们的功课，陪他们一起看幼稚无聊的韩国片，每当边上的男生笑得浑身抽搐时，我都感到边上一双冷冷的眼神，注视着。&nbsp;<BR><BR>她越来越频繁地住在我隔壁房间，而他的男朋友则大多回宿舍。每次我们都站在门口，朝他挥手告别。&nbsp;<BR>路上小心。她叫。&nbsp;<BR>有空来玩。我说。&nbsp;<BR>有一次，我私下问那个男生要张照片，他很奇怪，但还是给了我一张报名照。&nbsp;<BR>后来一天晚上我和她一起晚饭，吃完我不动声色地起身收拾碗筷，她无限幽怨地看着我。&nbsp;<BR>我把刚学的新歌唱得兴高采烈。&nbsp;<BR>我洗碗，她从背后抱住我，从额头抵住我背脊，我转身，从口袋里掏出放大n倍的那张报名照，乐呵呵地展示。&nbsp;<BR>她的“男友”在相片里无限肃穆地望着她，仿佛象遗容。&nbsp;<BR>她无限怨毒地望着我。&nbsp;<BR>猪。&nbsp;<BR>不孝！&nbsp;<BR><BR>一个星期后发生了一件事。&nbsp;<BR>那夜从女友家走出来时，我抱住她喃喃自语，如果你改变了主意，一定要告诉我。&nbsp;<BR>一个星期后的一天，她改变了主意，可我再也没有机会得到她。&nbsp;<BR>那天我在家，临时下楼买包烟，上来的时候发现女儿在哭，我没有理她，回到房间，上网，突然发现msn里女友已经消失，我心生不详，马上打开聊天记录。&nbsp;<BR>我冲到她房间，拼命砸门，她死也不开。&nbsp;<BR>女友试图与我重新开始。&nbsp;<BR>而她则冒充我严厉地拒绝了她。&nbsp;<BR>女友觉得不对劲，打电话到我家，她接了电话，甜蜜温柔。&nbsp;<BR>装疯卖傻。&nbsp;<BR><BR>开门！你他妈给我开门！&nbsp;<BR>不开！死也不开！&nbsp;<BR>你给我等着！&nbsp;<BR>那天晚上，我去了一个酒吧，叫了一个鸡，把她带回家。&nbsp;<BR>她在客厅呆呆地看着我带着一个艳俗女人回家，开门进了房间。&nbsp;<BR><BR>妓女脱了衣服，站在我面前，展示身材。&nbsp;<BR>我一眼没看她，从皮夹点出一千块钱。&nbsp;<BR>叫。&nbsp;<BR>叫什么？&nbsp;<BR>床。&nbsp;<BR>我凑近她，低声说，我什么也不跟你干，你只要使劲叫。&nbsp;<BR><BR>所以说有些东西是需要专业素养的，那只鸡在我房间叫，我皱着眉头在边上翻杂志。&nbsp;<BR>她困惑地望我，怕是从来没碰到如此疯的客人。&nbsp;<BR>十分钟后，我嘴笑泛起微笑。&nbsp;<BR>她终于来了。&nbsp;<BR>她在门外砸，使劲砸。&nbsp;<BR>开门！开门！&nbsp;<BR>不开！死也不开！我冲着门外叫。&nbsp;<BR>让她滚！&nbsp;<BR>我置若罔闻，看着站在我面前的鸡，不要停！&nbsp;<BR>屋外开始号啕大哭，她已经疯了。&nbsp;<BR>我宁愿和只鸡**也不想抱她。&nbsp;<BR>开门！你给我开门，她开始门外使劲踹门。&nbsp;<BR><BR>她整整哭闹了十分钟，我懒散地去开了门。&nbsp;<BR>她已瘫软在地上，哭着朝我喊，让她滚。&nbsp;<BR>这是我家，要滚你滚。&nbsp;<BR><BR>她走了。&nbsp;<BR>什么也没说，默默走了。&nbsp;<BR><BR>我闭上眼睛，但愿从未认识她。睁开眼，我已痛得躬下身去。&nbsp;<BR><BR>事情本来就这样结束的。&nbsp;<BR><BR>几天后，我接到那个男生的电话，他问我女儿为什么好几天没去学校。&nbsp;<BR>我默不作声。&nbsp;<BR>她失踪了？&nbsp;<BR>电话那里沉默了很久。&nbsp;<BR><BR>她怀孕了你不知道？男生在电话那头问我。</P>
<P style="TEXT-INDENT: 2em">她怀孕了？&nbsp;<BR>是的。&nbsp;<BR>我心脏一阵痉挛，是我的孩子？&nbsp;<BR>是的。&nbsp;<BR>我闭起眼睛。&nbsp;<BR>电话里问：你是不是想问，那天晚上我们……，他笑了笑。&nbsp;<BR>我不喜欢女孩子的，他轻轻讲。&nbsp;<BR><BR>全明白了。&nbsp;<BR>万死莫辞。&nbsp;<BR><BR>在普通的故事里，我找到了她，我们幸福地在一起。&nbsp;<BR>对不起，这可能是你们想看的，却不是我想说的故事。&nbsp;<BR><BR>我去了她学校，教务处的人说她已经办了退学手续，我到她寝室，所有的东西都收拾一空，空荡的床上轻轻飘动着粉红色的纱帐，那是学期开学时我买给她的。&nbsp;<BR><BR>她寝室的同学说，她整理东西时，大家都问她干吗，她笑吟吟地说，搬到男朋友家去住。&nbsp;<BR>大家都羡慕地看着她，东西猜测。&nbsp;<BR>她同学嫌弃地看着我，仿若我是纠缠不清的第三者。&nbsp;<BR><BR>我去了她跳舞的酒吧，所有人都说她辞职了，我不信，天天去那里等，我拽着新上任的dancing&nbsp;Quenn，一相情愿地肯定她知道她的去向，然后我就被打了。&nbsp;<BR><BR>我做得确然有些过分，我把那个女孩子堵在女洗手间门口，她不告诉我，我决不让她上台，她耸耸肩，拨了电话，过了会来了几个人，先是好言相劝，我朝他们翻白眼，他们拖着我往酒吧门口拉，经过一张台子，我抄起一个酒瓶，然后我就被打了。&nbsp;<BR><BR>我爬回家，坐在家门前擦着眼泪一遍遍拨她手机。&nbsp;<BR>没有“您拨的用户已关机”，没有“您拨的是空号”，没有“您拨的号码暂时无法接通。”没有“您拨的用户正在通话，请稍后拨。”，什么都没有，就是无止境的空白。&nbsp;<BR><BR>躺在地上，还在痴痴笑。&nbsp;<BR>明天她就会回来了吧，摇着我的胳膊说，老爸，我好饿。&nbsp;<BR>老爸，我出去逛了圈，还是喜欢你这里。&nbsp;<BR><BR>我就这么痴痴笑着睡去，我把房间整理得很干净，我在门上贴着对联。&nbsp;<BR>上联是“欢迎你回来。”&nbsp;<BR>下联是“不许再走了。”&nbsp;<BR>看了看，对自己的书法很是满意。&nbsp;<BR><BR>三个月后我撕掉对联。&nbsp;<BR>揉成一团，放进嘴里使劲咽，最后趴在马桶边干呕。&nbsp;<BR><BR>我大病一场。&nbsp;<BR>睡梦中常见一个华丽的景象。&nbsp;<BR>一个婴儿在天花板上缓慢地爬，转过脸来，面容与她一般无异。&nbsp;<BR><BR>再也没有人见过她。&nbsp;<BR><BR>一年后的一天，我有事坐出租车路过一个师范学院，我靠在车窗，远远看见一个与之一模一样的背影。我连忙叫司机停车，我冲下车，追上去一把拉住她。&nbsp;<BR><BR>回过头，是个陌生的女孩子。惊恐地望着我。&nbsp;<BR>对不起，我放开。&nbsp;<BR>她笑了，认错人了吧。&nbsp;<BR><BR>她要赶去一个地方，打不到出租车，为了抱歉，我送她，到了目的地，她下车，我留下了她的电话。&nbsp;<BR><BR>刚开始在一起的时候，我一直在她后面保持一段距离走着，因为她们有着一模一样的背影，我常常痴痴地望着那张背影，然后缓缓走上去，搂住她，对她说，别离开我。&nbsp;<BR>她摇着头笑，傻孩子，我不离开你。&nbsp;<BR>她25岁，叫我傻孩子。&nbsp;<BR><BR>渐渐地，走在一起时，我离她的背影的距离越来越短，当我们终于可以并肩走着，而我转过脸和她说话时没有一丝怀疑时，我向她求婚了。&nbsp;<BR><BR>我确实是爱她的。&nbsp;<BR>没有任何证据表明我不爱她。&nbsp;<BR>爱只是一个词，内容千差万别。&nbsp;<BR>我不这样爱你，不代表我不爱你。&nbsp;<BR><BR>婚礼很简单，然而我们却异常幸福，我没有问过她的过去，她曾与谁恋爱，她也没有问过我有什么过去。&nbsp;<BR><BR>她从师范学校毕业，在一个幼儿园兼托儿所的所在教授小孩子。&nbsp;<BR>我辞去工作，开了一个广告公司，渐渐居然也招了些人来，添置了一部车。&nbsp;<BR><BR>周末，便与妻开车去近郊，归来时买些当地零碎杂食供奉她的同事，我的员工。&nbsp;<BR><BR>时间，就是这样慢慢过去的，我把她的照片放在最最隐秘的地方，隐秘到自己都不敢翻动，也不敢销毁。&nbsp;<BR><BR>婚后的四个月零三天，如往常一样，我去接妻下班。&nbsp;<BR>妻正在和一个穿着长裙，化着淡装的女子聊天，他们并排坐在绿色的小长木凳上。&nbsp;<BR>一个小孩子在他们四周调皮蹒跚地跑来跑去。&nbsp;<BR><BR>妻看到我，笑着介绍说，这是我先生。&nbsp;<BR>我一动也不敢动，呆呆望着她。&nbsp;<BR><BR>我的女儿，她不再扎着马尾，长发流泻下来。&nbsp;<BR>震惊从她眼眸中一闪而过。&nbsp;<BR><BR>你好，两秒钟后，她礼貌地伸出手，淡淡笑道。&nbsp;<BR><BR>小孩子摇摇晃晃地抱着我腿，牙牙地唤，爸爸。&nbsp;<BR>笑得春光灿烂。&nbsp;<BR><BR>妻笑起来。&nbsp;<BR>那不是你爸爸。&nbsp;<BR><BR>那年，我29，她21。&nbsp;&nbsp;<BR>如果你日夜思念的人在你面前，你只能装作完全不认识她，是什么感觉？&nbsp;<BR>因为她装作不认识你。&nbsp;<BR>我甚至怀疑她从未认识过我。&nbsp;<BR>她爱怜地撸撸小男孩的头发，抱起来朝我们点了点头，离开了。&nbsp;<BR><BR>我开着车，带妻去吃饭，不经意问。&nbsp;<BR>那是谁？&nbsp;<BR>哦，她很漂亮吧。&nbsp;<BR>是哎，我嬉皮笑脸地望着妻，不过及不上你。&nbsp;<BR>于是妻满足地讲起了她的来历。&nbsp;<BR><BR>前两个月一天，突然看见她隔着幼儿园的栏杆，无限贪婪地看着，我回望她。&nbsp;<BR>她朝我笑笑，我请她进来坐。&nbsp;<BR>过了两天，她带了那个孩子来。&nbsp;<BR>她似乎很忙，总是周末来接他，平时都归我们园照管。&nbsp;<BR>妻的幼稚园有日夜寄宿的一项服务。&nbsp;<BR>类似孤儿院。&nbsp;<BR><BR>那多少次我去接妻时，我的孩子正在我边上玩着积木？&nbsp;<BR>我极疲倦。&nbsp;<BR>累了吧，早点回去吧，妻温顺极。&nbsp;<BR>晚上，我抱着妻，一次次进入她，流着眼泪。&nbsp;<BR><BR>妻摸着我的脸颊，问我怎么了。&nbsp;<BR>我说我爱你。&nbsp;<BR><BR>礼拜一，我离开公司去了那里，妻只是惊讶我怎么给她惊喜，没空顾我。&nbsp;<BR>我找到那个孩子，问他妈妈好吗。&nbsp;<BR>他只是笑着唤爸爸。&nbsp;<BR>似乎妈妈只教过这一句。&nbsp;<BR><BR>第二个周末，我早早等在那边，她抱着孩子与妻出来，似乎与妻很谈得来。&nbsp;<BR>望见我，朝我点点头。&nbsp;<BR>不如回家一起吃个便饭。我提议。&nbsp;<BR>妻极热烈地赞成，搂住我。&nbsp;<BR>我老公做的鸡翅可好吃。&nbsp;<BR><BR>我迫切盯着她，她惶恐地看了看妻，低下看了看孩子。&nbsp;<BR>好。&nbsp;<BR>我便开车送她们回家，一个人在超市里买了许多菜，路过速冻鸡翅，独独跳了过去。&nbsp;<BR>看到她再吃我做的鸡翅，会想起“我孝顺吧”的笑容，我会崩溃。&nbsp;<BR><BR>回到家，妻正带着她展览我们的家。&nbsp;<BR>她何尝不熟悉每一寸。只是淡淡随着妻介绍，笑。&nbsp;<BR>望着妻幸福的笑容，我决定与她一样，当作什么都没发生过。&nbsp;<BR>于是这顿饭吃得极其圆满，我讲起公司的趣事，她笑得十分开心。&nbsp;<BR>喝了酒，更是笑得手舞足蹈。&nbsp;<BR>时光刹那倒流。&nbsp;<BR><BR>晚了，妻让我送她回去，她点头。&nbsp;<BR>下楼时，她抱着孩子，我心跳得很厉害。&nbsp;<BR>我手里握着车钥匙，口袋里的信用卡还有钱。&nbsp;<BR>如果此刻我拽着她的手，开着车，从此天涯海角，为什么不？&nbsp;<BR>当时，真有一瞬间是这样想，豁出去算了。&nbsp;<BR>真的豁出去算了。&nbsp;<BR>房子，公司，一切都留给妻。&nbsp;<BR>这样的机会，再也没有。&nbsp;<BR>然而不行。&nbsp;<BR>抵不过，便是责任二字。&nbsp;<BR>恨自己恨到骨子里。&nbsp;<BR><BR>到得楼下，她说就到这里吧，我打车回去。&nbsp;<BR>我一把拽住她，装到什么时候？&nbsp;<BR>我没装呀？她笑了，笑得还是那么好看的，说，我已经不爱你了。&nbsp;<BR>不相信？&nbsp;<BR><BR>我深呼吸，两次，笑。&nbsp;<BR>真的？&nbsp;<BR>真的！她看着我，无比认真地回答。&nbsp;<BR><BR>似乎真又有交锋感。&nbsp;<BR>于是我笑，好呀，那时常来玩。说罢，还是盯着她眼睛。&nbsp;<BR>人，总是斗不过好胜之心。&nbsp;<BR><BR>只要你没意见。她笑得眼神复杂。&nbsp;<BR><BR>然后，她便成为我们家的好友，妻会到周末，由我开车送到商业区。&nbsp;<BR>她候在那里，两个人亲如姐妹般携手逛街。&nbsp;<BR>买了一堆乱七八糟的衣服回来，在房间里互相比试，笑着让我进来评比。&nbsp;<BR>有时候她们甚至在饭桌上同气连枝地嘲弄我。&nbsp;<BR><BR>哟，今天带得领带很帅的嘛，秘书买的呀？&nbsp;<BR>呀，你这个人怎么那么开不起玩笑啦。说说你老公，怎么这样呀，多不好。&nbsp;<BR>妻笑吟吟地看着我们闹。&nbsp;<BR>他就象个孩子，什么都说不起。妻笑着挡驾。&nbsp;<BR>乖噢，妈妈给你买糖吃，妻胡噜我头发。&nbsp;<BR>我坐在那里装疯卖傻，谢谢妈妈。&nbsp;<BR><BR>大家笑，一室春光。&nbsp;<BR><BR>我从来没问她一年多来如何过的，我不敢问。&nbsp;<BR>是怕回答。&nbsp;<BR>她让我送她了，只是永远送不到目的地，在快到时，边叫，下来下来，到了。&nbsp;<BR>一个多月后的一天，我放她下来，她跳下去，象小鹿一样。&nbsp;<BR>是啊，她才21。&nbsp;<BR>我抱住孩子，逗弄着不肯放。&nbsp;<BR>她先是在边上看着笑，笑着笑着捂住嘴，然后失声痛哭。&nbsp;<BR>我走上去，轻轻搂住她。&nbsp;<BR>她一把抱住我。&nbsp;<BR>老爸！&nbsp;<BR><BR>刹那间我肝胆俱裂。&nbsp;<BR><BR>那天晚上下着雨，她在我怀里哭了很久，浑身颤抖，哭了整整两个小时，仿佛一年多来的全部爆发出来。&nbsp;<BR>我紧紧抱住她。&nbsp;<BR>贪得一秒是一秒。&nbsp;<BR><BR>最后她放开我，抬起头。&nbsp;<BR>这不是我们的孩子！&nbsp;<BR>我们的孩子死了！&nbsp;<BR>那天我要送她回家，她不肯。&nbsp;<BR>她还是怕我知道她出处。&nbsp;<BR>我坚持。&nbsp;<BR>她望着我，说不如去酒店。&nbsp;<BR>她急需休息或者倾诉。&nbsp;<BR>我们去了附近的一家四星级酒店。&nbsp;<BR>开了房，服务生带我们进房。&nbsp;<BR>进了房，她将孩子放下，我搂抱住她。&nbsp;<BR>她轻轻将我推开。&nbsp;<BR>告诉我这一年来怎么过的。我紧紧盯着她。&nbsp;<BR>让我休息会，她说。&nbsp;<BR>自顾自走过去。&nbsp;<BR>躺在床上，闭着眼睛，一动不动。&nbsp;<BR>我望着她甜美的睡容，突然忆起以前相处时的时光，常常早上醒过来，咫尺间便是这样一张甜美的睡容，安详，宁静，象个孩子一般好看，她的皮肤，好象吹弹便破，每当那时，我便会恶作剧地使劲吹她的脸，看看到底能不能吹破掉。被我吵醒，她都会大叫。&nbsp;<BR>肆无忌惮地尖叫一番。&nbsp;<BR>叫完，翻了个身，又睡着了。&nbsp;<BR>我慢慢走过去，看着她，端详了很久，慢慢把她遮盖在脸颊的长发掠过耳边。&nbsp;<BR>她突然惊醒。&nbsp;<BR>原来刚才真的睡着了。&nbsp;<BR>她朝我笑笑，起来开了罐咖啡。&nbsp;<BR>把孩子抱在床上，盖好被子，坐在桌角，静静望着我。&nbsp;<BR>你想知道什么？&nbsp;<BR>你知道我想知道什么，我低沉着嗓子望她。&nbsp;<BR>以前每当我用这种嗓音跟她讲话，她都会吓着，惊恐地望着我。&nbsp;<BR>这次她只是淡淡一笑。&nbsp;<BR>好罢。她说。&nbsp;<BR>那天我从你家离开，我根本就没有离开，坐在楼道里。&nbsp;<BR>一个男人走上来，后来我就和他生活在一起，后来他死了，这是他的孩子。&nbsp;<BR>她用寥寥几句总结了一年。&nbsp;<BR>一年里她一直住在我楼下。&nbsp;<BR>我们的孩子呢？&nbsp;<BR>他走前，把孩子托付我送去孤儿院，我没送，把自己的孩子打掉了。她淡淡说。&nbsp;<BR>你好狠。我说。&nbsp;<BR>我爱他！她回敬我，你一直不相信我会爱上别人！可是我爱他，为了他，我可以带大他和别人生的孩子，把我自己的打掉！&nbsp;<BR>我不信。你怎么说我都不信。&nbsp;<BR>她突然笑起来。&nbsp;<BR>你真可爱，你不会以为这孩子是我拐带来的吧？你可以去查查公安局有没有失踪案。&nbsp;<BR>你爱他？我冷笑。&nbsp;<BR>你从我房间出来就爱上了另一个男人，第二天从学校搬走所有东西和他住一起？&nbsp;<BR>——你的爱真珍贵！&nbsp;<BR>她毫无征兆地打了我一耳光。&nbsp;<BR>木无表情地看着我。&nbsp;<BR>突然愧疚。&nbsp;<BR><BR>一切是我的错，我怎能再讥讽她。&nbsp;<BR>不甘心罢了。&nbsp;<BR>叹气。&nbsp;<BR><BR>好，你真打算带他长大？你拿什么养他？&nbsp;<BR>你管得真宽。她微微一笑。&nbsp;<BR><BR>那个时候我和她又四目相对地对峙着。&nbsp;<BR>在她的笑容里我突然发现我还爱她。&nbsp;<BR>或者说，我竟然重新爱上了她。&nbsp;<BR>恋爱后期，我已疲倦地不想望她。&nbsp;<BR><BR>她突然说了句没头没脑的话。&nbsp;<BR>我看着你第一次领你的老婆进的楼。&nbsp;<BR><BR>我有妻。&nbsp;<BR>我完美的妻。&nbsp;<BR>我站起来，走吧，送你回家。&nbsp;<BR>你先走吧，我想在这里睡一晚，她看了看气派温适的房间。&nbsp;<BR>毕竟付了钱。&nbsp;<BR>况且孩子也已经睡着。&nbsp;<BR><BR>心烦得不知怎么再去坚持。&nbsp;<BR>我竟然会还爱她。&nbsp;<BR>或者说。&nbsp;<BR>我竟然重新爱上她。&nbsp;<BR><BR>如何区分？&nbsp;<BR>结果不还都一样？&nbsp;<BR><BR>她已不爱我。&nbsp;<BR>好悲哀。&nbsp;<BR>妻尚在等我。&nbsp;<BR>连悲哀资格都没有。&nbsp;<BR><BR>好，你早些睡。&nbsp;<BR>我转身走。&nbsp;<BR>她突然叫住我。&nbsp;<BR>我回头。&nbsp;<BR>她怔怔望着我，突然问。&nbsp;<BR>我还能到你们家来吗？&nbsp;<BR>我笑笑，点了点头。&nbsp;<BR>她似乎一下子松弛下来，给了我一个甜美的笑容。&nbsp;<BR>好心疼。&nbsp;<BR><BR>走出房间，下了电梯。&nbsp;<BR>走在大堂，想拨个电话给妻，现编个理由。&nbsp;<BR>尽管并未对她不起，但送她送了三个小时，无论如何讲不过去。&nbsp;<BR>摸口袋，手机留在房间。&nbsp;<BR>记起来，刚才调了无声了，顺手放在桌上。&nbsp;<BR><BR>上楼，敲门。她不开。&nbsp;<BR>我使劲敲。&nbsp;<BR>一个服务生走过，我让他开。&nbsp;<BR>开了门，房间里空荡荡的，毫无一人。&nbsp;<BR>怀疑走错，抬头看门号。&nbsp;<BR>你看到这里的小姐走吗？我问服务生。&nbsp;<BR>噢，x小姐。他说。&nbsp;<BR>X小姐？x是我的姓。&nbsp;<BR>心中突然不妥。&nbsp;<BR>你认识她？&nbsp;<BR>是，她一直住这里。只是不是这间房。&nbsp;<BR>我怔怔随着服务生按了电梯，坐再上一楼。&nbsp;<BR>他将我引到一个房前。退开。&nbsp;<BR>我犹疑着敲门。&nbsp;<BR>门打开，她震惊地望着我。&nbsp;<BR>我突然明白一切。&nbsp;<BR>她用什么养那孩子。&nbsp;<BR>她已是一个高级妓女。&nbsp;<BR>我一把冲过去，掐住她脖子，将她撞在墙上，喉咙里发出野兽受伤的声音。&nbsp;<BR>呜呜作响。&nbsp;<BR></P>
<P style="TEXT-INDENT: 2em">她脑袋狠狠撞在墙边，并不呼痛，只是看着我。&nbsp;</P>
<P style="TEXT-INDENT: 2em">多少钱？&nbsp;</P>
<P style="TEXT-INDENT: 2em">什么？&nbsp;</P>
<P style="TEXT-INDENT: 2em">多少钱？&nbsp;</P>
<P style="TEXT-INDENT: 2em">什么？&nbsp;</P>
<P style="TEXT-INDENT: 2em">睡你一晚多少钱？我毫无控制地叫起来。&nbsp;</P>
<P style="TEXT-INDENT: 2em">三千。她说。&nbsp;</P>
<P style="TEXT-INDENT: 2em">当时她说这句话的时候毫无情绪波动。&nbsp;</P>
<P style="TEXT-INDENT: 2em">今天天气很好。&nbsp;</P>
<P style="TEXT-INDENT: 2em">三千。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我怔怔地望着她，渐渐浑身抽搐，无可遏止，我掏出皮夹，想找三千块扔过去。&nbsp;</P>
<P style="TEXT-INDENT: 2em">学那电视剧经典情节。&nbsp;</P>
<P style="TEXT-INDENT: 2em">可惜我从不多放现金在皮夹，那多暴发。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我掏出卡。&nbsp;</P>
<P style="TEXT-INDENT: 2em">可以。她开始脱裤子。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我流眼泪了，我走过去轻轻抱住她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她裤子脱了一半，被我抱着。&nbsp;</P>
<P style="TEXT-INDENT: 2em">什么话也不说。&nbsp;</P>
<P style="TEXT-INDENT: 2em">只是任我抱着。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我养你。我在她耳边反复轻声说，我养你好吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">我好贵的。她似乎在说给自己听。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那晚我从酒店走出来，知道自己命中注定要喂食她一生。&nbsp;</P>
<P style="TEXT-INDENT: 2em">因为她是我女儿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">第二天，我叫秘书拿了报纸给我，查了市区一家小户型楼盘。&nbsp;</P>
<P style="TEXT-INDENT: 2em">当天下午，自银行提了三十万，作首期。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她真的好贵。&nbsp;</P>
<P style="TEXT-INDENT: 2em">恋爱时，一小碗米粉都叫她高兴半天，非但如此，还逼我也必须吃得干净，不许浪费。&nbsp;</P>
<P style="TEXT-INDENT: 2em">男男女女，就喜欢这么作践自己。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这个礼拜，还是按时回家与妻吃晚饭。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她答应我，再也不了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻对我的变化毫无察觉，或许是我年岁一大，伪装功夫高明。&nbsp;</P>
<P style="TEXT-INDENT: 2em">然而，在床上，妻的脸还是毫无障碍地变成了她的。&nbsp;</P>
<P style="TEXT-INDENT: 2em">充满讥讽。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那时我竟然阳痿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">房子买得很顺利，眼看三天后她就可以住进去。&nbsp;</P>
<P style="TEXT-INDENT: 2em">虽然小，可是很温馨。&nbsp;</P>
<P style="TEXT-INDENT: 2em">而且着实不便宜。&nbsp;</P>
<P style="TEXT-INDENT: 2em">谁说温馨便宜。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那天晚上做了个梦，梦到我在那间房里和女儿彻夜**，孩子也变成我们的。&nbsp;</P>
<P style="TEXT-INDENT: 2em">除了会叫爸爸。&nbsp;</P>
<P style="TEXT-INDENT: 2em">也会叫妈妈。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她的床上功夫变得好极了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">毕竟伺候过无数男人了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">梦里我竟哭着笑出声来。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那天早早地，我去酒店接她，她早已等候着我。&nbsp;</P>
<P style="TEXT-INDENT: 2em">收拾好一切。&nbsp;</P>
<P style="TEXT-INDENT: 2em">穿得象个新学期开学的女生。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我搂住她，她靠在我怀里。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我带她去她的新家，她看着，转头在我脖子里吻。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我心中苦笑，终于走上成功男人无可避免的路。&nbsp;</P>
<P style="TEXT-INDENT: 2em">放置好她东西，我开着车去妻的幼儿园，我们再一起回家吃晚饭，晚上她就会回到这里。&nbsp;</P>
<P style="TEXT-INDENT: 2em">但愿钢丝走到成功。&nbsp;</P>
<P style="TEXT-INDENT: 2em">获得满场掌声。&nbsp;&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻的卡里有不少钱，她似乎也极大方地给我们买了两张头等舱的船票。&nbsp;</P>
<P style="TEXT-INDENT: 2em">船是豪华邮轮。&nbsp;</P>
<P style="TEXT-INDENT: 2em">具体开往什么地方，由于和这个故事本身关系不大，我就不多说了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">总之，我与女儿登上船的刹那，我感觉象登上泰坦尼克一般。&nbsp;</P>
<P style="TEXT-INDENT: 2em">撞上冰块，然后一起沉没，然后手拉手一起葬身。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我那时还不知道，虽然这看起来很悲惨，但相比与今后实在发生的事，那样要幸福和美丽得多了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">船启程的时候，是傍晚。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我和她站在栏杆处，望着下面翻滚的江水。&nbsp;</P>
<P style="TEXT-INDENT: 2em">冷吧？我看看她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">还好，她朝我羞涩地看了一眼，转身进了房间。&nbsp;</P>
<P style="TEXT-INDENT: 2em">自从昨夜那一场看似突如其来却势在必行的**后，我们就很难正常地说话。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这对我们来说，象一个各自必须珍藏，却永远不能放在我们中间，供我们正视的事情。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我盯着船离岸越来越远。&nbsp;</P>
<P style="TEXT-INDENT: 2em">岸边送行的人渐渐散去，有一个人还在那里怔怔地望着我们。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那个人是妻。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我和她逐渐地对视着，视线逐渐拉远，我想叫出声喊，但嗓子居然是哑的。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我不知道这船的离开，这妻的站立，是什么意思。&nbsp;</P>
<P style="TEXT-INDENT: 2em">女儿当时在船舱里。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我怔怔地望着妻，妻远远地，面无表情地看着我，举手朝我挥别。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这个场面，其实是非常非常恐怖的，非常非常的恐怖。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我们渐渐地开远了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻变成一个再也望不见的点。&nbsp;</P>
<P style="TEXT-INDENT: 2em">海上只有一些浮标，随着海浪逐渐漂浮，我脸色惨白，象被冰雹砸了五个小时一样，回到船舱，看着女儿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">怎么啦？她抬头问我。&nbsp;</P>
<P style="TEXT-INDENT: 2em">没有什么。我勉强笑笑。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她噢了一声，站起来不看我，我吃饭去了，就蹦蹦跳跳地开了门，去了餐厅。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我不知道为什么没有告诉她刚才的景象，可能是怕她承受不住，可能事情本身已经超出了我能预计的范围，我感觉到船以某种稳定的振幅前进着。&nbsp;</P>
<P style="TEXT-INDENT: 2em">船舱里的喇叭居然会放音乐。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我坐在船舱的床上安静地听着音乐，回忆着妻刚才的眼神，准确说来，那是一种没有任何感情色彩的眼神，或许，只有在彼此逐渐消失在视线的最后刹那，我从中读到了些许不舍的东西，但那也很有可能是我的一相情愿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">到了晚上10点多，女儿回来了，她已然喝醉。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我们去跳舞吧。她一把牵住我手，把我往外拖。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我使劲摔开她手，看着她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">你看我干吗？她冲着我喊，你看着我干吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">我其实心里非常明白，女儿对目的地，对将来可能会发生的一百万个可能充满恐惧，在这种恐惧之下她选择了一种疯狂的发泄，无论是买衣服，还是跳舞，都是她对此的反抗。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我不能告诉女儿此行已然毫无意义，生活当中随时会有某种旋涡状的东西，我已感受到它的存在，可我只能咬住牙关，不便透露，因为这无比险恶。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我安静地看着她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她突然笑了，你早点睡，我去玩了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她在我面前脱下衣服，换了一件无比性感的衣服，打开门头也不回地出去。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我在房间里坐了一会。&nbsp;</P>
<P style="TEXT-INDENT: 2em">到开门去了轮船的酒吧，推进门就看见一个长发的女子以无比专业的舞蹈震慑着所有人，赢来所有的掌声。&nbsp;</P>
<P style="TEXT-INDENT: 2em">每一个男人的眼神都是垂涎欲滴的。&nbsp;</P>
<P style="TEXT-INDENT: 2em">真是帮猪。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这是一种我从来没有见过的舞蹈，或许我对此本身就不熟悉，它非常的性感，但这种性感因为某种专业性在里面，故而增添了一种凛然自威的东西在里面。&nbsp;</P>
<P style="TEXT-INDENT: 2em">N年前，她已是dancing&nbsp;Queen。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我找了吧台处坐下。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她一曲跳完，走到吧台处，不看我，自然有男人上来请她喝酒了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">于是他们就在我边上。&nbsp;</P>
<P style="TEXT-INDENT: 2em">接下去是对话。&nbsp;</P>
<P style="TEXT-INDENT: 2em">小姐，可以认识一下吗&nbsp;</P>
<P style="TEXT-INDENT: 2em">小姐，喝杯酒如何？&nbsp;</P>
<P style="TEXT-INDENT: 2em">小姐，你是一个人吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">小姐，你是学舞蹈的？&nbsp;</P>
<P style="TEXT-INDENT: 2em">就搭讪的言语的贫乏与庸俗性而言，这个男人实在无药可救。&nbsp;</P>
<P style="TEXT-INDENT: 2em">女儿低头笑笑，不说话，那男人更加着迷。&nbsp;</P>
<P style="TEXT-INDENT: 2em">围着女儿忙得团团转，小姐，可以请你跳支舞吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">女儿笑得非常文雅，好象小家碧玉。&nbsp;</P>
<P style="TEXT-INDENT: 2em">多年前，她就会笑得象只小狐狸了。我不忍再看下去，一个人拿了杯子欲走。&nbsp;</P>
<P style="TEXT-INDENT: 2em">刚要走时，突然听到她说。&nbsp;</P>
<P style="TEXT-INDENT: 2em">不行，我要和这位先生跳。&nbsp;</P>
<P style="TEXT-INDENT: 2em">突然好几个人眼光转向我。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我回敬他们。&nbsp;</P>
<P style="TEXT-INDENT: 2em">女儿走上来，仰头望着我的眼睛，先生，我可以请你跳支舞吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">我微笑，不答。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她继续问，先生，我可以请你跳支舞吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">我微笑，不答。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她执拗地，先生，我可以请你跳支舞吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">音乐已经响到一半，只有她一个人在对着我问。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她的眼眶里已经有东西在闪。&nbsp;</P>
<P style="TEXT-INDENT: 2em">还在苦苦追问，先生，我可以请你跳支舞吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">我没有和她跳舞，直到最后我也没有和她跳舞，可能当时，本身我心情就无端烦躁的缘故，我看着她这种以甜蜜的方式无比执拗地挟持，她根本不明白我们此行已充满荒谬，我看着她泪光闪闪地坚持要和我跳支舞，心里非常地反感，我只是说了一句，你自己玩吧，早点回来。转身回到船舱，整整一夜她都没有回来，在凌晨的时候，依稀在梦里见过她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那个时候大约是凌晨四五点钟，我在睡梦中猛地睁开眼。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她正趴在床沿看着我，无声地流着眼泪。&nbsp;</P>
<P style="TEXT-INDENT: 2em">一时间我根本没有清醒过来，我以为我还在梦里，于是伸出手在她脸颊上轻抚。&nbsp;</P>
<P style="TEXT-INDENT: 2em">什么事不开心了？我问她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她摇摇头。&nbsp;</P>
<P style="TEXT-INDENT: 2em">你怎么还不睡觉？我问她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我看看你，你睡吧。她说。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我脑子昏昏沉沉地，噢了一声，然后闭上眼，一会又睡着了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我不知道她究竟看了我多久，直到再次醒来的时候，天已经大亮了，我清醒得坐起来，皱着眉头看着女儿床上，一丝都不凌乱的床铺，她根本一夜都没有回来。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这个时候我已经充分忘记了昨天半夜的景象，这也是我事后才想起来的，当时我只留意到她的床上有一本日记本。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我把日记本翻开，里面密密麻麻的小字。我没有多看，梳洗完毕出舱房找女儿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">走进餐厅，每个人都在讨论昨天一个女孩在甲板上割腕自杀的故事。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她坐在甲板上，看着满天的星星，安静地用我的刮胡刀割开自己手腕，血无声地顺着甲板流到海里。&nbsp;</P>
<P style="TEXT-INDENT: 2em">清晨前的一场雨更是把甲板冲刷地干干净净。&nbsp;</P>
<P style="TEXT-INDENT: 2em">直到早起的人在甲板发现她的时候，她的耳中还塞着mp3的耳机，里面放着solverg&nbsp;Slettahjeii的爵士女声。&nbsp;</P>
<P style="TEXT-INDENT: 2em">用一种几乎快断气的声音哼唱着。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我在她的项链的荡坠里发现了一张男人的照片，这个荡坠在那晚我们**时我就看到过的，但是当我试图拨开时，被她阻止了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">可能她不想让那个男人目睹当时的景象吧。&nbsp;</P>
<P style="TEXT-INDENT: 2em">毕竟她深爱过她。&nbsp;</P>
<P style="TEXT-INDENT: 2em">哪怕他已经死了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我回到城里，整整两个多月不吃不喝，我没有再去我与妻的房间，整日把自己关在给女儿买的那栋小屋里，从早上到深夜，从来不开灯。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我拒绝和任何人接触，把手机也关掉。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我捧着女儿的骨灰两个多月后，觉得不能如此霸占她，或许我该把骨灰与那个男人葬在一起。&nbsp;</P>
<P style="TEXT-INDENT: 2em">于是我通过各方手段寻找那个男人葬的地方。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我先到了我住的地方，问各层每个邻居，有没有见过这个男人，曾经住在我家楼下。&nbsp;</P>
<P style="TEXT-INDENT: 2em">好些人都说没有见过。&nbsp;</P>
<P style="TEXT-INDENT: 2em">最后一楼的一个老婆婆告诉我，这个人的确曾经住在我家，但后来搬走了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我算了算时间，大约是我与妻结婚不久之后。&nbsp;</P>
<P style="TEXT-INDENT: 2em">搬走了？&nbsp;</P>
<P style="TEXT-INDENT: 2em">搬走了是怎么回事？我问那个老婆婆，他不是死了吗？&nbsp;</P>
<P style="TEXT-INDENT: 2em">你年纪轻轻怎么老咒人死呢？老婆婆白了我一眼。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我不信，去警署查，又通过我一个做警察的同学，查了半天，的确没有这个男人的死亡记录。&nbsp;</P>
<P style="TEXT-INDENT: 2em">他们倒给了我一个地址。&nbsp;</P>
<P style="TEXT-INDENT: 2em">在一个阳光明媚的上午，我捧着一坛骨灰，敲响了这个地址的门。&nbsp;</P>
<P style="TEXT-INDENT: 2em">开门的正是妻。&nbsp;</P>
<P style="TEXT-INDENT: 2em">当时是早上10点多钟，我敲了这扇门。&nbsp;</P>
<P style="TEXT-INDENT: 2em">门打开后，妻出现在我面前。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那个瞬间，我们都呆住了。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我隐隐感觉到事情还有险恶，也就是说，事情的险恶并没有到我所认为已经停止的地步，我捧着骨灰的手不断地抖着。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那天上午到深夜，我坐在那个男人的家里，妻从头到尾默然地不太说话，我也没有过多催促，下午四点多的时候，那个男人回家了，于是整个事情才在我面前慢慢铺展开来。&nbsp;</P>
<P style="TEXT-INDENT: 2em">一年多前，也就是我和妻结婚后不久，与这个男人发生恋情的正是妻。&nbsp;</P>
<P style="TEXT-INDENT: 2em">“我和你结婚不多久就早知道了，你并不爱我。”&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻坐在我对面，平静地说。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻常常看到我一个人坐在沙发上怔怔发呆，有时候她叫我，我会在她叫了好几次后才惊醒，抬头问她干什么。凭一个女人的直觉，她早明白我心中有一种很不甘的东西在压抑着不流露出来，于是妻也没有流露出，当然，这是在我面前。&nbsp;</P>
<P style="TEXT-INDENT: 2em">常常妻在吃完晚饭后，下楼去楼下的小区的长椅上坐着，直到认识那个男人。&nbsp;</P>
<P style="TEXT-INDENT: 2em">开始他们只是聊天，坐在长椅上轻声细语的聊天。&nbsp;</P>
<P style="TEXT-INDENT: 2em">直到妻了解到他身患重疾，并没有多少生命时，她早已爱上了他。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻决定离开我。&nbsp;</P>
<P style="TEXT-INDENT: 2em">但这对妻来说无疑是万分艰难而无法开口说出的决定，我虽然心底有一块位置早已空缺，而且妻或者任何人也无法填满，但至少我对妻的好是无可争议，无可挑剔的。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻根本说不出任何离开我的话。&nbsp;</P>
<P style="TEXT-INDENT: 2em">直到妻认识了女儿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">按照妻的说法，女儿踏进那所幼儿园的那天，不知为何第一眼相见，妻看到她扒在栏杆旁，贪婪地看着小孩子时，妻就对她有了莫名的好感和信任。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她们变成了好朋友。&nbsp;</P>
<P style="TEXT-INDENT: 2em">渐渐地，妻把与我的事情，与楼下那个男人的事情统统告诉了女儿。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这离我与女儿再次重逢，中间隔了整整一个多月。&nbsp;</P>
<P style="TEXT-INDENT: 2em">女儿一直没有向妻说明，直到有一天妻说着说着，便把与我的照片给女儿看。&nbsp;</P>
<P style="TEXT-INDENT: 2em">女儿才抖得象一只风中的鸡。&nbsp;</P>
<P style="TEXT-INDENT: 2em">在一个夜晚，她们一起通盘想了整件事。那根本不是任何人的孩子，那只是幼稚园里一个小孩，他的父母每逢周末去外地采购，便托管在妻的幼稚园，女儿很喜欢他。&nbsp;</P>
<P style="TEXT-INDENT: 2em">接下去的半年时间里，便是妻与女儿精心布置好的局，每一个细节，每一个碰撞，包括每一个交流，事情的每一步。&nbsp;</P>
<P style="TEXT-INDENT: 2em">只有我被蒙在鼓里。&nbsp;</P>
<P style="TEXT-INDENT: 2em">这其实原本是个对任何人都好，都没有任何坏处的局。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻离开我，我与女儿（我一直真爱着的人）从此在一起，妻会陪伴那个男人直到他死。&nbsp;</P>
<P style="TEXT-INDENT: 2em">事情也的确按照她们的预计在进行着，偶尔我有犹豫，她们中间就会有一个人促动一下。&nbsp;</P>
<P style="TEXT-INDENT: 2em">那个男人的病情越来越差，只好在那一天，妻开始发难。&nbsp;</P>
<P style="TEXT-INDENT: 2em">妻隐瞒在人群中，送我们上船，直到我发现她后，朝我挥手告别，那一刻，她的眼神中的确是刻骨的不舍。&nbsp;</P>
<P style="TEXT-INDENT: 2em">她送我们去的地方，正是女儿失踪后所去的城市。&nbsp;</P>
<P style="TEXT-INDENT: 2em">从头到尾，她没有怀过孕。&nbsp;</P>
<P style="TEXT-INDENT: 2em">我没有告诉妻女儿的死，我离开那个房间的时候，妻的眼中是抱歉与祝福并存的眼神。&nbsp;<BR>回到家，我翻开女儿的行李箱，找出那本日记。&nbsp;<BR><BR>10月6日&nbsp;<BR>今天我又看到了他，我已经有整整一年多没有见过他了，他瘦了，更成熟了，他认出了我，只是他装得好象啊。&nbsp;<BR><BR>11月2日&nbsp;<BR>一切都按照计划进行着，只是我越来越不愿意这样，我不想骗他，可是我骗了他，我按照我们一起编的话，一次次骗着他，包括我的小孩，包括我去做鸡，他全相信了，他给我买了屋子，他以为这一切都做得很好，我是多么想告诉他，一切都和他以为的截然不同啊。&nbsp;<BR><BR>11月9日&nbsp;<BR>他一直在我的房间里呆着，我是多么享受和他这样呆在一起的时光啊，我们一起听solverg&nbsp;Slettahjeii的歌，他老是笑我很幼稚，他送过我一盘solverg&nbsp;Slettahjeii的cd，可能他自己都忘了吧，那是好几年前了，我们一起去唱片店，他送给我这张cd，我估计他自己都没有听过，只是他很讨厌我听she。&nbsp;<BR><BR>12月1日&nbsp;<BR>姐姐终于离开了，这半年来，我们计划的整件事情终于达到了效果。&nbsp;<BR>我看着老爸迅速老下去的样子，怎么能告诉他，从头到尾我都是骗他的啊！&nbsp;<BR>我怎么能告诉他，我还爱他，我根本从来没有爱过任何其他的人啊。&nbsp;<BR><BR>明天我们就要上船了，我想带他去看那一年多来我呆的这个城市，我在那个城市里疗伤，在那个城市里长大，我多想带他去看，告诉他每一寸土地都是我熟悉的，这是姐姐给我们的船票，她希望我们幸福，希望我带他去那里忘掉一切，与我重新开始。可是我心里明白，他再不可能爱我了，我们以为这个阴谋可以成全任何人，可是我们都没有想到给他带来的伤害。&nbsp;<BR><BR>我们怎么可能再回到从前呢。&nbsp;<BR>这怎么可能呢。&nbsp;<BR><BR>12月2日&nbsp;<BR>我在黑暗里一直看着你的脸，老爸，你知道吗，我一直盯着你看，想把你全部记在脑子里，带着满脑子的你离开。&nbsp;<BR>昨天晚上我们再一次**了，你知道吗，这是我们最后一次**，我多么想告诉你这是我们最后一次**啊。&nbsp;<BR>你睡着的样子，我怎么都看不厌，可是我知道我不能再看了，再看下去，你会越来越讨厌我，直到一切你都知道后，你会恨我，那个时候，我该怎么来面对你啊。&nbsp;<BR>老爸，我要走了，姐姐已经离开你了，她寻找属于他自己的幸福去了，我也要走了，我知道这次航行，是我爱你的尽头。&nbsp;<BR>可是你好可怜啊，老爸，以后没有人再来照顾你了，没有人再来关心你了，你会懂得好好照顾自己吗？&nbsp;<BR>你会懂得，我从来没有爱过别人，从头到尾，我只是爱着你一个人，希望你幸福吗？&nbsp;<BR>老爸，我真的不想离开你，可是我知道，你会一个人勇敢地活下去，你一定要勇敢地生活下去，只有胆小的我，才会选择逃，老爸，你是最勇敢的，对吗？&nbsp;<BR>老爸，我真的很想为你生个孩子，可我没有怀上，我哭了很久，我想我没有机会了，昨天ZA的时候，我想，如果这次我怀了你的孩子，那么我和他都会在天上一直祝福你的。&nbsp;<BR><BR>老爸，我真的不想放开，我手里的笔不断地在写，我知道，我一放下笔，就意味着终于就要离开了，你能再抱我一次吗？象爸爸抱女儿一样？&nbsp;<BR>从开始到结束，老爸，你从来没有对我说过，我爱你。&nbsp;<BR>我爱你，老爸。&nbsp;<BR>再见&nbsp;<BR><BR><BR>看完整本日记，已经是凌晨5点了，我呆呆坐了一会，回忆了这半年来与她相处的每一个细节，给自己冲了一杯咖啡，我镇定地乘着咖啡匙，终于手剧烈地抖动，撒满了一地棕色的粉末，我再也无法抑制，跪在地上。&nbsp;<BR>看着眼泪将满地的粉末渐渐稀释……&nbsp;<BR><BR>几天后，我将这个屋子卖掉，卖掉的钱全部给了妻，我对那个男人始终不存恶感，他也待我象朋友一般亲切与自然。&nbsp;<BR>我把女儿埋在了一个非常漂亮的地方，去了另外一个城市，留下了她一些骨灰，放在一个手指粗细的小瓶里，挂在我的胸前，这一生我都不能再把她摘除，她已长在我的心里，我的骨髓中，无法割离。&nbsp;<BR><BR>有的时候半夜无法睡着，我都会想。&nbsp;<BR>如果有一个你爱的女孩子叫你老爸时，你要记得堵住她的嘴，告诉她，她不是你的女儿，是你的爱人，而你，将用整个生命来珍惜她，爱她，不让她受到伤害，你一定要说出来。&nbsp;<BR>因为有的话，不说，不说，就再也没有机会说了&nbsp;<BR>&nbsp; 
</P><P>&nbsp;</P>
<P style="TEXT-INDENT: 2em"><A href="http://img.blog.163.com/photo/FUaMWRCO0t1kPmL5eE-uEQ==/1699827384355968192.jpg" target=_blank></A><A href="http://img.blog.163.com/photo/-HdyDf99uZLjPloa-RSovA==/3388677244619933709.jpg" target=_blank></A><A href="http://img.blog.163.com/photo/XL1RQo9inzryt-WHnJy_vA==/1699827384355968194.jpg" target=_blank></A><A href="http://img.blog.163.com/photo/2qTFa6-W547DFSTAYRTp3Q==/2036471456501902314.jpg" target=_blank></A>&nbsp;</P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320071119112930259</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320071119112930259</guid>
    <pubDate>Wed, 19 Dec 2007 11:29:30 +0800</pubDate>
    <dcterms:modified>2007-12-19T11:29:30+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[值得记念的日子]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/55508453200710295924550</link>
    <description><![CDATA[<div><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 昨天是一个值得我记念的日子呀，为什么呢，因为这是我从零二年以来第一次知道了你的一点情况。我平静的心从看到校内网上你的照片那一刻起就没有平静过。那种滋味我想我是无法用言语表达的。就像是冬眠的小溪在春天的阳光下缓缓的解冻了一样，清脆的溪流声缓缓的向四周流淌开来。看到了你注册时的小图片，真的好开心呀，这种开心可以说是这些年来从来没有过的。因为它是从心底里发出的。从你少许的资料上看，我知道了你也上了大学，而且也是在本市。心里多年来的积郁一下子少了好多。我在想这也许是上天在我人生最茫然的时候，让你再一次从我沉睡的心里苏醒。我以前总在想我们俩能怎么样走下去呢？想得最多的就是能知道你的情况就行了，知道你跟我在同一片城市的天空下生活，就够了。当然希望你能幸福。我想你应该能的，从小你就很漂亮。从你那张小图片上可以看出，你依旧是那样的美丽。所以我不是很担心会没有人去爱护你。不过我有点担心，没有人能一直陪在你身边。现在的我比起孩童时候的我略有一些不同了，没变的还是有点害羞。其它的我想可能说是变得成熟了一些，知道有些事为父母还有自己打算了。不过我还是老样子，还是丢不掉小学那几年美好的时光。仔细想想值得我怀念的事还真不少呀。在我的印象中你是扎一个马尾的，而且那个马尾辫还很粗，因为你的头发油亮油亮的。其它的印象就只能放在脑海里了。来说说值得怀念的事吧。仔细想想我是从二年级开始注意你的，我也不知道那时对你的感觉是不是爱(今天080324我知道那不是爱了），但我可以肯定的是当时的我是喜欢你的。还记得吗？那时年少的我还不懂事，做了很多好笑的事。记得有一次我跟A一起跑到一年级教室去耍威风，从小孩子课桌的这边跳到那边，由于那时的我比较瘦小，没有跟得上他的步伐，一不小心从课桌上摔了下来。正好当时天气不太好，小孩子都带了雨伞，当时的雨伞是那种很长的，一头是弯的一头是尖的，一般是尖的那一头向上放的。我从课桌上掉下来的时候刚好耳朵被雨伞尖的那一头扎到了。我只记得当时非常痛，飞奔回了教室。可是血还是不住的往下流。因为当时我们当地的条件不像现在，我们都不用手纸的，所以没有什么来擦血的，还是你聪明呀，知道把我们用的抄稿纸，其实当时用的也就是用过了的日历纸也是号码纸。而且还用你那双可爱的小手将它搓软了再给我擦血，当时还有翠平在帮你的忙。我想这是我第一次觉得你跟别人不一样的地方。后来学校要盖新楼了，我们搬到了一间很小的教室去了。记得我当时很开心，因为我们是同一排，你跟B坐一起，我不记得我是跟谁坐一起了，我们之间隔了一个小走道。我记得我是坐在靠走道的那一边。记不请你和B是谁坐的离我近了。那时的我真的是个懵懂的孩子，不知道上课是为了什么。只知道每天叠那些小动物亦或是一些小船之类的东西给你。那时的你上课比较认真。不过有的时候我给你叠的东西的时候，你会朝我笑笑。哦，当时好像是B坐的离我近一些，所以很多次我都是在麻烦她。不知道当时的她是不是以为我喜欢的是她呢。呵呵，这个问题我想可能是没有办法再去求证了吧。不过还是要感谢她呀。这两件事是我记得最清楚的了。其它的都是一些算乱的记忆。像我们上四年级的时候男女在一起跳步子，哦对了还有一次你跟你婆婆去看戏去了，他们都说这不公平都想去。其实我不知道他们是因为心里不平衡才去的还是因为别的，而我当时却时想看你才去的。结果我跟他们跑去了，还在那看到了。当时我真的好开心呀。呵呵，可是第二天就被老师罚了，呵呵。虽然是被罚，但我还是开心。哦对了，还有一件事，我也是记得比较清楚的。那就是四年级时，好像是第二学期开学吧。我第一个到学校去的，我却选了你的位置。当你们都来了的时候，都来劝我坐回上学期的位置，说实话，其实上学期那样坐我真的很开心。但我现在也不明白为什么我会选那个位置。而我记得我并不是一开始就去选那个位置。好像是看到在你坐的那个位置的，抽屉里面有我跟你给自己取的名子。我不知道别人知道不知道你出生时的真名。但是我很开心你告诉了我，无论你是当它是小孩子间的秘密告诉我的还是别的，到现在我都很高兴。因为我不敢肯定那一定是你也的，所以我也不太肯定我为什么要坐你的位置。不过不管怎么样，我就当是你写上去的吧。有一点可惜的时，我们的小学被拆了，我想那张刻了你我名字的课桌只怕是早就不知去向了。从这以后你就坐到前排去了，再后我只记得我们慢慢疏远了。但唯一不变的是，我还是一样在关注你，说真的，我很恨上天为什么不把我们分到同一个班，五六年级整整两年，让你慢慢的从我的视线中消失了。上初中了，我很少向别人提起你，那时只知道你去了城关二中上学。其它的就什么也不知道了。也从那时起我开始混日子了。因为已经不小了，家里希望我能读书读出去。可我还是一样，直到初三，可以说是不小心分到快班去吧，这样才让我有可以上高要的机会。可你并没有从我的生活中消失。我还是一样会长长想起你。就这样初中毕业了，可惜我却连二中也没有考上，离二中差7分。回家后我一直都不是很开心，父母以为我是因为没有上二中而难过，却不知道我是因为想到不能跟你去一所高中上学而难过的。那两个月在难熬中渡过了。我怀着一份内疚的心进入了二中学习。高一我还是一样，记得一开学就在一个女孩子的身上发现了你的影子。当我想起你的时候就看看她。后来从我下铺的同学那里知道你上了一中在八班。我的心再一次得到了安慰。于是生活有了方向。但现实还是现实，我的成绩跟你相比差太多了。就这样我的心情反反复复，可成绩还是没有什么进展。同时我也感受到影子毕竟只是影子呀，在我自己给自己丢掉了影子后就已经是高二了，高二一样我的成绩还是平平没有什么特别的起色，高二下学期了，因为一些原因有几个班给分了，来了我们班一些人，同时也走了一些，老夏来了我们班，跟我坐一起了，我觉得老夏算是一个给我影响比较大的人。后来我慢慢变了，成绩也开始好转了。转眼到高三了，我没有分到重点班，因为他们是按高一高二四次总成绩排的。我没有觉得有什么。我分到了十二班。高三是我觉得最充实也是最没有记忆的一年。还有就是我写过一封信给你，我记得好像是高二的时候给你写的。应该是在下学期之前吧。那时我想给你写封信，然后把你放下。现在想想我并没有把你放下。呵呵，想来可笑呀，我给你写信，还不敢告诉你我是谁，直到后来你给C写信问有哪些同学在二中上学。他猜到是我，我到现在也不知道他为什么一猜就是我。我跟他谈了一下，害差的我还是不敢让你知道我是谁。我也没有让他告诉你我是谁，我记得他当时是答应我了的。呵呵，有的时候我就幻想，要是我没有要求他告诉你，你回给我回一封信吗。呵呵，我想这也可能是我这一生的一个不确定吧。再后来就是我高考考了575分，报了武汉理工大，结果差几分，后来来上江大了。再后来就是大一的时候想办法找你的消息。可是没有，再就是一直到现在偶尔打听你的消息。可是一无所获。到现在找到工作了，在昨天晚上无聊，去了一下校内网。才发现可以找人。一找就看到你的照片了。呵呵，也许是老天可怜我，也许是上天在跟我说你看看你自己其实是可以很早就找到她的。呵呵，不管是怎么样，我都很满足了。因为只是想知道你的消息。希望你平安快乐就好。</P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/55508453200710295924550</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/55508453200710295924550</guid>
    <pubDate>Thu, 29 Nov 2007 17:09:24 +0800</pubDate>
    <dcterms:modified>2008-05-07T10:34:05+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[eclipse快捷键大全]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320071029113338179</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em"><A></A><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>eclipse快捷键大全</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>1. 常用快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(1)Ctrl+Space</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:内容助理。提供对方法,变量,参数,javadoc等得提示,应运在多种场合,总之需要提示的时候可先按此快捷键。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>注:避免输入法的切换设置与此设置冲突</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(2)Ctrl+Shift+Space</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:变量提示</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(3)Ctrl+/</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:添加/消除//注释,在eclipse2.0中,消除注释为Ctrl+\</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(4)Ctrl+Shift+/</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:添加/* */注释</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(5)Ctrl+Shift+\</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:消除/* */注释</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(6)Ctrl+Shift+F</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:自动格式化代码</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(7)Ctrl+1</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:批量修改源代码中的变量名,此外还可用在catch块上.</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(8)Ctril+F6</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:界面切换</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(9)Ctril+Shift+M</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:查找所需要得包</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(10)Ctril+Shift+O</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:自动引入所需要得包</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>(11)Ctrl+Alt+S</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>说明:源代码得快捷菜单。其中的Generate getters and setters 和 Surround with try/catch</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>block比较常用.建议把它们添加为快捷键.快捷键设置在windows-&gt;preferences-&gt;Workbench-&gt;Keys</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>2. 快捷键列表</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>编辑</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 查找并替换 Ctrl+F</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 查找上一个 Ctrl+Shift+K</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 查找下一个 Ctrl+K</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 撤销 Ctrl+Z</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 复制 Ctrl+C</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 恢复上一个选择 Alt+Shift+↓</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 剪切 Ctrl+X</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 快速修正 Ctrl1+1</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 内容辅助 Alt+/</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 全部选中 Ctrl+A</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 删除 Delete</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 上下文信息 Alt+？Alt+Shift+?Ctrl+Shift+Space</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 显示工具提示描述 F2</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 选择封装元素 Alt+Shift+↑</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 选择上一个元素 Alt+Shift+←</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 选择下一个元素 Alt+Shift+→</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 增量查找 Ctrl+J</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 增量逆向查找 Ctrl+Shift+J</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 粘贴 Ctrl+V</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 重做 Ctrl+Y</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>查看</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 放大 Ctrl+=</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 缩小 Ctrl+-</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>窗口</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 激活编辑器 F12</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 切换编辑器 Ctrl+Shift+W</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 上一个编辑器 Ctrl+Shift+F6</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 上一个视图 Ctrl+Shift+F7</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 上一个透视图 Ctrl+Shift+F8</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 下一个编辑器 Ctrl+F6</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 下一个视图 Ctrl+F7</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 下一个透视图 Ctrl+F8</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 显示标尺上下文菜单 Ctrl+W</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 显示视图菜单 Ctrl+F10</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 显示系统菜单 Alt+-</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>导航</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 打开结构 Ctrl+F3</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打开类型 Ctrl+Shift+T</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打开类型层次结构 F4</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打开声明 F3</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打开外部javadoc Shift+F2</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打开资源 Ctrl+Shift+R</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 后退历史记录 Alt+←</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 前进历史记录 Alt+→</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 上一个 Ctrl+,</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 下一个 Ctrl+.</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 显示大纲 Ctrl+O</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 在层次结构中打开类型 Ctrl+Shift+H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 转至匹配的括号 Ctrl+Shift+P</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 转至上一个编辑位置 Ctrl+Q</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 转至上一个成员 Ctrl+Shift+↑</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 转至下一个成员 Ctrl+Shift+↓</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 转至行 Ctrl+L</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>搜索</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 出现在文件中 Ctrl+Shift+U</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打开搜索对话框 Ctrl+H</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 工作区中的声明 Ctrl+G</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 工作区中的引用 Ctrl+Shift+G</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 改写切换 Insert</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 上滚行 Ctrl+↑</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文本编辑器 下滚行 Ctrl+↓</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>文件</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 保存 Ctrl+X Ctrl+S</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 打印 Ctrl+P</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 关闭 Ctrl+F4</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 全部保存 Ctrl+Shift+S</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 全部关闭 Ctrl+Shift+F4</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 属性 Alt+Enter</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 新建 Ctrl+N</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>项目</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 全部构建 Ctrl+B</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>源代码</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 格式化 Ctrl+Shift+F</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 取消注释 Ctrl+\</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 注释 Ctrl+/</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 添加导入 Ctrl+Shift+M</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 组织导入 Ctrl+Shift+O</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>Java编辑器 使用try/catch块来包围 未设置，太常用了，所以在这里列出,建议自己设置。也可以使用Ctrl+1自动修正。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>运行</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 单步返回 F7</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 单步跳过 F6</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 单步跳入 F5</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 单步跳入选择 Ctrl+F5</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 调试上次启动 F11</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 继续 F8</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 使用过滤器单步执行 Shift+F5</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 添加/去除断点 Ctrl+Shift+B</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 显示 Ctrl+D</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 运行上次启动 Ctrl+F11</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 运行至行 Ctrl+R</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 执行 Ctrl+U</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>重构</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>作用域 功能 快捷键</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 撤销重构 Alt+Shift+Z</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 抽取方法 Alt+Shift+M</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 抽取局部变量 Alt+Shift+L</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 内联 Alt+Shift+I</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 移动 Alt+Shift+V</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 重命名 Alt+Shift+R</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff>全局 重做 Alt+Shift+Y</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT style="BACKGROUND-COLOR: #ffffff" color=#3366ff></FONT></P></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320071029113338179</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320071029113338179</guid>
    <pubDate>Thu, 29 Nov 2007 11:33:38 +0800</pubDate>
    <dcterms:modified>2007-11-29T11:35:46+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[复选框全选js]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/555084532007101110153167</link>
    <description><![CDATA[<div><DIV >
<DIV><FONT style="BACKGROUND-COLOR: #ffffff">&nbsp;</FONT><FONT style="BACKGROUND-COLOR: #ffffff" face=宋体>&lt;scripttype="text/javascript"&gt;<BR>function&nbsp;add(o)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp; a&nbsp; =&nbsp;document.getElementsByName("<FONT color=#ff0000>addIds</FONT>");&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp; (var&nbsp; i=0;&nbsp;i&lt;a.length;&nbsp;i++){&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i].checked&nbsp; =&nbsp;o.checked;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>}</FONT></DIV>
<DIV><FONT face=宋体><FONT style="BACKGROUND-COLOR: #ffffff">&lt;/script&gt;</FONT></FONT></DIV>
<DIV>调用：<FONT face=宋体>&lt;input&nbsp;type="checkbox"&nbsp; value="del&nbsp;All"&nbsp; onclick="add(this)"&gt;全选</FONT></DIV>
<DIV><FONT face=宋体>&lt;input id="ids" type="checkbox"name="<FONT color=#ff0000>addIds</FONT>"/&gt;</FONT></DIV></DIV></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/555084532007101110153167</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/555084532007101110153167</guid>
    <pubDate>Sun, 11 Nov 2007 10:15:31 +0800</pubDate>
    <dcterms:modified>2007-11-29T14:55:42+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[刷新前一页、本页面js]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320071011109667</link>
    <description><![CDATA[<div><div id="articleContent" ><div><p STYLE="BORDER-RIGHT: #cccccc 1px dotted; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" ALIGN="left"><font FACE="宋体">&nbsp;window.opener.location.reload();是对父窗口进行刷新，比如你在a.jsp打开b.jsp，如果是在新窗口打开，那么在b.jsp中对a.jsp刷新，就用<br/>response.Write "&lt;scriptlanguage=javascript&gt;history.go(-1);window.opener.location.reload();&lt;/script&gt;"<br/>如果是在本窗口打开的，那么就用以下为代码部分:response.Write"&lt;scriptlanguage=javascript&gt;history.go(-1);location.reload();&lt;/script&gt;"<br/></FONT></P><br/></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320071011109667</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320071011109667</guid>
    <pubDate>Sun, 11 Nov 2007 10:09:06 +0800</pubDate>
    <dcterms:modified>2007-11-11T10:09:06+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[意外的体验----大合唱]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320079230504867</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV><EMBED ID="articlevblog" NAME="articlevblog" SRC="http://you.video.sina.com.cn/b/vblog_player.swf?vid=7708155&uid=1260848724" WIDTH="474" HEIGHT="461" TYPE="application/x-shockwave-flash" FLASHVARS="url=http://you.video.sina.com.cn/b/vblog_player.swf?vid=7708155&uid=1260848724" WMODE="transparent" ALLOWSCRIPTACCESS="always" QUALITY="high"></EMBED>&nbsp;我第一次参加的合唱。</DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320079230504867</comments>
    <slash:comments>1</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320079230504867</guid>
    <pubDate>Tue, 23 Oct 2007 12:50:48 +0800</pubDate>
    <dcterms:modified>2007-10-23T12:50:48+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[JXL操作excel测试实例]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320079230415167</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV><FONT STYLE="BACKGROUND-COLOR: #ffffff" COLOR="#0000FF">jxl下载地址：<A HREF="http://www.andykhan.com/jexcelapi/download.html" TARGET="_blank">http://www.andykhan.com/jexcelapi/download.html</A>&nbsp;有所有版本</FONT></DIV><DIV><FONT STYLE="BACKGROUND-COLOR: #ffffff" COLOR="#0000FF">测试程序：</FONT></DIV><DIV><TABLE STYLE="BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #999 1px solid; WIDTH: 80%; BORDER-BOTTOM: #999 1px solid" ALIGN="center"><TBODY><TR><TD><DIV><TABLE STYLE="BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #999 1px solid; WIDTH: 80%; BORDER-BOTTOM: #999 1px solid" ALIGN="center"><TBODY><TR><TD><FONT STYLE="BACKGROUND-COLOR: #66cccc" FACE="宋体" COLOR="#0000FF">import jxl.*;<br/>import java.io.*;<br/>import jxl.write.*;<br/>/**<br/>* &lt;p&gt;java读取Excel表格，拷贴心、更新Excel工作薄&lt;/p&gt;<br/>*/<br/>public class jxltext {<br/>public static void main(String[] args) {<br/>jxl.Workbook rwb = null;<br/>try{<br/>//构建Workbook对象 只读Workbook对象<br/>//直接从本地文件创建Workbook<br/>//从输入流创建Workbook<br/>InputStream is = new FileInputStream("D://Book1.xls");<br/>rwb = Workbook.getWorkbook(is);<br/>//Sheet(术语：工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中<br/>//Sheet的下标是从0开始的<br/>//获取第一张Sheet表<br/>Sheet rs = rwb.getSheet(0);<br/>//获取Sheet表中所包含的总列数<br/>int rsColumns = rs.getColumns();<br/>//获取Sheet表中所包含的总行数<br/>int rsRows = rs.getRows();<br/>//获取指这下单元格的对象引用<br/>for(int i=0;i&lt;rsRows;i++){<br/>for(int j=0;j&lt;rsColumns;j++){<br/>Cell cell = rs.getCell(j,i);<br/>System.out.print(cell.getContents()+" ");<br/>}<br/>System.out.println();<br/>}<br/>//利用已经创建的Excel工作薄创建新的可写入的Excel工作薄<br/>jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(newFile("D://Book2.xls"),rwb);<br/>//读取第一张工作表<br/>jxl.write.WritableSheet ws = wwb.getSheet(0);<br/>//获取第一个单元格对象<br/>jxl.write.WritableCell wc = ws.getWritableCell(0, 0);<br/>//决断单元格的类型，做出相应的转化<br/>if (wc.getType() == CellType.LABEL) {<br/>Label l = (Label) wc;<br/>l.setString("The value has been modified.");<br/>}<br/>//写入Excel对象<br/>wwb.write();<br/>wwb.close();<br/>}catch(Exception e){<br/>e.printStackTrace();<br/>}<br/>finally{<br/>//操作完成时，关闭对象，翻译占用的内存空间<br/>rwb.close();<br/>}<br/>}<br/>}</FONT></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320079230415167</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320079230415167</guid>
    <pubDate>Tue, 23 Oct 2007 12:41:51 +0800</pubDate>
    <dcterms:modified>2007-10-23T12:41:51+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[failed to lazily initialize a collection of role:]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320076261143867</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV>&nbsp;<DIV ><P>环境 spring＋hibernate3＋struts</P><P>今天又碰到错误</P><P><FONT FACE="宋体">failed to lazily initialize a collection ofrole: no session or session was closed</FONT></P><P>试验了一下发现了几个解决方法：</P><P>1、是把对应一对多的那两个列lazy=true改为lazy＝false即可</P><P>2、对于查询中如果用的是xxx.load（class，id）则改为xxx,get(class，id)<br/>3在web.xml文件中加入&nbsp;</P><P>&lt;filter&gt;<br/>&nbsp;&nbsp;&lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br/>&nbsp;&nbsp;&lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter-class&gt;</P><P>&nbsp;&nbsp;&lt;init-param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;singleSession&lt;/param-name&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;false&lt;/param-value&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;</P><P>&lt;!--这个--&nbsp;&nbsp;&lt;init-param&gt;一定要加不然很可能会报错：org.springframework.dao.InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode(FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove'readOnly' marker from transaction definition<br/>&gt;<br/>&nbsp;&lt;/filter&gt;</P><P>&nbsp;&lt;filter-mapping&gt;<br/>&nbsp;&nbsp;&lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br/>&nbsp;&nbsp;&lt;url-pattern&gt;*.mmg&lt;/url-pattern&gt;<br/>&nbsp;&lt;/filter-mapping&gt;</P></DIV></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320076261143867</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320076261143867</guid>
    <pubDate>Thu, 26 Jul 2007 11:04:38 +0800</pubDate>
    <dcterms:modified>2007-07-26T11:04:38+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[Hibernate查询语言：HQL]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320076234221567</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV>&nbsp;HQL：Hibernate QuseryLanguage，如果你已经熟悉它，就会发现它跟SQL非常相像。不过你不要被表面的假象迷惑，HQL是面向对象的（OO，用生命的眼光看待每一个对象，他们是如此鲜活）。如果你对JAVA和SQL语句有一定了解的话，那么HQL对你简直易如反掌，你完全可以利用在公车上的时间掌握它。<br/><br/>以下从几个方面进行慢慢深入：<br/><br/>1。大小些敏感<br/>大家知道Query是对大小写不敏感的，但是在HQL（前面提到它是OO的）中那么对象类的名称和属性确实大小写敏感的（符合<A HREF="http://www.myfaq.com.cn/Dev/Programme/Java/index.html" TARGET="_blank">java</A>编程语法）。<br/>如：sElect cat.name from Cat as cat和select cat.name from Cat ascat是一样的<br/>但是：<br/>sElect cat.name from CAT as cat和select cat.name from Cat ascat确实不一样的。<br/><br/>2。from语句<br/>最简单的：<br/>from eg.Cat<br/>它只是简单的返回所有eg.Cat的实例<br/>通常我们此时会为eg.Cat其个别名，因为在query的其余部分可能会用到(参看上边关于大小写<br/>敏感时的例子情形)，如：<br/>from eg.Cat as cat 这里as可以省略。<br/>上边只是单表查询，多表的情况如下写法：<br/>from eg.Cat,eg.Dog<br/>from eg.Cat as cat,eg.Dog as dog<br/><br/>3。join相关<br/>(inner) join<br/>left (outer) join<br/>right (outer) join<br/>full join<br/>HQL同样对SQL中的这些特性支持<br/>下面插播一个小话题，关于上边的那些特性，我一直都没怎么用，今天既然说到这里，就想<br/>把上边的几个特性的用法说一下，也算对自己的一个补充：<br/>假设有两个表：部门、员工，下面列举一些数据：<br/>员工(Employee)：<br/>ID Name DepNo<br/>001 Jplateau 01<br/>002 Jony 01<br/>003 Camel 02<br/>部门(Department)：<br/>ID Name<br/>01 研发部<br/>02 营销部<br/><br/>在Hibernate中我们操纵的都是对象，所以我们操纵的是部门类和员工类<br/>1).(inner) join<br/>select employee.ID as id1,employee.Name as name1,department.ID asid2,department.Name<br/>as name2 from Employee as employee join Department as department onemployee.DepNo=<br/>department.ID (注意到条件语句我用on 没有用where)<br/>那么执行结果是什么呢？<br/>id1 name1 id2 name2<br/>++++++++++++++++++++++++++++++++++++++<br/>001 Jplateau 01 研发部<br/>002 Jony 01 研发部<br/><br/>2).left (outer) join<br/>select employee.ID as id1,employee.Name as name1,department.ID asid2,department.Name<br/>as name2 from Employee as employee left join Department asdepartment on employee.DepNo=<br/>department.ID<br/>那么执行结果又该是什么呢？<br/>id1 name1 id2 name2<br/>++++++++++++++++++++++++++++++++++++++<br/>001 Jplateau 01 研发部<br/>002 Jony 01 研发部<br/>003 Camel null null<br/>{就是说此时我要已第一个表的记录多少为准，第二个表中没有相应纪录的时候填充null}<br/>3). right (outer) join<br/>select employee.ID as id1,employee.Name as name1,department.ID asid2,department.Name<br/>as name2 from Employee as employee right join Department asdepartment on employee.DepNo=<br/>department.ID<br/>那么执行结果又该是什么呢？<br/>id1 name1 id2 name2<br/>++++++++++++++++++++++++++++++++++++++<br/>001 Jplateau 01 研发部<br/>002 Jony 01 研发部<br/>null null 02 营销部<br/>{就是说此时我要已第二个表的记录多少为准，第一个表中没有相应纪录的时候填充null}<br/><br/>4。select语句<br/>就是要确定你要从查询中返回哪些对象或者哪些对象的属性。写几个例子吧：<br/>select employee form Employee as employee<br/>select employee form Employee as employee where employee.Name like'J%'<br/>select employee.Name form Employee as employee where employee.Namelike 'J%'<br/>select employee.ID as id1,employee.Name as name1,department.ID asid2,department.Name<br/>as name2 from Employee as employee right join Department asdepartment on employee.DepNo=<br/>department.ID<br/><br/>select elements(employee.Name) from Employee as employee<br/>（不明白elements到底是做什么用的？望给于说明）<br/>等等<br/>5。数学函数<br/>JDO目前好像还不支持此类特性。<br/>avg(...), sum(...), min(...), max(...)<br/><br/>count(*)<br/><br/>count(...), count(distinct ...), count(all...)<br/><br/>其用法和SQL基本相同<br/><br/>select distinct employee.name from Employee as employee<br/>select count(distinct employee.name),count(employee) from Employeeas employee<br/><br/>6。polymorphism (暂时不知道如何解释？)<br/>from com.test.Animal as animal<br/>不光得到所有Animal得实例，而且可以得到所有Animal的子类（如果我们定义了一个子类Cat）<br/>一个比较极端的例子<br/>from <A HREF="http://www.myfaq.com.cn/Dev/Programme/Java/index.html" TARGET="_blank">java</A>.lang.Object as o<br/>可以得到所有持久类的实例<br/><br/>7。where语句<br/>定义查询语句的条件，举几个例子吧：<br/>from Employee as employee where employee.Name='Jplateau'<br/>from Employee as employee where employee.Name like 'J%'<br/>from Employee as employee where employee.Name like '%u'<br/>在where语句中“=”不光可以比较对象的属性，也可以比较对象，如：<br/>select animal from com.test.Animal as animal whereanimal.name=dog<br/><br/>8。表达式<br/><br/>在SQL语句中大部分的表达式在HQL中都可以使用：<br/>mathematical operators +, -, *, /<br/><br/>binary comparison operators =, &gt;=, &lt;=, &lt;&gt;, !=,like<br/><br/>logical operations and, or, not<br/><br/>string concatenation ||<br/><br/>SQL scalar functions like upper() and lower()<br/><br/>Parentheses ( ) indicate grouping<br/><br/>in, between, is null<br/><br/>JDBC IN parameters ?<br/><br/>named parameters :name, :start_date, :x1（这种应该是另一种"?"的变通解决方法）<br/><br/>SQL literals 'foo', 69, '1970-01-01 10:00:01.0'<br/><br/>Java public static final constants eg.Color.TABBY<br/><br/>其他不必解释了，在这里我只想对查询中的参数问题说明一下：<br/>大家知道在SQL中进行传递参数进行查询的时候，我们通常用PreparedStatement，在语句中写一大堆的“？”，<br/>在hql中也可以用这种方法，如：<br/>List mates = sess.find(<br/>"select employee.name from Employee as employee " +<br/>"where employee.Name=? ",<br/>name,<br/>Hibernate.STRING<br/>);<br/>(说明：上面利用Session里的find方法，在hibernate的apiSession中重载了很多find方法，它可以满足你多种形式的查询)<br/>上边是一个参数的情形，这种情况下紧接着引入参数和定义参数的类型，当为多个参数，调用另一个find方法，它的后两个<br/>参数都是数组的形式。<br/><br/>还有另外一种方法来解决上边的问题，JDO也有这样的方法，不过和hibernate的表现形式上有差别，但他们两个骨子里却是<br/>一样的，如：<br/>Query q = sess.createQuery("select employee.name from Employee asemployee where employee.Name=:name");<br/>q.setString("name", "Jplateau");<br/>//当有多个参数的时候在此逐一定义<br/>Iterator employees = q.iterate();<br/><br/>9。order 语句<br/>和sql语句没什么差别，如：<br/>select employee.name from Employee as employee where employee.Namelike 'J%' order by employee.ID desc (或者asc)<br/><br/>10。group by 语句<br/>同样和sql语句没什么差别，如：<br/><br/>select employee.name,employee.DepNo from Employee as employee groupby employee.DepNo<br/><br/>select foo.id, avg( elements(foo.names) ), max( indices(foo.names)) from eg.Foo foo group by foo.id<br/>{Note: You may use the elements and indices constructs inside aselect clause, even on databases with no subselects.}<br/>谁帮我解释一下上边两句，谢过！<br/><br/>11。子查询<br/>hibernate同样支持子查询，写几个例子：<br/><br/>from eg.Cat as fatcat where fatcat.weight &gt; ( selectavg(cat.weight) from eg.DomesticCat cat )<br/></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320076234221567</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320076234221567</guid>
    <pubDate>Mon, 23 Jul 2007 16:22:15 +0800</pubDate>
    <dcterms:modified>2007-07-23T16:22:15+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[Struts标签库2]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320076234211367</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV>&nbsp;<P><FONT FACE="宋体">2．字符串匹配：变量中是否包含指定的字符串</FONT></P><P><FONT FACE="宋体">&lt;% request.setAttribute("authorName","LindaSun");%&gt;</FONT></P><P><FONT FACE="宋体">a.&lt;logic:match name="authorName"scope="request" value="Linda"&gt;</FONT></P><P><FONT FACE="宋体">&nbsp;&nbsp;&lt;bean:write name="authorName"/&gt; has the string 'Sun' init.&lt;/logic:match&gt;</FONT></P><P><FONT FACE="宋体">&nbsp; &lt;logic:notMatchname="authorName" scope="request" value="Linda" /&gt;//还有end属性</FONT></P><P><FONT FACE="宋体">&lt;logic:match name="authorName"scope="request" value="Linda" location="start"&gt;</FONT></P><P><FONT FACE="宋体">&lt;bean:write name="authorName"/&gt; startswith the string 'Linda'.&lt;/logic:match&gt;</FONT></P><P>&nbsp;</P><P><FONT FACE="宋体">3．判断指定内容是否存在</FONT></P><P><FONT FACE="宋体">&lt;% ActionErrors errors = newActionErrors();</FONT></P><P><FONT FACE="宋体">errors.add("totallylost", newActionMessage("application.totally.lost"));</FONT></P><P><FONT FACE="宋体">request.setAttribute(Globals.ERROR_KEY,errors);</FONT></P><P><FONT FACE="宋体">request.setAttribute("myerrors",errors);request.setAttribute("emptyString","");%&gt;</FONT></P><P><FONT FACE="宋体">a.&lt;logic:empty name="emptyString"&gt;emptyString is empty! &lt;/logic:empty&gt;</FONT></P><P><FONT FACE="宋体">b.&lt;logic:notPresent name="noSuchBean"property="noSuchProperty"&gt;</FONT></P><P><FONT FACE="宋体">&nbsp;判断指定的安全角色，用户,cookie,header或javaBean是否存在&lt;/logic:notPresent&gt;</FONT></P><P><FONT FACE="宋体">c. &lt;logic:messagesPresent name="myerrors"&gt;在范围内检索key&lt;/logic:messagesPresent&gt;</FONT></P><P><FONT FACE="宋体">&lt;logic:messagesNotPresentmessage="true"&gt;</FONT></P><P><FONT FACE="宋体">从Globals.MESSAGE_KEY中检索，不同于Globals.ERROR_KEY&lt;/logic:messagesNotPresent&gt;</FONT></P><P><FONT FACE="宋体">&lt;logic:messagesNotPresent&nbsp;property="noSuchError"&gt;</FONT></P><P><FONT FACE="宋体">&nbsp;&nbsp;&nbsp;&nbsp;从指定的ActionMessages对象中检索&lt;/logic:messagesNotPresent&gt;</FONT></P><P><FONT FACE="宋体">&nbsp;</FONT></P><P><FONT FACE="宋体"><br/>4．请求转发或重定向a.&lt;logic:forwardname="index"/&gt;,与配置中&lt;global-forwards&gt;同名</FONT></P><P>b.&lt;logic:redirecthref="http://www.apache.org"/&gt;,也有page,href和forward三种属性</P><P>&nbsp;</P><P>5．循环遍历//offset为开始位置，indexId为序号</P><P>a. 遍历集合&lt;% Vector animals=new Vector();animals.addElement("Dog");</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animals.addElement("Cat"); animals.addElement("Bird");</P><P>request.setAttribute("Animals", animals);%&gt;</P><P>&lt;logic:iterate id="element" indexId="index" name="Animals"offset="1" length="2"&gt;</P><P>&lt;bean:write name="index"/&gt;.&lt;bean:writename="element"/&gt;&lt;BR&gt;&lt;/logic:iterate&gt;</P><P>b. 遍历Map&lt;% HashMap h= new HashMap();String fruits[ ] ={"apple","orange","banana"};</P><P>h.put("Fruits", fruits); request.setAttribute("catalog", h);%&gt;</P><P>&lt;logic:iterate id="map" name="catalog"&gt; &lt;bean:writename="map" property="key"/&gt;&lt;BR&gt;</P><P>&lt;logic:iterate id="val" name="map"property="value"&gt;&lt;bean:write name="val"/&gt;</P><P>&lt;/logic:iterate&gt;&nbsp;&nbsp;&lt;/logic:iterate&gt;&nbsp;&nbsp;//如果value不是集合就不用嵌套了</P><P>&nbsp;</P><P>四．利用Tiles模板和Tiles组件创建复合式网页</P><P>1.在web.xml中配置所需要的&lt;tablib&gt;url和location</P><P>2.建立tiles的xml文件放在WEB-INF下：&lt;?xml version="1.0"encoding="ISO-8859-1" ?&gt;</P><P>&nbsp;&lt;!DOCTYPE tiles-definitions PUBLIC</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache Software Foundation//DTD Tiles Configuration1.1//EN"</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"&gt;</P><P>&lt;tiles-definitions&gt; &lt;definition name="index-definition"path="/layout.jsp"&gt;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="header"value="header.jsp"/&gt;&nbsp;&nbsp;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="content"value="indexContent.jsp"/&gt;&nbsp;&nbsp;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="footer" value="footer.jsp"/&gt;&lt;/definition&gt;&nbsp;</P><P>&lt;definition name="product-definition"path="/layout.jsp"&gt;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="sidebar" value="sidebar.jsp"/&gt;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="header"value="header.jsp"/&gt;&nbsp;&nbsp;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="content"value="productContent.jsp"/&gt;&nbsp;&nbsp;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="footer"value="footer.jsp"/&gt;&nbsp;&nbsp;&nbsp;&lt;/definition&gt;</P><P>&lt;/tiles-definitions&gt;</P><P>3．在struts配置文件中配置TilesPlugin插件（ctrl+n）:</P><P>&lt;plug-in className="org.apache.struts.tiles.TilesPlugin"&gt;</P><P>&nbsp;&nbsp;&nbsp;&lt;set-property property="definitions-config"value="/WEB-INF/tiles-defs.xml"/&gt;</P><P>&lt;set-property property="definitions-parser-validate"value="true"/&gt; &lt;/plug-in&gt;</P><P>4.在Action已经存在ActionServlet,并在struts配置文件中配置Action来调用Tiles组件</P><P>&lt;action path="/index"&nbsp;&nbsp;type="org.apache.struts.actions.ForwardAction"</P><P>parameter="index-definition"&gt;&nbsp;&nbsp;&nbsp;&lt;/action&gt;</P><P>ForwardAction为Action内置对象，专门负责转发功能，在将请求转发给parameter的组件</P><P>&nbsp;</P><P>5．在index.jsp中插入Tiles组件&lt;%@ page contentType="text/html;charset=UTF-8" %&gt;</P><P>&lt;%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%&gt;</P><P>&lt;tiles:insert definition="index-definition"/&gt;</P><P>6.在layout.jsp文件中进行布局并设计好其他页面：</P><P>&lt;%@ taglib uri="/WEB-INF/struts-tiles.tld"prefix="tiles"%&gt;</P><P>&lt;table width="100%" height="100%"&gt;</P><P>&nbsp;&lt;tr&gt;&lt;tdheight="15%"&gt;&lt;tiles:insert attribute="header"/&gt;&lt;/td&gt;&nbsp; &lt;/tr&gt;</P><P>&nbsp;&lt;tr&gt;&lt;tdvalign="top"&gt;&lt;tiles:insert attribute="content"/&gt;&lt;/td&gt; &lt;/tr&gt;</P><P>&nbsp;&lt;tr&gt;&lt;tdvalign="bottom"&gt;&lt;tiles:insertattribute="footer"/&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/table&gt;</P><P>备注：在需要出现的页面只有写&lt;tiles:insertdefinition="*"/&gt;就可以插入框架，根据definition中的content改变主体。</P><P>&nbsp;</P><P>7．Tiles组件的组合（type="definition"）以示区别</P><P>&lt;tiles-definitions&gt;</P><P>&nbsp;&nbsp; &lt;definitionname="sidebar-definition"&nbsp;&nbsp;path="/sidebar-layout.jsp"&gt;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="top"value="flags.jsp"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/definition&gt;</P><P>&nbsp;&nbsp; &lt;definitionname="index-definition"&nbsp;&nbsp;path="/layout.jsp"&gt;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="sidebar" value="sidebar-definition"type="definition"/&gt;</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;put name="header" value="header.jsp"/&gt;</P><P>&nbsp;&nbsp;&lt;/definition&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tiles-definitions&gt;//将一个组件put成另一个组件的元素</P><P>&nbsp;<br/></P></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320076234211367</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320076234211367</guid>
    <pubDate>Mon, 23 Jul 2007 16:21:13 +0800</pubDate>
    <dcterms:modified>2007-07-23T16:21:13+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[Struts标签库1]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/5550845320076234142667</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV>&nbsp;<P><STRONG><SPAN>一<SPAN>.html</SPAN>标签</SPAN></STRONG></P><P><STRONG><SPAN>1.html</SPAN></STRONG><STRONG><SPAN>元素的标签<SPAN>:</SPAN></SPAN></STRONG></P><P><SPAN>a1.&lt;html:link<STRONG><SPAN>forward</SPAN></STRONG>="index"&gt;</SPAN><SPAN>链接<SPAN>&lt;global-forwards&gt;</SPAN>中的<SPAN>name&lt;/html:link&gt;</SPAN></SPAN></P><P><SPAN>a2.</SPAN> <SPAN>&lt;html:link<STRONG><SPAN>href</SPAN></STRONG>="http://www.baidu.com"&gt;</SPAN><SPAN>链接到站点外<SPAN><SPAN>&nbsp;&nbsp;</SPAN>&lt;/html:link&gt;</SPAN></SPAN></P><P><SPAN>a3.</SPAN> <SPAN>&lt;html:link<STRONG><SPAN>page</SPAN></STRONG>="/HtmlBasic.do"&gt;</SPAN><SPAN>同一个应用<SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>&lt;/html:link&gt;</SPAN></SPAN></P><P><SPAN>如<SPAN>:</SPAN>包含请求参数<SPAN>: &lt;html:linkpage="/HtmlBasic.do?<STRONG>prop1=abc&amp;prop2=123</STRONG>"/&gt;</SPAN></SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN><SPAN>包含单个请求变量<SPAN>:&lt;% String stringBean = "Value toPass on URL";</SPAN></SPAN></P><P><SPAN>&nbsp;<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>pageContext.setAttribute("<STRONG>stringBean</STRONG>",stringBean);%&gt;</SPAN></P><P><SPAN>&lt;html:link page="/HtmlBasic.do" paramId="urlParamName"<STRONG><SPAN>paramName</SPAN></STRONG>="<STRONG>stringBean</STRONG>"/&gt;</SPAN></P><P><SPAN>&lt;jsp:useBean id="javaBean" scope="page" /&gt;</SPAN></P><P><SPAN>&lt;jsp:setProperty name="javaBean" property="name"value="weiqin" /&gt; //</SPAN><SPAN>要有范围</SPAN></P><P><SPAN>&lt;html:link page="/Html" paramId="url"paramName="<STRONG>javaBean</STRONG>"<STRONG><SPAN>paramProperty</SPAN></STRONG>="name"/&gt;</SPAN></P><P><SPAN>包含多个请求变量<SPAN>:</SPAN></SPAN><SPAN>&lt;%&nbsp;java.util.HashMap myMap = newjava.util.HashMap();</SPAN></P><P><SPAN>&nbsp;<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>myMap.put("myString", new String("myStringValue") );</SPAN></P><P><SPAN>&nbsp;<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>myMap.put("myArray",new String[] { "str1", "str2", "str3" });</SPAN></P><P><SPAN>&nbsp;<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>pageContext.setAttribute("<STRONG><SPAN>map</SPAN></STRONG>",myMap);%&gt;</SPAN></P><P><SPAN>&lt;html:link page="/HtmlBasic.do"name="<STRONG><SPAN>map</SPAN></STRONG>"&gt; url&lt;/html:link&gt;</SPAN></P><P><SPAN>b.&lt;html:img&gt;:</SPAN> <SPAN>&lt;html:imgpage="/struts-power.gif" /&gt;//</SPAN><SPAN>也可以包含单个或多个请求变量</SPAN></P><P><SPAN>&lt;html:img src="/struts-power.gif"paramId="urlParamName" <STRONG>paramName</STRONG>="stringBean"/&gt;</SPAN></P><P><SPAN>&lt;html:img page="/struts-power.gif" name="map"/&gt;</SPAN></P><P><STRONG><SPAN><br/><br/>2.</SPAN></STRONG><STRONG><SPAN>基本表单标签</SPAN></STRONG><SPAN>:&lt;html:form&gt;,&lt;html:text&gt;,&lt;html:hidden&gt;,&lt;html:submit&gt;,&lt;html:reset&gt;</SPAN></P><P><SPAN>&lt;html:cancel&gt;Cancel&lt;/html:cancel&gt;:Action</SPAN><SPAN>中的取消事件<SPAN>:</SPAN></SPAN></P><P><SPAN>FormBasicForm fbf = (FormBasicForm) form;</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>if (<STRONG><SPAN>isCancelled(request)</SPAN></STRONG>) {fbf.setStatus("Cancel was pressed!");</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>return(mapping.findForward("success"));<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>}//</SPAN><SPAN>表示取消选中</SPAN></P><P><SPAN>&nbsp;else { fbf.setStatus("Submit waspressed!");</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>return(mapping.findForward("success"));<SPAN>&nbsp;&nbsp;&nbsp;</SPAN>}</SPAN></P><P><STRONG><SPAN><br/>3.</SPAN></STRONG><STRONG><SPAN>下拉列表和多选列表</SPAN></STRONG></P><P><SPAN>&lt;html:select property="colors" size="6" multiple="true"&gt; // multiple</SPAN><SPAN>下拉可多选</SPAN></P><P><SPAN>&lt;html:optionvalue="htmlselect.orange"&gt;Orange&lt;/html:option&gt;//</SPAN><SPAN>基本的页面输入</SPAN></P><P><SPAN>&lt;html:option value="red" bundle="htmlselect.Colors"key="red"/&gt;//</SPAN><SPAN>从资源文件中显示</SPAN></P><P><SPAN>&lt;% Vector colorCollection = new Vector();colorCollection.add(</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>new org.apache.struts.util.LabelValueBean("Pink","htmlselect.pink"));</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>colorCollection.add(<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>// Pink</SPAN><SPAN>为<SPAN>labelhtmlselect.pink</SPAN>为<STRONG><SPAN>value</SPAN></STRONG></SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>new org.apache.struts.util.LabelValueBean("Brown","htmlselect.brown"));</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>pageContext.setAttribute("colorCollection",colorCollection);<SPAN>&nbsp;&nbsp;</SPAN>%&gt;</SPAN></P><P><STRONG><SPAN>&lt;html:options</SPAN></STRONG><SPAN>&nbsp;collection="colorCollection"&nbsp;<STRONG><SPAN>property</SPAN></STRONG>="value"&nbsp;//</SPAN><SPAN>实际值<SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></SPAN></SPAN></P><P><STRONG><SPAN>labelProperty</SPAN></STRONG><SPAN>="label" /&gt;<SPAN>&nbsp;&nbsp;</SPAN>&lt;/html:select&gt;//labelProperty</SPAN><SPAN>显示值</SPAN></P><P><SPAN><br/><br/>4.</SPAN><STRONG><SPAN>显示错误消息</SPAN></STRONG><SPAN>:errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("key"));</SPAN></P><P><SPAN>a.</SPAN><SPAN>显示全局<SPAN>:&lt;html:errorsproperty="org.apache.struts.action.GLOBAL_MESSAGE"/&gt;</SPAN></SPAN></P><P><SPAN>b.</SPAN><SPAN>显示特定字段<SPAN>:</SPAN></SPAN><SPAN>errors.add("checkbox1", newActionMessage("error.checkbox"));</SPAN></P><P><SPAN>&lt;html:errors property="checkbox1"<STRONG>bundle</STRONG>="HtmlErrors" /&gt;//bundle</SPAN><SPAN>资源文件</SPAN></P><P><STRONG><SPAN><br/><br/>5.</SPAN></STRONG><STRONG><SPAN>显示信息<SPAN>&lt;html:messages&gt;:</SPAN></SPAN></STRONG></P><P><SPAN>a.&lt;html:messages id=”message”message=”true”/&gt;//</SPAN><SPAN>如果为<SPAN>true</SPAN>则从全局中搜索</SPAN></P><P><SPAN>则<SPAN>:ActionMessages actionMessages=newActionMessages();</SPAN></SPAN></P><P><SPAN>actionMessages.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage(“key”));</SPAN></P><P><SPAN>saveMessages(request,actionMessages);</SPAN></P><P><SPAN>b.</SPAN><SPAN>从一定的范围中查找<SPAN>:&lt;html:messagesid=”<STRONG><SPAN>message</SPAN></STRONG>”&gt;</SPAN></SPAN></P><P><SPAN>&lt;bean:writename=”<STRONG><SPAN>message</SPAN></STRONG>”/&gt;&nbsp;&lt;/html:messages&gt;</SPAN></P><P><SPAN>则<SPAN>:protected void saveMessages(HttpServletRequestrequest,ActionMessages messages){</SPAN></SPAN></P><P><SPAN>...request.setAttribute(GLOBAL_MESSAGE_key,messages);}</SPAN></P><P>&nbsp;</P><P><STRONG><SPAN>二<SPAN>:StrutsBean</SPAN>标签</SPAN></STRONG></P><P><STRONG><SPAN>1.</SPAN></STRONG><STRONG><SPAN>访问<SPAN>http</SPAN>请求信息和<SPAN>JSP</SPAN>对象</SPAN></STRONG></P><P><SPAN>a. <STRONG>&lt;bean:cookie</STRONG>id="<STRONG>cookie</STRONG>" name="cookiedemo"value="firsttime"/&gt;&nbsp;//value</SPAN><SPAN>为默认值</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>&lt;%&nbsp;if (cookie.getValue().equals("firsttime")){</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>Cookie c = new Cookie("cookiedemo", "Hi Linda!");</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>c.setComment("A testcookie");c.setMaxAge(3600);response.addCookie(c);}&nbsp;%&gt;</SPAN></P><P><SPAN>输出<SPAN>:</SPAN></SPAN> <SPAN>&lt;bean:writename="<STRONG>cookie</STRONG>" property="value"/&gt;</SPAN></P><P><SPAN>b.</SPAN> <STRONG><SPAN>&lt;bean:header</SPAN></STRONG><SPAN>id="lang" name="Accept-Language"/&gt; &lt;bean:writename="lang"/&gt;</SPAN></P><P><SPAN>c.</SPAN> <STRONG><SPAN>&lt;bean:page</SPAN></STRONG><SPAN>id="this_session"property="<STRONG><SPAN>session</SPAN></STRONG>"/&gt;//</SPAN><SPAN>检索<SPAN>JSP</SPAN>范围<SPAN>,</SPAN>隐含对象</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;</SPAN>&lt;bean:writename="this_session"&nbsp;property="creationTime"/&gt;</SPAN></P><P><SPAN>d.</SPAN> <STRONG><SPAN>&lt;bean:parameter</SPAN></STRONG><SPAN>id="arg1" name="testarg" value="noarg"/&gt; //value</SPAN><SPAN>为默认值</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;</SPAN>&lt;bean:write name="arg1"/&gt;</SPAN></P><P><SPAN>检索多值：<SPAN>&lt;bean:parameter id="arg2"<STRONG><SPAN>multiple="yes"</SPAN></STRONG> name="testarg"value="noarg"/&gt;</SPAN></SPAN></P><P><SPAN>通过链接传递参数：<SPAN>&lt;html:linkpage="/this.jsp?testarg=123&testarg=456&testarg=789"&gt;</SPAN></SPAN></P><P><SPAN>循环输出：<SPAN>&lt;% for (int i=0; i &lt;arg2.length;i++) {out.write(arg2[i] +"&lt;BR&gt;");}&nbsp;%&gt;</SPAN></SPAN></P><P><STRONG><SPAN><br/><br/>2</SPAN></STRONG><STRONG><SPAN>．访问<SPAN>WEB</SPAN>应用资源：</SPAN></STRONG><SPAN>&nbsp;&lt;message-resourcesparameter="res" key="special" /&gt;</SPAN></P><P><SPAN>a.</SPAN><STRONG><SPAN>&lt;bean:messag</SPAN></STRONG><SPAN>e key="hello"arg0="Linda"/&gt;&nbsp;//</SPAN><SPAN>默认资源文件中：<SPAN>hello=Hello,{0}</SPAN></SPAN></P><P><SPAN>&lt;% request.setAttribute("stringBean","hello"); SomeBeanbean=new SomeBean();</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>bean.setName("hello");<SPAN>&nbsp;&nbsp;</SPAN>request.setAttribute("someBean",bean);<SPAN>&nbsp;&nbsp;</SPAN>%&gt;</SPAN></P><P><STRONG><SPAN>通过变量名或<SPAN>javaBean</SPAN>得到<SPAN>key</SPAN>值再访问资源文件：</SPAN></STRONG></P><P><SPAN>&lt;bean:message bundle="special" name="stringBean"/&gt;//bundle</SPAN><SPAN>不能省<SPAN>,</SPAN>只能访问资源文件</SPAN></P><P><SPAN>&lt;bean:message bundle="special" name="someBean"property="name"/&gt;</SPAN></P><P><SPAN>b.<STRONG><SPAN>&lt;bean:include&gt;</SPAN></STRONG></SPAN><SPAN>同<SPAN>&lt;jsp:include&gt;,</SPAN>但将<SPAN>WEB</SPAN>资源存放在一个变量中，有<SPAN>forward,page,href</SPAN></SPAN></P><P><SPAN>&lt;bean:include id="tp1"<STRONG>page</STRONG>="/testpage1.jsp"/&gt;</SPAN><SPAN>&lt;bean:write name="tp1" filter="false"/&gt;</SPAN></P><P><SPAN>&lt;bean:include id="tp2"<STRONG>forward</STRONG>="testpage2"/&gt;</SPAN><SPAN>&lt;bean:write name="tp2" filter="false"/&gt;</SPAN></P><P><STRONG><SPAN><br/><br/>3.</SPAN></STRONG><STRONG><SPAN>定义或输出<SPAN>javaBean</SPAN>，</SPAN></STRONG><SPAN>bean:write</SPAN><SPAN>标签<SPAN>filter</SPAN>为<SPAN>true</SPAN>时会将特殊符号转换成普通字符串</SPAN></P><P><SPAN>a.value</SPAN><SPAN>属性：<STRONG><SPAN>&lt;bean:define</SPAN></STRONG><SPAN>id="name" value="lib"/&gt;&lt;bean:writename="name"/&gt;</SPAN></SPAN></P><P><SPAN>&nbsp;name</SPAN><SPAN>和<SPAN>property</SPAN>属性：<SPAN>&lt;%request.setAttribute("<STRONG>sessionBean</STRONG>", session);%&gt;</SPAN></SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>&lt;bean:define id="contextBean"name="<STRONG>sessionBean</STRONG>"property="servletContext"/&gt;</SPAN></P><P><SPAN>//contextBean</SPAN><SPAN>为<SPAN>javax.servlet.ServletContext</SPAN>类型，实例化</SPAN></P><P><SPAN>&lt;bean:write name="contextBean"property="servletContextName"/&gt;</SPAN></P><P><SPAN>&nbsp;&nbsp;name</SPAN><SPAN>和<SPAN>type</SPAN>属性（用于复制）：<SPAN>&lt;bean:defineid="contextBean_copy" name="contextBean"</SPAN></SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;</SPAN>type="javax.servlet.ServletContext"/&gt;</SPAN></P><P><SPAN>&lt;bean:write name="contextBean_copy"property="majorVersion"/&gt;</SPAN></P><P><STRONG><SPAN><br/><br/>三．<SPAN>Struts Logic</SPAN>标签：</SPAN></STRONG></P><P><STRONG><SPAN>1.</SPAN></STRONG><STRONG><SPAN>逻辑判断：（<SPAN>greatEqual,lessEqual,greatThan...</SPAN>）</SPAN></STRONG></P><P><SPAN>&lt;% Cookie c = new Cookie("username","Linda");<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>c.setComment("A test cookie");</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>c.setMaxAge(3600);<SPAN>&nbsp;&nbsp;&nbsp;</SPAN>response.addCookie(c); %&gt;</SPAN></P><P><SPAN>a.<STRONG><SPAN>&lt;logic:equal</SPAN></STRONG>cookie="username" value="Linda"&gt;UserName isLinda&nbsp;&lt;/logic:equal&gt;</SPAN></P><P><SPAN>b.</SPAN> <SPAN>&lt;%&nbsp;SomeBean bean=newSomeBean();<SPAN>&nbsp;&nbsp;&nbsp;</SPAN>bean.setName("Linda");</SPAN></P><P><SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>request.setAttribute("someBean",bean);%&gt;</SPAN></P><P><STRONG><SPAN>&lt;logic:notEqual</SPAN></STRONG><SPAN>name="someBean" property="name" value="Tom"&gt;not Tom&lt;/logic:notEqual&gt;</SPAN></P><P><SPAN>c. &lt;% request.setAttribute("number","100");%&gt;</SPAN></P><P><STRONG><SPAN>&lt;logic:lessThan</SPAN></STRONG><SPAN>name="number" value="100.0a" &gt; "100"</SPAN><SPAN>小于<SPAN>"100.0a"&lt;/logic:lessThan &gt;</SPAN></SPAN></P><P><STRONG><SPAN><br/><br/></SPAN></STRONG></P></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/5550845320076234142667</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/5550845320076234142667</guid>
    <pubDate>Mon, 23 Jul 2007 16:14:26 +0800</pubDate>
    <dcterms:modified>2007-07-23T16:14:26+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[Vector、ArrayList、List使用深入剖析]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/55508453200762310501467</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV>&nbsp;<P>线性表，链表，哈希表是常用的数据结构，在进行Java开发时，JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述，向读者阐述各个类的作用以及如何正确使用这些类。&nbsp;<br/><br/>Collection<br/>├List<br/>│├LinkedList<br/>│├ArrayList<br/>│└Vector<br/>│　└Stack<br/>└Set<br/>Map<br/>├Hashtable<br/>├HashMap<br/>└WeakHashMap<br/><br/>Collection接口<br/>　　Collection是最基本的集合接口，一个Collection代表一组Object，即Collection的元素（Elements）。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java&nbsp;SDK不提供直接继承自Collection的类，Java&nbsp;SDK提供的类都是继承自Collection的“子接口”如List和Set。<br/>　　所有实现Collection接口的类都必须提供两个标准的构造函数：无参数的构造函数用于创建一个空的Collection，有一个Collection参数的构造函数用于创建一个新的Collection，这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。<br/>　　如何遍历Collection中的每一个元素？不论Collection的实际类型如何，它都支持一个iterator()的方法，该方法返回一个迭代子，使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下：<br/>　　　　Iterator&nbsp;it&nbsp;=&nbsp;collection.iterator();&nbsp;//&nbsp;获得一个迭代子<br/>　　　　while(it.hasNext())&nbsp;{<br/>　　　　　　Object&nbsp;obj&nbsp;=&nbsp;it.next();&nbsp;//&nbsp;得到下一个元素<br/>　　　　}<br/>　　由Collection接口派生的两个接口是List和Set。<br/><br/>List接口<br/>　　List是有序的Collection，使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引（元素在List中的位置，类似于数组下标）来访问List中的元素，这类似于Java的数组。<br/>和下面要提到的Set不同，List允许有相同的元素。<br/>　　除了具有Collection接口必备的iterator()方法外，List还提供一个listIterator()方法，返回一个ListIterator接口，和标准的Iterator接口相比，ListIterator多了一些add()之类的方法，允许添加，删除，设定元素，还能向前或向后遍历。<br/>　　实现List接口的常用类有LinkedList，ArrayList，Vector和Stack。<br/><br/>LinkedList类<br/>　　LinkedList实现了List接口，允许null元素。此外LinkedList提供额外的get，remove，insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈（stack），队列（queue）或双向队列（deque）。<br/>　　注意LinkedList没有同步方法。如果多个线程同时访问一个List，则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List：<br/>　　　　List&nbsp;list&nbsp;=&nbsp;Collections.synchronizedList(new&nbsp;LinkedList(...));<br/><br/>ArrayList类<br/>　　ArrayList实现了可变大小的数组。它允许所有元素，包括null。ArrayList没有同步。<br/>size，isEmpty，get，set方法运行时间为常数。但是add方法开销为分摊的常数，添加n个元素需要O(n)的时间。其他的方法运行时间为线性。<br/>　　每个ArrayList实例都有一个容量（Capacity），即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加，但是增长算法并没有定义。当需要插入大量元素时，在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。<br/>　　和LinkedList一样，ArrayList也是非同步的（unsynchronized）。<br/><br/>Vector类<br/>　　Vector非常类似ArrayList，但是Vector是同步的。由Vector创建的Iterator，虽然和ArrayList创建的Iterator是同一接口，但是，因为Vector是同步的，当一个Iterator被创建而且正在被使用，另一个线程改变了Vector的状态（例如，添加或删除了一些元素），这时调用Iterator的方法时将抛出ConcurrentModificationException，因此必须捕获该异常。<br/><br/>Stack&nbsp;类<br/>　　Stack继承自Vector，实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法，还有peek方法得到栈顶的元素，empty方法测试堆栈是否为空，search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。<br/><br/>Set接口<br/>　　Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。<br/>　　很明显，Set的构造函数有一个约束条件，传入的Collection参数不能包含重复的元素。<br/>　　请注意：必须小心操作可变对象（Mutable&nbsp;Object）。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。<br/><br/>Map接口<br/>　　请注意，Map没有继承Collection接口，Map提供key到value的映射。一个Map中不能包含相同的key，每个key只能映射一个value。Map接口提供3种集合的视图，Map的内容可以被当作一组key集合，一组value集合，或者一组key-value映射。<br/>Hashtable类<br/>　　Hashtable继承Map接口，实现一个key-value映射的哈希表。任何非空（non-null）的对象都可作为key或者value。<br/>　　添加数据使用put(key,&nbsp;value)，取出数据使用get(key)，这两个基本操作的时间开销为常数。<br/>Hashtable通过initial&nbsp;capacity和load&nbsp;factor两个参数调整性能。通常缺省的load&nbsp;factor&nbsp;0.75较好地实现了时间和空间的均衡。增大load&nbsp;factor可以节省空间但相应的查找时间将增大，这会影响像get和put这样的操作。<br/>使用Hashtable的简单示例如下，将1，2，3放到Hashtable中，他们的key分别是”one”，”two”，”three”：<br/>　　　　Hashtable&nbsp;numbers&nbsp;=&nbsp;new&nbsp;Hashtable();<br/>　　　　numbers.put(“one”,&nbsp;new&nbsp;Integer(1));<br/>　　　　numbers.put(“two”,&nbsp;new&nbsp;Integer(2));<br/>　　　　numbers.put(“three”,&nbsp;new&nbsp;Integer(3));<br/>　　要取出一个数，比如2，用相应的key：<br/>　　　　Integer&nbsp;n&nbsp;=&nbsp;(Integer)numbers.get(“two”);<br/>　　　　System.out.println(“two&nbsp;=&nbsp;”&nbsp;+&nbsp;n);<br/>　　由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置，因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object，如果你用自定义的类当作key的话，要相当小心，按照散列函数的定义，如果两个对象相同，即obj1.equals(obj2)=true，则它们的hashCode必须相同，但如果两个对象不同，则它们的hashCode不一定不同，如果两个不同对象的hashCode相同，这种现象称为冲突，冲突会导致操作哈希表的时间开销增大，所以尽量定义好的hashCode()方法，能加快哈希表的操作。<br/>　　如果相同的对象有不同的hashCode，对哈希表的操作会出现意想不到的结果（期待的get方法返回null），要避免这种问题，只需要牢记一条：要同时复写equals方法和hashCode方法，而不要只写其中一个。<br/>　　Hashtable是同步的。<br/><br/>HashMap类<br/>　　HashMap和Hashtable类似，不同之处在于HashMap是非同步的，并且允许null，即null&nbsp;value和null&nbsp;key。，但是将HashMap视为Collection时（values()方法可返回Collection），其迭代子操作时间开销和HashMap的容量成比例。因此，如果迭代操作的性能相当重要的话，不要将HashMap的初始化容量设得过高，或者load&nbsp;factor过低。<br/><br/>WeakHashMap类<br/>　　WeakHashMap是一种改进的HashMap，它对key实行“弱引用”，如果一个key不再被外部所引用，那么该key可以被GC回收。<br/><br/>总结<br/>　　如果涉及到堆栈，队列等操作，应该考虑用List，对于需要快速插入，删除元素，应该使用LinkedList，如果需要快速随机访问元素，应该使用ArrayList。<br/>　　如果程序在单线程环境中，或者访问仅仅在一个线程中进行，考虑非同步的类，其效率较高，如果多个线程可能同时操作一个类，应该使用同步的类。<br/>　　要特别注意对哈希表的操作，作为key的对象要正确复写equals和hashCode方法。<br/>　　尽量返回接口而非实际的类型，如返回List而非ArrayList，这样如果以后需要将ArrayList换成LinkedList时，客户端代码不用改变。这就是针对抽象编程。<br/><br/><STRONG><FONT STYLE="FONT-SIZE: 20px; FONT-FAMILY: 宋体">同步性<br/>Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的，因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率，所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择，这样可以避免由于同步带来的不必要的性能开销。<br/>数据增长<br/>从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候，如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度，Vector缺省情况下自动增长原来一倍的数组长度，ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势，因为你可以通过设置集合的初始化大小来避免不必要的资源开销。<br/>使用模式<br/>在ArrayList和Vector中，从一个指定的位置（通过索引）查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的，这个时间我们用O(1)表示。但是，如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长：O(n-i)，其中n代表集合中元素的个数，i代表元素增加或移除元素的索引位置。为什么会这样呢？以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢？<br/>这意味着，你只是查找特定位置的元素或只在集合的末端增加、移除元素，那么使用Vector或ArrayList都可以。如果是其他操作，你最好选择其他的集合操作类。比如，LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1)，但它在索引一个元素的使用缺比较慢－O(i),其中i是索引的位置.使用ArrayList也很容易，因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象，所有你要明白它也会带来额外的开销。<br/>最后，在《Practical&nbsp;Java》一书中Peter&nbsp;Haggar建议使用一个简单的数组（Array）来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。</FONT></STRONG></P></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/55508453200762310501467</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/55508453200762310501467</guid>
    <pubDate>Mon, 23 Jul 2007 10:50:14 +0800</pubDate>
    <dcterms:modified>2007-07-23T10:50:14+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[J2EE平台简介]]></title>	
    <link>http://nikyok.blog.163.com/blog/static/55508453200761810503967</link>
    <description><![CDATA[<div><div id="articleContent" ><DIV><TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="558" BORDER="0"><TBODY><TR><TD VALIGN="top" ALIGN="right" WIDTH="2%" HEIGHT="10"><DIV ALIGN="left"></DIV></TD><TD VALIGN="top" ALIGN="right" WIDTH="98%" BGCOLOR="#FFFFFF"><DIV  ALIGN="left"><STRONG>1.1J2EE平台简介</STRONG><P><br/>　　 <B>1.1.1 J2EE规范</B></P><P>　　J2EE(Java 2 Platform，EnterpriseEdition）是SUN公司定义的一个开发分布式企业级应用的规范。它提供了一个多层次的分布式应用模型和一系列开发技术规范。多层次分布式应用模型是指根据功能把应用逻辑分成多个层次，每个层次支持相应的服务器和组件，组件在分布式服务器的组件容器中运行（如Servlet组件在Servlet容器上运行，EJB组件在EJB容器上运行），容器间通过相关的协议进行通讯，实现组件间的相互调用。遵从这个规范的开发者将得到行业的广泛支持，使企业级应用的开发变得简单、快速。</P><P><B>1.1.2 J2EE组件层次</B></P><P>　　J2EE组件和层次如图1-1所示。<br/>　　 图1-1 J2EE组件层次(略)<br/>　　 J2EE规范定义了如下组件：<br/>　　 ★客户端组件<br/>　　 ★Web组件<br/>　　 ★EJB组件<br/>　　 J2EE规范定义了以下四个层次。<br/>　　 <B>1.客户端层(Client Tier)</B><br/>　　客户端层用来实现企业级应用系统的操作界面和显示层。另外，某些客户端程序也可实现业务逻辑。可分为基于Web的和非基于Web的客户端两种情况。基于Web的情况下主要作为企业Web服务器的浏览器。非基于Web的客户层则是独立的应用程序，可以完成瘦客户机无法完成的任务。<br/>　　 <B>2.Web层</B><br/>　　为企业提供Web服务。包括企业信息发布等。Web层由Web组件组成。J2EEWeb组件包括JSP页面和Servlets。Web层也可以包括一些JavaBeans。Web层主要用来处理客户请求，调用相应的逻辑块，并把结果以动态网页的形式返回到客户端。<br/>　　 <B>3.业务层(Business Tier)</B><br/>　　业务层也叫EJB层或应用层，它由EJB服务器和EJB组件组成。一般情况下许多开发商把Web服务器和EJB服务器产品结合在一起发布，称为应用服务器。EJB层用来实现企业级信息系统的业务逻辑。这是企业级应用的核心，由运行在业务层中的EJB来处理。一个Bean从客户端接收数据、处理，然后把数据送到企业信息系统层存储起来。同样，一个Bean也可以从企业信息系统取出数据，发送到客户端程序。业务层中的EJB要运行在容器中，容器解决了底层的问题，如事务处理、生命周期、状态管理、多线程安全管理、资源池等。<br/>　　 <B>4.企业信息系统层（Enterprise Information Systemtier)</B><br/>　　处理企业系统软件，包括企业基础系统、数据库系统及其他遗留的系统。J2EE将来的版本支持连接架构（ConnectorArchitecture)。它是连接J2EE平台和企业信息系统层的标准API。<br/>　　业务层和Web层共同组成了三层J2EE应用的中间层，其他两层是客户端层和存储层或企业信息系统层。<br/>　　 <B>5.J2EE的分布应用技术</B><br/>　　为实现企业级分布式应用，J2EE定义了丰富的技术标准，符合这些标准的开发工具和API为开发企业级应用提供支持。这些技术涵盖数据库访问、分布式通信、安全等。为分布式应用提供支持的多方面。<br/>　　 (1)组件技术<br/>　　J2EE的核心思想是基于组件/容器的应用。每个组件提供了方法、属性、事件的接口。组件可以由多种语言开发。组件是可以重用的、共享的、分布的。<br/>　　 （2）Servlets和JSP<br/>　　Servlets用来生成动态页面或接收用户请求产生相应操作(调用EJB)。JSP基于文本。通过容器产生相应的Servlets，使内容和显示分开。J2EE中提供了ServletAPI，用于创建Servlets。<br/>　　 （3）EJB技术<br/>　　EJB规范提供了一种开发和部署服务器端组件的方法。每个EJB是按功能逻辑划分的，开发时不必关注系统底层细节问题，只关注具体的事务分析。EJB开发完毕后，按规范部署在EJB容器，完成相应的事务功能。EJB支持分布式计算。真正体现了企业级的应用。<br/>　　 （4）数据库访问<br/>　　无论是传统的企业信息系统还是将来的企业信息系统，数据库都占有重要的地位。开发分布式系统要求数据库访问具有良好的灵活性和扩展性。JDBC（JavaDatabaseConnectivity)是一个独立于特定的数据库管理系统的开发接口。它提供一个通用的访问SQL数据库和存储结构的机制，支持基本SQL功能的一个通用底层的应用程序编程接口。它在不同的数据库界面上提供了一个统一的用户界面。提供了多种多样的数据库连接方式。J2EE中提供了JDBCAPI使多种数据库操作简单、可行。<br/>　　 （5）分布式通信技术<br/>　　分布式通信技术是分布式企业系统的核心技术。J2EE框架为Web应用和EJB应用提供多种通信模式。<br/>　　为了使运行于某一机器上的对象调用另一台机器的对象，J2EE实现了如下通信方式：<br/>　　 Java RMI(Remote Method Invoke)：远程方法调用。JavaRMI实现Java对象间的远程通信。服务器用注册器把一个名字和远程对象绑在一起，客户机通过名字从服务器注册器上查找远程对象，找到后下载远程对象的本地代理，调用远程对象的方法。<br/>　　 Java IDL（Java Interface DefilationLanguage)：接口定义语言。可以实现Java对象的符合CORBA规范的远程对象通信。<br/>　　 JNDI（Java Naming and DirectoryInterface)：Java命名和目录接口。JNDI为分布式系统访问远程对象提供了一个标准的命名接口。EJB主接口对象、数据源、消息服务器等都可以用JDNI树的形式注册到名称服务器中，调用它们的对象通过符合JDNI的程序接口在JNDI名称服务器中查找指定名称的远程对象。<br/>　　 JMS（Java MessageService)：Java消息服务。为开发消息中间件应用程序定义了一套规范。Java客户端和Java中间层访问消息系统只要实现JMS定义的简单的接口，就可以实现复杂的应用，而不必去关注低级的技术细节。</P></DIV></TD></TR></TBODY></TABLE></DIV>											</div></div>]]></description>
	    <author><![CDATA[♂冰风♂]]></author>
	    <comments>http://nikyok.blog.163.com/blog/static/55508453200761810503967</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://nikyok.blog.163.com/blog/static/55508453200761810503967</guid>
    <pubDate>Wed, 18 Jul 2007 22:50:39 +0800</pubDate>
    <dcterms:modified>2007-07-18T22:50:39+08:00</dcterms:modified>
  </item>    
 </channel>
</rss>