﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-alancxx-文章分类-j2ee架构</title><link>http://www.blogjava.net/alancxx/category/46449.html</link><description>------简单就是美</description><language>zh-cn</language><lastBuildDate>Thu, 02 Feb 2012 19:04:47 GMT</lastBuildDate><pubDate>Thu, 02 Feb 2012 19:04:47 GMT</pubDate><ttl>60</ttl><item><title>oracle jdbc 邪恶数字"65536" ---批量插入10万条记录引发的“血案”</title><link>http://www.blogjava.net/alancxx/articles/369106.html</link><dc:creator>蜂鸟</dc:creator><author>蜂鸟</author><pubDate>Tue, 31 Jan 2012 12:17:00 GMT</pubDate><guid>http://www.blogjava.net/alancxx/articles/369106.html</guid><wfw:comment>http://www.blogjava.net/alancxx/comments/369106.html</wfw:comment><comments>http://www.blogjava.net/alancxx/articles/369106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alancxx/comments/commentRss/369106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alancxx/services/trackbacks/369106.html</trackback:ping><description><![CDATA[<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="font-weight: bold"><span>1.<span>&nbsp;&nbsp;&nbsp;</span></span></strong><strong style="font-weight: bold">故事背景：</strong></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">mysql数据迁移到<span>oracle，其中有个表名叫&#8220;bil_vip&#8221;，有10万条记录，迁移后检查发现oracle数据库只插入34464条记录，程序执行过程没有发现任何错误。修改数据库连接代码向mysql插入10万条记录，结果都插入OK。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">批量插入使用<span>spring&nbsp;<strong style="font-weight: bold">jdbctemplate.batchUpdate</strong>(sql, new BatchPreparedStatementSetter());方法，该方法的核心是PreparedStatement的<strong style="font-weight: bold">executeBatch</strong>方法。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="font-weight: bold"><span>2.<span>&nbsp;&nbsp;&nbsp;</span></span></strong><strong style="font-weight: bold">继续实验：</strong></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">新建一个<span>Test表，只有一个name字段做实验。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">抛弃<span>jdbctemplate，直接使用PreparedStatement做实验，结果和jdbcTemplate是一样的，实验证明总是会丢失65536条记录。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">oracle&nbsp;驱动的问题？换了最新<span>driver，还是不行。继续探索....</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="font-weight: bold"><span>3.<span>&nbsp;&nbsp;&nbsp;</span></span></strong><strong style="font-weight: bold">希望之光：</strong></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">早上发了个消息向大家征求思路，继中说了一句分批处理，点亮了我的思路。按照继中提供思路，每<span>1万条记录一批，分多批发送给Oracle。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">结果喜出望外，<span>10万条记录全部插入成功。但是"65536"这个数字是什么意思呢......<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">在网上搜索文章发现，这个<span>65536是一个bug。当PreparedStatement批量处理正好65536个记录时候，<span style="color: red">程序会挂死</span>。我试了一下真的挂死了，太吓人了，这坑够深的。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="font-weight: bold"><span>4.<span>&nbsp;&nbsp;&nbsp;</span></span></strong><strong style="font-weight: bold">解决方案：</strong></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">spring jdbctemplate还是很好用的，而且业务已经被我封装了，如果使用<span>PreparedStatement意味着多了一个处理分支，以后维护会很麻烦。</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">我新建一个<span>MyJdbcTemplate类，继承&nbsp;jdbctemplate类，并覆盖了batchUpdate方法。这下舒服了，系统又恢复了整洁。<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="font-weight: bold"><span>5.<span>&nbsp;&nbsp;&nbsp;</span></span></strong><strong style="font-weight: bold">&#9733;&nbsp;</strong><strong style="font-weight: bold">结论和收获：</strong></p>
<p style="padding-right: 0px; padding-left: 30px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-family: Wingdings"><span style="font-size: small">&#252;&nbsp;&nbsp;</span></span><span style="font-size: small">有事多思考，多请教身边同事。</span></p>
<p style="padding-right: 0px; padding-left: 30px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-family: Wingdings"><span style="font-size: small">&#252;&nbsp;&nbsp;</span></span><span style="font-size: small">坚持<span>Open-close原则<span style="color: red">(</span></span>Open for extension, Closed for modification)会系统更好的扩展，非常容易维护，关键是要坚持这个原则，如果我因为一个特殊分支使用了<span>PreparedStatement，这样势必破坏了这个原则，日后的维护必然会很麻烦。</span></span></p>
<p style="padding-right: 0px; padding-left: 30px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-family: Wingdings"><span style="font-size: small">&#252;&nbsp;&nbsp;</span></span><span style="font-size: small">基于<span>oracle数据如果使用jdbc批量，一定要分批发送数据oracle，否则正好发一个65536系统就挂死，大于65536数据就丢失，杯具呀......</span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="font-weight: bold"><span>6.<span>&nbsp;&nbsp;&nbsp;</span></span></strong><strong style="font-weight: bold">题目何以为&#8220;<span style="color: red">血案&#8221;：</span></strong></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0cm 0cm 0pt 21pt; word-spacing: 0px; font: 14px/25px Helvetica, Tahoma, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 21pt; padding-top: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span style="font-size: small">周二打球回家就想这个问题，打开笔记本调试，不知不觉搞到很晚，影响媳妇睡觉（媳妇早上<span>5:30上班），被痛骂一顿，赶紧上床睡觉，我媳妇气的不行，手痛砸了一下床板（我们的床撤掉了床垫，只有床架和木板），床一下子塌了，把媳妇吓坏了，把我腿弄伤了一块，唉，&#8220;<strong style="font-weight: bold"><span style="color: red">血案</span></strong>&#8221;呀。</span></span></p><img src ="http://www.blogjava.net/alancxx/aggbug/369106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alancxx/" target="_blank">蜂鸟</a> 2012-01-31 20:17 <a href="http://www.blogjava.net/alancxx/articles/369106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打jar把第三方的jar也打进去</title><link>http://www.blogjava.net/alancxx/articles/369033.html</link><dc:creator>蜂鸟</dc:creator><author>蜂鸟</author><pubDate>Mon, 30 Jan 2012 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/alancxx/articles/369033.html</guid><wfw:comment>http://www.blogjava.net/alancxx/comments/369033.html</wfw:comment><comments>http://www.blogjava.net/alancxx/articles/369033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alancxx/comments/commentRss/369033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alancxx/services/trackbacks/369033.html</trackback:ping><description><![CDATA[<span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;之前在我的blog中写道,关于这个问题,以前是不知道怎么实现?</span><a title="关于java跨平台移值" style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(29,88,209); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-decoration: none; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" href="http://www.blogjava.net/soddabao/archive/2006/10/20/76304.html" target="_blank">地址</a><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">.后来自己在网上查了,有各种不同的说法,感觉都不怎么实用.</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" /><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp; 前几天在看&lt;&lt;Eclipse从入门到精通&gt;&gt;一书,看到一节关于eclipse打包的介绍,感觉有方法了.</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" /><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp; 大家都知道打java包,需要一个清单文件,MANIFEST.MF,内容无非就是</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; padding-bottom: 4px; word-spacing: 0px; font: 13px/21px Arial; text-transform: none; border-left: rgb(204,204,204) 1px solid; width: 564px; color: rgb(0,0,0); word-break: break-all; text-indent: 0px; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; white-space: normal; letter-spacing: normal; background-color: rgb(238,238,238); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-image: initial" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(0,0,0)">Manifest</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">Version:&nbsp;</span><span style="color: rgb(0,0,0)">1.0</span><span style="color: rgb(0,0,0)"><br /><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-image: initial" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />Main</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">Class:&nbsp;awt.MyGuiImp</span></div><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp; 实际上,清单文件中还有一个重要的,就是Class-Path,大家一看就知道这个是用来干什么的了.不错,这个就是程序运行的支持库的路径.后来上网查了一下,MANIFEST.MF的具体解释是这样:</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" /><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打包清单.它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行java应用程序时要根据此文件中给出的信息来查找入口类和支持库.</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" /><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们以前只注意了MANIFEST.MF中的入口类,也就是我们常说的主类(有main方法的类),却忽视了支持库.</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" /><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class-Path:指定支持库的路径,"."指程序运行目录,即到处的jar包所在目录.程序运行时依据Class-Path项的设置路径来查找支持库.每一个支持库之间用空格格开.</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" /><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp; 后来我自己用到的jar,放一个文件夹lib,lib就放在和jar包一个文件夹下,清单文件这样写</span><br style="word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; padding-bottom: 4px; word-spacing: 0px; font: 13px/21px Arial; text-transform: none; border-left: rgb(204,204,204) 1px solid; width: 564px; color: rgb(0,0,0); word-break: break-all; text-indent: 0px; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; white-space: normal; letter-spacing: normal; background-color: rgb(238,238,238); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-image: initial" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(0,0,0)">Manifest</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">Version:&nbsp;</span><span style="color: rgb(0,0,0)">1.0</span><span style="color: rgb(0,0,0)"><br /><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-image: initial" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />Main</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">Class:&nbsp;awt.MyGuiImp<br /><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-image: initial" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />Class</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">Path:&nbsp;.</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">lib</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">jacob.jar&nbsp;.</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">lib</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">jdom.jar&nbsp;.</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">lib</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">log4j.jar</span></div><span style="display: inline! important; float: none; word-spacing: 0px; font: 14px/21px Arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; 移到别的计算机,运行jar,就不会出现任何问题了,前提是该计算机必须装jdk.</span><img src ="http://www.blogjava.net/alancxx/aggbug/369033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alancxx/" target="_blank">蜂鸟</a> 2012-01-30 16:58 <a href="http://www.blogjava.net/alancxx/articles/369033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java日志组件分析</title><link>http://www.blogjava.net/alancxx/articles/log4j.html</link><dc:creator>蜂鸟</dc:creator><author>蜂鸟</author><pubDate>Fri, 04 Mar 2011 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/alancxx/articles/log4j.html</guid><wfw:comment>http://www.blogjava.net/alancxx/comments/345744.html</wfw:comment><comments>http://www.blogjava.net/alancxx/articles/log4j.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alancxx/comments/commentRss/345744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alancxx/services/trackbacks/345744.html</trackback:ping><description><![CDATA[<p>&nbsp;<span style="font-size: 9pt">如果对于<span lang="EN-US">commons-loging </span>、<span lang="EN-US">log4j </span>、<span lang="EN-US">slf4j </span>、<span lang="EN-US">LogBack </span>等都已经非常清楚了，可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结，希望对这块基础没有理解透的同学能有所帮助，当然如果对这块有更深刻理解的同学，也贡献出自己的知识和见解。 <span lang="EN-US"><o:p></o:p></span></span></p>
<p><strong><span style="font-family: 宋体; mso-bidi-font-family: 宋体">一、<span lang="EN-US"> &nbsp;&nbsp;&nbsp; </span>概念 </span></strong></p>
<p><strong><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-family: 宋体">Commons-logging </span></strong><span lang="EN-US">: </span><span lang="EN-US" style="font-size: 9pt">apache</span><span style="font-size: 9pt">最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于<span lang="EN-US">JDBC </span>的<span lang="EN-US">api </span>接口，具体的的<span lang="EN-US">JDBC driver </span>实现由各数据库提供商实现。通过统一接口解耦，不过其内部也实现了一些简单日志方案。</span> </p>
<p><strong><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-family: 宋体">Log4j </span></strong><span lang="EN-US">: </span><span style="font-size: 9pt">经典的一种日志解决方案。内部把日志系统抽象封装成<span lang="EN-US">Logger </span>、<span lang="EN-US">appender </span>、<span lang="EN-US">pattern </span>等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。 <span lang="EN-US"><o:p></o:p></span></span></p>
<p><strong><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-family: 宋体">Slf4j </span></strong><span lang="EN-US">: </span><span style="font-size: 9pt">全称为<span lang="EN-US">Simple Logging Facade for JAVA</span>：<span lang="EN-US">java</span>简单日志门面。是对不同日志框架提供的一个门面封装。可以在部署的时候不修改任何配置即可接入一种日志实现方案。和<span lang="EN-US">commons-loging </span>应该有一样的初衷。个人感觉设从计上更好一些，没有<span lang="EN-US">commons </span>那么多潜规则。同时有两个额外特点： </span></p>
<p><span lang="EN-US" style="font-size: 9pt">1. </span><span style="font-size: 9pt">能支持多个参数，并通过<span lang="EN-US">{} </span>占位符进行替换，避免老写<span lang="EN-US">logger.isXXXEnabled </span>这种无奈的判断，带来性能提升见：<span lang="EN-US">http://www.slf4j.org/faq.html#logging_performance </span>。 <span lang="EN-US"><o:p></o:p></span></span></p>
<p><span lang="EN-US" style="font-size: 9pt">2.OSGI </span><span style="font-size: 9pt">机制更好兼容支持 <span lang="EN-US"><o:p></o:p></span></span></p>
<p><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">一图胜千言，官网上的一个图：<br />
<br />
&nbsp; <img style="width: 698px; height: 678px" height="678" alt="" src="http://www.blogjava.net/images/blogjava_net/alancxx/0c184c55-5f4f-305d-b019-04ce68389fd6.png" width="698" border="0" /></p>
<p style="text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体">从上图可以发现，选择还是很多的。 </span></p>
<p><strong>Logback </strong>: <span style="font-size: 9pt">LOGBack </span><span style="font-size: 9pt">作为一个通用可靠、快速灵活的日志框架，将作为Log4j 的替代和SLF4J 组成新的日志系统的完整实现。官网上称具有极佳的性能，在关键路径上执行速度是log4j 的10 倍，且内存消耗更少。具体优势见： </span></p>
<p><span style="font-size: 9pt">http://logback.qos.ch/reasonsToSwitch.html </span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">二、 &nbsp;&nbsp;&nbsp; 常见日志方案和注意事项 </span></strong></p>
<p><strong>1.Commons-logging+log4j </strong>: <span style="font-size: 9pt">经典的一个日志实现方案。出现在各种框架里。如spring 、webx 、ibatis 等等。直接使用log4j 即可满足我们的日志方案。但是一般为了避免直接依赖具体的日志实现，一般都是结合commons-logging 来实现。常见代码如下： </span></p>
<p><span style="font-size: 9pt">import org.apache.commons.logging.Log; </span></p>
<p><span style="font-size: 9pt">import org.apache.commons.logging.LogFactory; </span></p>
<p><span style="font-size: 9pt">private static Log logger = LogFactory.getLog(CommonsLoggingTest.class); </span></p>
<p><span style="font-size: 9pt">代码上，没有依赖任何的log4j 内部的类。那么log4j 是如何被装载的？ </span></p>
<p><span style="font-size: 9pt">Log </span><span style="font-size: 9pt">是一个接口声明。LogFactory 的内部会去装载具体的日志系统，并获得实现该Log 接口的实现类。而内部有一个Log4JLogger 实现类对Log 接口同时内部提供了对log4j logger 的代理。LogFactory 内部装载日志系统流程： </span></p>
<p><span style="font-size: 9pt">1. &nbsp; </span><span style="font-size: 9pt">首先，寻找org.apache.commons.logging.LogFactory 属性配置 </span></p>
<p><span style="font-size: 9pt">2. &nbsp; </span><span style="font-size: 9pt">否则，利用JDK1.3 开始提供的service 发现机制，会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory 文件，若找到则装载里面的配置，使用里面的配置。 </span></p>
<p><span style="font-size: 9pt">3. &nbsp; </span><span style="font-size: 9pt">否则，从Classpath 里寻找commons-logging.properties ，找到则根据里面的配置加载。 </span></p>
<p><span style="font-size: 9pt">4. &nbsp; </span><span style="font-size: 9pt">否则，使用默认的配置：如果能找到Log4j 则默认使用log4j 实现，如果没有则使用JDK14Logger 实现，再没有则使用commons-logging 内部提供的SimpleLog 实现。 </span></p>
<p><span style="font-size: 9pt">从上述加载流程来看，如果没有做任何配置，只要引入了log4j 并在classpath 配置了log4j.xml ，则commons-logging 就会使log4j 使用正常，而代码里不需要依赖任何log4j 的代码。 </span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">2.Commons-logging+log4j+slf4j </span></strong></p>
<p><span style="font-size: 9pt">如果在原有commons-logging 系统里，如果要迁移到slf4j, 使用slf4j 替换commons-logging ，也是可以做到的。原理使用到了上述commons-logging 加载的第二点。需要引入Org.slf4j.jcl-over-slf4j-1.5.6.jar 。这个jar 包提供了一个桥接，让底层实现是基于slf4j 。原理是在该jar 包里存放了配置META-INF/services/org.apache.commons.logging.LogFactory =org.apache.commons.logging.impl.SLF4JLogFactory ，而commons-logging 在初始化的时候会找到这个serviceId ，并把它作为LogFactory 。 </span></p>
<p><span style="font-size: 9pt">完成桥接后，那么那么简单日志门面SLF4J 内部又是如何来装载合适的log 呢？ </span></p>
<p><span style="font-size: 9pt">原理是SLF4J 会在编译时会绑定import org.slf4j.impl.StaticLoggerBinder; 该类里面实现对具体日志方案的绑定接入。任何一种基于slf4j 的实现都要有一个这个类。如： </span></p>
<p><span style="font-size: 9pt">org.slf4j.slf4j-log4j12-1.5.6: </span><span style="font-size: 9pt">提供对 log4j 的一种适配实现。 </span></p>
<p><span style="font-size: 9pt">Org.slf4j.slf4j-simple-1.5.6: </span><span style="font-size: 9pt">是一种 simple 实现，会将 log 直接打到控制台。 </span></p>
<p><span style="font-size: 9pt">&#8230;&#8230; </span></p>
<p><span style="font-size: 9pt">那么这个地方就要注意了：如果有任意两个实现slf4j 的包同时出现，那就有可能酿就悲剧，你可能会发现日志不见了、或都打到控制台了。原因是这两个jar 包里都有各自的org.slf4j.impl.StaticLoggerBinder ，编译时候绑定的是哪个是不确定的。这个地方要特别注意！！出现过几次因为这个导致日志错乱的问题。 </span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">3.Slf4j+logback </span></strong></p>
<p><span style="font-size: 9pt">Slf4j </span><span style="font-size: 9pt">和log4j 作者都是同一个人。 </span></p>
<p><span style="font-size: 9pt">Logback </span><span style="font-size: 9pt">号称在性能各方面有很多优势，也很诱人。 </span></p>
<p><span style="font-size: 9pt">直接使用SLf4j 也很简单： </span></p>
<p><span style="font-size: 9pt">import org.slf4j.Logger;<br />
import org.slf4j.LoggerFactory;<br />
<br />
public class HelloWorld {<br />
&nbsp; public static void main(String[] args) {<br />
&nbsp; &nbsp; Logger logger = LoggerFactory.getLogger(HelloWorld.class);<br />
&nbsp; &nbsp; logger.info("Hello World");<br />
&nbsp; }<br />
} </span></p>
<p><span style="font-size: 9pt">代码里也看不到任何具体日志实现方案的痕迹。 </span></p>
<p><span style="font-size: 9pt">Logback </span><span style="font-size: 9pt">没用过，看到过一些诱人介绍。具体大家可以去研究。logback 。 </span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">注意事项 </span></strong></p>
<p><span style="font-size: 9pt">使用日志配置的时候一定要明白需求，同时避免冲突。 </span></p>
<p><span style="font-size: 9pt">如使用SLF4j 的时候为了避免冲突，一定要保障只有一种实现类jar 包在里面。 </span></p>
<p><span style="font-size: 9pt; font-family: 宋体">当遇到日志错乱等问题时，可以从这几个方面来排查</span></span></p>
<img src ="http://www.blogjava.net/alancxx/aggbug/345744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alancxx/" target="_blank">蜂鸟</a> 2011-03-04 18:09 <a href="http://www.blogjava.net/alancxx/articles/log4j.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SiteMesh应用</title><link>http://www.blogjava.net/alancxx/articles/333048.html</link><dc:creator>蜂鸟</dc:creator><author>蜂鸟</author><pubDate>Mon, 27 Sep 2010 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/alancxx/articles/333048.html</guid><wfw:comment>http://www.blogjava.net/alancxx/comments/333048.html</wfw:comment><comments>http://www.blogjava.net/alancxx/articles/333048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alancxx/comments/commentRss/333048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alancxx/services/trackbacks/333048.html</trackback:ping><description><![CDATA[<p><span style="font-family: 隶书">步骤：<br style="font-family: " />
1、下载sitemesh-2.4.1.jar。<br style="font-family: " />
2、把jar复制到webapp应用lib下，创建decorators.xml文件，并修改web.xml。</span></p>
<p><span style="font-family: Times New Roman">webapp</span></p>
<p><span style="font-family: Times New Roman">&nbsp; <span style="font-family: 宋体">├─</span>META-INF</span></p>
<p><span style="font-family: Times New Roman">&nbsp;&nbsp;<span style="font-family: 宋体">└─</span>WEB-INF</span></p>
<p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">├─</span>ftl/&nbsp;&nbsp;&nbsp; (freemaker<span style="font-family: 宋体">模板文件</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 宋体"><span style="font-family: Times New Roman">├─lib/</span><span style="color: red"><span style="font-family: Times New Roman">sitemesh-2.4.1.jar<br />
</span></span></span><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">├─<span style="color: red">decorators.xml</span></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体"><span style="font-family: Times New Roman">└─</span><span style="color: red"><span style="font-family: 宋体"><span style="font-family: Times New Roman">web.xml</span></span></span></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span style="font-family: 隶书">3、decorators.xml内容如下：</span></p>
<p><span style="font-family: Courier"><span style="font-family: Times New Roman">&lt;decorators&gt;<br />
&lt;/decorators&gt;<br />
(Optional) Create the file [web-app]/WEB-INF/sitemesh.xml that contains the following: <br />
&lt;sitemesh&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="decorators-file" value="/WEB-INF/decorators.xml" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;excludes file="${decorators-file}" /&gt;</span></span></p>
<p><span style="font-family: Courier"><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; &lt;page-parsers&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parser content-type="text/html"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parser content-type="text/html;charset=ISO-8859-1"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/page-parsers&gt;</span></span></p>
<p style="font-family: 隶书"><span style="font-family: Courier"><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; &lt;decorator-mappers&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="config" value="${decorators-file}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mapper&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/decorator-mappers&gt;<br />
&lt;/sitemesh&gt;</span></span></p>
<p><span style="font-family: 隶书">4、修改web.xml 文件如下：</span></p>
<p><span style="font-family: 微软雅黑"><span style="font-family: Verdana"><span style="font-family: Arial"><span style="font-family: Times New Roman">&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;sitemesh&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;com.opensymphony.sitemesh.webapp.SiteMeshFilter&lt;/filter-class&gt;<br />
&lt;/filter&gt;</span></span></span></span></p>
<p><span style="font-family: 微软雅黑"><span style="font-family: Verdana"><span style="font-family: Arial"><span style="font-family: Times New Roman">&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;sitemesh&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;</span></span></span></span></p>
<p><span style="font-family: 微软雅黑">That's it! Your web-app is now setup to use SiteMesh, you can now start building decorators.</span></p>
<img src ="http://www.blogjava.net/alancxx/aggbug/333048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alancxx/" target="_blank">蜂鸟</a> 2010-09-27 13:57 <a href="http://www.blogjava.net/alancxx/articles/333048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>