<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>badqiu</title>
    <description></description>
    <link>http://badqiu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>rapid-framework v1.0.x带控制条的演示视频放出</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/230674" style="color:red;">http://badqiu.javaeye.com/blog/230674</a>&nbsp;
          发表时间: 2008年08月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>很多同学报怨rapid-framework的演示视频太快,现在提供带控制条的版本.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下载地址: <a href="http://code.google.com/p/rapid-framework/downloads/list">http://code.google.com/p/rapid-framework/downloads/list</a><a href="http://rapid-framework.googlecode.com/files/rapid-framework_quickstart_movie_for_v1.0.x.zip"></a></p>
<p>&nbsp;</p>
<p>另外很高兴上个视频的下载量突破1万,项目的下载量也超过8000<img src="../../images/smiles/icon_biggrin.gif" alt="" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/230674#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 13:28:22 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/230674</link>
        <guid>http://badqiu.javaeye.com/blog/230674</guid>
      </item>
      <item>
        <title>rapid-framework发布v1.0.2版本 </title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/227514" style="color:red;">http://badqiu.javaeye.com/blog/227514</a>&nbsp;
          发表时间: 2008年08月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>该版本主要增加的相关文档导航，及一些模板及目录的调整</p>
<p>在线文档也增加了不少内容.具体可以查看在线文档<br /><br />项目Home：　<a href="http://code.google.com/p/rapid-framework/">http://code.google.com/p/rapid-framework/</a><br /><br /><strong>rapid-framework v1.0.2 ChangeLog<br /></strong>
<p><strong>
<hr />
<br /></strong></p>
<p>&nbsp;</p>
<p>jar升级<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rapid-xsqlbuilder升级至v1.0.1,中括号[]默认自动进行toString()<br />modules/struts2修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struts/javacommon目录调整<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加ant任务文件build.xml,install-struts2命令可以快速将web框架切换至struts2<br />模板修改<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template/other/java_hibernate_xml调整目录,增加${subpackage}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struts2 的${className}Action.java实现Preparable接口<br />文档<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关键位置增加文档说明及目录增加相关readme说明<br /><br /><br /><strong>rapid-framework介绍</strong></p>
<hr />
<h3><a id="基于spring,struts(struts2),hibernate的web项目脚手架">基于spring,struts(struts2),hibernate的web项目脚手架</a> </h3>
<p>一个类似 <strong>ruby on rails</strong> 的java web快速开发脚手架,本着不重复发明轮子的原则,框架只是将零散的struts(struts2)+spring+hibernate各个组件组装好在一起,并对struts及struts2进行改造,提供零配置编程,并内置一个强大的代码生成器及模板文件, 可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp的增删改查及列表页面 <br /></p>
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/227514#comments" style="color:red;">已有 <strong>6</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Aug 2008 11:39:24 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/227514</link>
        <guid>http://badqiu.javaeye.com/blog/227514</guid>
      </item>
      <item>
        <title>动态构造sql利器:rapid-xsqlbuider 详细说明</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/224851" style="color:red;">http://badqiu.javaeye.com/blog/224851</a>&nbsp;
          发表时间: 2008年08月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h2><a name="xsqlbuilder-%E7%89%B9%E6%80%A7%E5%88%97%E8%A1%A8%3A"></a>特性列表: </h2>
<ol>
<li>动态构造sql条件语句,提供sql拼接与使用占位符两种方式 </li>
<li>数据类型的修饰 </li>
<li>对SQL注入攻击的防范 </li>
</ol>
<h2><a name="xsqlbuilder-%E9%97%AE%E9%A2%98%3A"></a>问题:</h2>
<p>手工构造SQL语句的情况</p>
<div class="code">
<div class="codeContent">
<pre class="code-java"> <pre name="code" class="java">String sql = "select * from user where 1=1 ";
String user_id = (String)filters.get("user_id");
if( user_id != null &amp;&amp; user_id.length() &gt; 0) {
   sql = sql + " and user_id = " + user_id;
}
String age = (String)filters.get("age");
if(age != null &amp;&amp; age.length() &gt; 0) {
   sql = sql + " and age &gt; " + age;
}</pre>
&nbsp;</pre>
</div>
</div>
<p>过多的if判断导致sql语句不清晰,我们再来看下rapid-xsqlbuilder的做法</p>
<h2><a name="xsqlbuilder-rapidxsqlbuilder%E6%9E%84%E9%80%A0SQL%E4%BE%8B%E5%AD%90"></a>rapid-xsqlbuilder构造SQL例子</h2>
<p>示例:</p>
<div class="code">
<div class="codeContent">
<pre name="code" class="java">// 清晰的sql语句,/~ ~/为一个语法块
 String sql= "select * from user where 1=1 " 
         + "/~ and username = {username} ~/"   
         + "/~ and password = {password} ~/";   
 
 // filters为参数
 Map filters = new HashMap();   
 filters.put("username", "badqiu"); 
 filters.put("sex", "F");  
 
 XsqlFilterResult result = new XsqlBuilder().generateHql(sql,filters);
 
 assertTrue(result.getAcceptedFilters().containsKey("username"));
 assertFalse(result.getAcceptedFilters().containsKey("sex"));
 assertEquals("select * from user where 1=1  and username = :username ", result.getXsql());
</pre>
&nbsp;</div>
</div>
<p>XsqlFilterResult为处理完返回的东西,包含两个属性xsql,acceptedFilters</p>
<h3><a name="xsqlbuilder-%E8%A2%AB%E8%BF%87%E6%BB%A4%E6%8E%89%E7%9A%84%E4%B8%9C%E8%A5%BF%3A"></a>被过滤掉的东西: </h3>
<p style="padding-left: 30px;"><strong>SQL过滤:</strong> <span style="color: #ff0000;">/~ and password = {password} ~/ </span><br />这一段由于在filters中password不存在而没有被构造出来 </p>
<p style="padding-left: 30px;"><strong>filters过滤:</strong> <span style="color: #ff0000;">sex</span><br />filters中由于没有类似<span style="color: #ff0000;">/~ sex={sex} ~/ </span>这一段,所以在过滤完的filters中不存在</p>
<h3><a name="xsqlbuilder-%E6%9C%80%E7%BB%88%E6%9E%84%E9%80%A0%E7%94%9F%E6%88%90%E7%9A%84%E7%BB%93%E6%9E%9C"></a>最终构造生成的结果</h3>
<p style="padding-left: 30px;"><strong>HQL</strong>: XsqlFilterResult.xsql属性</p>
<div class="code" style="padding-left: 30px;">
<div class="codeContent">
<pre class="code-java">select * from user where 1=1 and username=:username</pre>
</div>
</div>
<p style="padding-left: 30px;"><strong>构造后返回的Map filters</strong>: XsqlFilterResult.acceptedFilters 属性<br />username=badqiu</p>
<h2><a name="xsqlbuilder-%E8%AF%AD%E6%B3%95"></a>语法<a name="xsqlbuilder-syntax"></a></h2>
<p><strong>语法</strong></p>
<blockquote>
<p>/~ {key} ~/<br />/~ [key] ~/<br />/~ {key_1} [key_2] ... {key_3} ~/<br />/~ {key?modifier} ~/<br />/~ {key?modifier(arg1,arg2) ~/<br />/~ {key?modifier?modifier?...?modifier} ~/</p>
</blockquote>
<p><strong>示例:</strong></p>
<blockquote>
<p>/~ username = {username} ~/<br />/~ password like '%[password]%' ~/<br />/~ birthDate &gt; {startBirthDate} and birthDate &lt; [endBirthDate] ~/</p>
</blockquote>
<h3><a name="xsqlbuilder-%E6%95%B0%E6%8D%AE%E6%8D%AE%E7%B1%BB%E5%9E%8B%E4%BF%AE%E9%A5%B0"></a>数据据类型修饰<a name="xsqlbuilder-modifier"></a></h3>
<p style="padding-left: 30px;">将Map filters中的数据类型修饰为另外一种类型</p>
<blockquote style="padding-left: 30px;">
<p style="padding-left: 30px;">/~ {username} ~/<br />/~ {age?int} ~/<br />/~ {birthDate?timestamp(yyyy年MM月dd日)} ~/</p>
</blockquote>
<h3><a name="xsqlbuilder-%E4%B8%AD%E6%8B%AC%E5%8F%B7%E4%B8%8E%E5%A4%A7%E6%8B%AC%E5%8F%B7%7B%7D%E7%9A%84%E5%8C%BA%E5%88%AB"></a>中括号[]与大括号{}的区别</h3>
<p style="padding-left: 30px;"><strong>中括号会直接替换为其值,用于拼接SQL</strong><br />在XsqlFilterResult.getAcceptedFilters()中<span style="color: #ff0000;">不会存在</span>该key的值<br />如 /~ username like '%[username]%' ~/,如果filters中username=badqiu<br />则会生成: <span style="color: #ff0000;">username like '%badqiu%'</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><strong>大拓号只是起到标记作用,用于占位符</strong><br />原始方法是XsqlBuilder.applyFilters(sql,filters);<br />如"/~ and username = {username} ~/",过滤完还是为 and username = {username}<br />但在这时我们使用将{username}替换为HQL的:username或是SQL的?号</p>
<h2><a name="xsqlbuilder-SQL%E6%B3%A8%E5%85%A5%E6%94%BB%E5%87%BB%E7%9A%84%E9%98%B2%E8%8C%83"></a>SQL注入攻击的防范<a name="xsqlbuilder-safesql"></a></h2>
<p style="padding-left: 30px;"><strong>问题:</strong><br />拼接的SQL如果不对单引号(有些数据库有反斜杠)进行过滤,则会存在SQL注入攻击问题</p>
<p style="padding-left: 30px;"><strong>解决:</strong><br />使用SafeSqlProcesser,进行sql过滤</p>
<div class="code" style="padding-left: 30px;">
<div class="codeContent">
<pre name="code" class="java">XsqlBuilder builder = new XsqlBuilder(SafeSqlProcesserFactory.getMysql());
</pre>
&nbsp;</div>
</div>
<p style="padding-left: 30px;"><strong>SafeSqlProcesser其中的一个源码分析</strong></p>
<div class="code" style="padding-left: 30px;">
<div class="codeContent">
<pre name="code" class="java">/**
 * 过滤单个单引号为双引号的SafeSqlFilter&lt;p&gt;
 * 适用数据库(MS SqlServer,Oracle,DB2)
 */
public String process(String value) {
	if(value == null) return null;
	return value.replaceAll("'", "''"); // Mysql还需过滤反斜框
}
</pre>
&nbsp;</div>
<div class="codeContent">Project Home: <a href="http://code.google.com/p/rapid-xsqlbuilder/">http://code.google.com/p/rapid-xsqlbuilder/</a></div>
<div class="codeContent">最后不忘为<a href="http://code.google.com/p/rapid-framework/"><strong>rapid-framework</strong></a>宣传一下,本工具也集成在里面</div>
<div class="codeContent">rapid-framework简介:</div>
<div class="codeContent">一个类似 <strong>ruby on rails</strong> 的java web快速开发脚手架,本着不重复发明轮子的原则,框架只是将零散的struts(struts2)+spring+hibernate各个组件组装好在一起,并对struts及struts2进行改造,提供零配置编程,并内置一个强大的代码生成器及模板文件, 可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp的增删改查及列表页面 </div>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/224851#comments" style="color:red;">已有 <strong>5</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Aug 2008 09:07:23 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/224851</link>
        <guid>http://badqiu.javaeye.com/blog/224851</guid>
      </item>
      <item>
        <title>很高兴大家下载rapid-framework</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/223803" style="color:red;">http://badqiu.javaeye.com/blog/223803</a>&nbsp;
          发表时间: 2008年08月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>看到有很多人下载,心情蛮爽的,这个就是做开源最高兴的吧.</p>
<p>大家的支持,是我持续开发的动力,并且欢迎大家加入圈子<a href="http://rapidframework.group.javaeye.com/"><span style="color: #108ac6;">http://rapidframework.group.javaeye.com/</span></a></p>
<p>&nbsp;</p>
<p>再八卦一下google的china来源分析,另外javaeye的也有很多国外用户访问,证明在开发人员中的地位.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/223803#comments" style="color:red;">已有 <strong>7</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Aug 2008 11:42:55 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/223803</link>
        <guid>http://badqiu.javaeye.com/blog/223803</guid>
      </item>
      <item>
        <title>正式发布类似rails的框架:rapid-framework,文档补充中...</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/220879" style="color:red;">http://badqiu.javaeye.com/blog/220879</a>&nbsp;
          发表时间: 2008年07月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p><a id="基于spring,struts(struts2),hibernate的web项目脚手架"><strong><span><span style="text-decoration: underline;"><span style="font-size: medium; color: #006699;">基于spring,struts(struts2),hibernate的web fullstack项目脚手架</span></span></span></strong></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>一个类似 <strong>ruby on rails</strong> 的java web快速开发脚手架,本着不重复发明轮子的原则,框架只是将零散的struts(struts2)+spring+hibernate各个组件组装好在一起,并对struts及struts2进行改造,提供零配置编程,并内置一个强大的代码生成器及模板文件, 可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp的增删改查及列表页面 </p>
<p>&nbsp;</p>
<p>整个项目借鉴了ruby on rails,appfuse,springside</p>
<p>&nbsp;</p>
<p><strong><span><span style="font-size: medium;">框架特性</span></span></strong></p>
<ul>
<li>内置一个基于数据库的代码生成器<span class="nobr"><a href="http://wiki.javascud.org/display/si/rapid-generator" rel="nofollow">rapid-generator<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>,极易进行二次开发 </li>
<li><span class="nobr"><a href="http://wiki.javascud.org/display/si/struts1+struts2+zero+configuration" rel="nofollow">struts1,struts2的零配置<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span> </li>
<li><span class="nobr"><a href="http://wiki.javascud.org/display/si/spring+integration" rel="nofollow">spring集成及加强<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>,自动搜索hibernate的entity annotation class </li>
<li>集成动态构造sql的工具:<span class="nobr"><a href="http://code.google.com/p/rapid-xsqlbuilder/" rel="nofollow">rapid-xsqlbuilder<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span> </li>
<li>集成javascript表单验证:<span class="nobr"><a href="http://code.google.com/p/rapid-validation/" rel="nofollow">rapid-validation<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span> </li>
<li>集成<span class="nobr"><a href="http://wiki.javascud.org/display/si/extremeTable" rel="nofollow">extremeTable<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>列表分页组件,并简单扩展显示pageNumber </li>
<li><span class="nobr"><a href="http://wiki.javascud.org/display/si/db_unit_test" rel="nofollow">集成DBUnit及spring对数据库测试的支持<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span> </li>
<li>内置的分页查询PageInfo接口 </li>
<li>Java日期转换的<span class="nobr"><a href="http://wiki.javascud.org/display/si/date_special_handle" rel="nofollow">特殊处理<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>,与<span class="nobr"><a href="http://blog.csdn.net/my97" rel="nofollow">My97DatePicker<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>集成 </li>
<li>内置最精简的ant构建脚本,简单修改即可使用 </li>
<li>公共类库友好的包名javacommon </li>
<li>整个项目尽量做到最小集,无需删除任何资源,拿来即可使用. </li>
<li>友好的<span class="nobr"><a href="http://www.opensource.org/licenses/mit-license.php" rel="nofollow">MIT-Licence<sup><img class="rendericon" src="../../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span> </li>
</ul>
<p>&nbsp;</p>
<p>项目HOME: <a href="http://code.google.com/p/rapid-framework/"><span style="color: #006699;">http://code.google.com/p/rapid-framework/</span></a></p>
<p>&nbsp;</p>
<p>代码生成器生成的<a href="http://code.google.com/p/rapid-framework/wiki/snapshot" rel="nofollow">增删改查截图</a> </p>
<p>&nbsp;</p>
<p><a href="http://rapid-framework.googlecode.com/files/rapid-framework-quick-start-movie.zip" rel="nofollow"><strong><span style="color: #006699;">快速演示视频下载</span></strong></a> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #0000ff;"><span style="font-size: medium;"><span style="font-size: small;">rapid-framework QQ交流群 <br />群号：66514501</span></span></span></p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/220879#comments" style="color:red;">已有 <strong>14</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Jul 2008 09:11:00 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/220879</link>
        <guid>http://badqiu.javaeye.com/blog/220879</guid>
      </item>
      <item>
        <title>最适合实际开发需要的:&lt;代码生成器&gt;发布:rapid-generator-v1.0</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/217423" style="color:red;">http://badqiu.javaeye.com/blog/217423</a>&nbsp;
          发表时间: 2008年07月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h2>现阶段内置模板可以生成的包括:</h2>
<p>可以生成java的hibernat model+annotation,hibernate model+xml,dao,manager,struts+struts2 action类</p>
<p>生成jsp的增删改查.&nbsp; (生成的代码与rapid-framework绑定才比较有意义)</p>
<p>&nbsp;</p>
<h2>通常代码生成器存在的问题.</h2>
<ul>
<li>二次开发困难 </li>
<li>过于智能,自动插入我们的项目中,程序员还需考虑旧的代码会不会被覆盖的问题 </li>
<li>没有将存放模板的目录名称及文件名称利用起来,导致还需配置每个模板文件生成的文件名,目录结构<br />具体请查看我写的文章:<span class="nobr"><a href="../../blog/212881" rel="nofollow">为何代码生成器都要这么智能呢?<sup><img class="rendericon" src="../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span> </li>
</ul>
<h2>本代码生成器的特性</h2>
<ul>
<li>基于<span class="nobr"><a href="http://freemarker.sourceforge.net/" rel="nofollow">FreeMarker<sup><img class="rendericon" src="../../images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>模板语言 </li>
<li>基于数据库,并支持多种数据库(mysql,sql server,oracle测试通过) </li>
<li>半手工方式,生成的代码放在某个目录,再手工拷贝回来工作区 </li>
<li>易于做二次开发,整个生成器本身就是java源代码,源代码核心十分精简,并且鼓励你做修改代码,也可以作为任何语言的代码生成器 </li>
<li>配置简单,只有一个配置文件generator.properties </li>
<li>以application方式运行生成器,生成不同的table直接修改相关java代码即可 </li>
<li>将文件系统的目录名称及文件名称作为生成器的一部分,模板文件的的名称与目录名称可以直接引用相关变量,如 <strong><span style="color: #000000;">${basepackage}/</span><span style="color: #ff0000;">${className}.</span><span style="color: #ff0000;">java</span></strong>&nbsp; (${className}=Blog,则会生成Blog.java) </li>
<li>以@testExpression结尾的模板文件为有条件忽略,如果testExpression的值在数据模型为true则生成该文件,生成的文件不会包含@testExpression,反之则不生成该文件(应用场景:用于在是否要生成hibernate联合主建的文件中) </li>
<li>支持文件插入操作,如模板输出生成的地方已经有该同名的文件存在,并且文件中有包含"webapp-generator-insert-location"标记,则模板生成的内容会插入在该标记之后.该特性对如生成的spring配置内容插入spring配置文件十分有用 </li>
</ul>
<h2>代码生成器的运行</h2>
<ul>
<li>将generator_lib中的jar加入classpath,generator_lib自带了几种常用jdbc驱动</li>
<li>修改generator.properties的数据库连接属性及其它属性 </li>
<li>以application的方式运行GeneratorMain类,要生成不同的table,直接修改代码即可 </li>
</ul>
<pre name="code" class="java">public class GeneratorMain {
	public static void main(String[] args) throws Exception {
		Generator g = new Generator();
		
		g.clean();
		g.generateTable("blog");
//		g.generateAllTable();
	}
}</pre>
<p>&nbsp;</p>
<h2>代码template目录结构</h2>
<p><img src="http://wiki.javascud.org/download/attachments/5799976/generator_template.png" height="409" alt="代码模板目录" width="462" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>项目下载: <a href="http://code.google.com/p/rapid-generator/downloads/list">http://code.google.com/p/rapid-generator/downloads/list</a></p>
<p>项目HOME: <a href="http://code.google.com/p/rapid-generator">http://code.google.com/p/rapid-generator</a></p>
<p>本生成器也将作为<a href="http://code.google.com/p/rapid-framework/">rapid-framework</a>的一部分,即将发布,敬请关注.</p>
<p>&nbsp;</p>
<p>并且欢迎大家加入讨论组:<a href="http://rapidframework.group.javaeye.com/"><img src="http://rapidframework.group.javaeye.com/upload/logo/group/31719/20af829f-5b8a-39b3-a39e-894fd44a6e2f-thumb.png" height="27" alt="" width="48" /></a></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/217423#comments" style="color:red;">已有 <strong>8</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 09:05:02 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/217423</link>
        <guid>http://badqiu.javaeye.com/blog/217423</guid>
      </item>
      <item>
        <title>新版本发布：基于prototype的表单验证框架，现正式更加为rapid-validation</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/216000" style="color:red;">http://badqiu.javaeye.com/blog/216000</a>&nbsp;
          发表时间: 2008年07月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>javaeye现在使用的表单验证框架就是这个，现正式更名并发布新版本为rapid-validation-v1.0.0</p>
<p>&nbsp;</p>
<p>特性简介:</p>
<ul>
<li>简洁,快速的验证语法 </li>
<li>无需编写验证提示信息(当然也支持自定义提示信息) </li>
<li>错误消息在指定地方显示 </li>
<li>支持组合验证 </li>
<li>Ajax支持 </li>
<li>基于prototype.js </li>
<li>支持国际化 </li>
<li>易于扩展 </li>
<li>基于标准的Html属性(class)添加验证,易于其它标准的jsp taglib集成 </li>
<li>特殊应用场景支持,如:密码确认,结束日期必须大于开始日期 </li>
<li>完整详细的单元测试，保证框架质量 </li>
</ul>
<p>在线演示：　<a href="http://svn.javascud.org/svn/si/validation/trunk/doc/index.html">http://svn.javascud.org/svn/si/validation/trunk/doc/index.html</a></p>
<p>在线文档说明：　<a href="http://wiki.javascud.org/display/si/Javascript_RapidValidation">http://wiki.javascud.org/display/si/Javascript_RapidValidation</a></p>
<p>下载: <a href="http://code.google.com/p/rapid-validation/downloads/list">http://code.google.com/p/rapid-validation/downloads/list</a></p>
<p>&nbsp;</p>
<p>本人的另一作品<a href="http://code.google.com/p/rapid-framework/">rapid-framework</a>既然发布，本验证表单也将集成在里面,敬请期待</p>
<p>并且欢迎大家加入圈子讨论</p>
<p><a href="http://rapidframework.group.javaeye.com/">http://rapidframework.group.javaeye.com/</a></p>
<p>&nbsp;</p>
<p>最后感谢Ivan Li的贡献.</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/216000#comments" style="color:red;">已有 <strong>33</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Jul 2008 09:22:27 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/216000</link>
        <guid>http://badqiu.javaeye.com/blog/216000</guid>
      </item>
      <item>
        <title>为何代码生成器都要这么智能呢?</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/212881" style="color:red;">http://badqiu.javaeye.com/blog/212881</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在的代码生成器生成的代码文件都会<span style="color: red"><strong>自动插出</strong></span>在我们的项目中,为何不提供一个将生成的文件生成在硬盘某个目录下,再由我们<span style="color: red"><strong>手工copy</strong></span>回来工作区? <br /><br />这样可以避免开发人员需要考虑文件会不会被<span style="color: red"><strong>覆盖</strong></span>的问题.并且手工的动作很快,也不容易出错.<br /><br />本人编写了的一个基于数据库的代码生成器,就是要解决上面提到的问题,可以生成Hibernate Model,Dao,Manager,Struts/Struts2 Action,JSP页面(增删改查及列表页面,表单验证),以下为代码生成器相关特性<br /><ul><li>以application方式运行生成器,代码即是配置.</li><li>将文件系统的目录名称及文件名称作为生成器的一部分,模板文件的的名称与目录名称可以直接引用相关变量,如<span style="color: red">${basepackage}/${className}.java</span> (${className}=Blog,则会生成Blog.java)</li><li>以@testExpression结尾的模板文件为有条件忽略,如果testExpression的值在数据模型为true则生成该文件,生成的文件不会包含@testExpression,反之则不生成该文件(应用场景:用于在是否要生成hibernate联合主建的文件中)</li><li>支持文件插入操作,如模板输出生成的地方已经有该同名的文件存在,并且文件中有包含"webapp-generator-insert-location"标记,则模板生成的内容会插入在该标记之后该特性对如生成的spring配置内容插入spring配置文件十分有用</li></ul><br /><br />生成器入口<br /><pre name="code" class="java">
	public static void main(String[] args) throws Exception {
		Generator g = new Generator();
		
		g.clean();
		g.generateTable("blog");
//		g.generateAllTable();
	}
</pre>	<br /><br />这里是上一篇[搞不明白],被移至入门区了<br /><a href="http://www.javaeye.com/topic/212867" target="_blank">[搞不明白]直接在Action中返回forward不好么</a><br /><br />搞完了[搞不明白],会发布一个应用开发框架,提供类似rails的基于url确定action访问的零配置快速编程,自带一个代码生成器,已经完成的组合基于struts+spring+hibernate,struts2+spring+hibernate.
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/212881#comments" style="color:red;">已有 <strong>32</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 22:58:32 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/212881</link>
        <guid>http://badqiu.javaeye.com/blog/212881</guid>
      </item>
      <item>
        <title>直接在Action中返回forward不好么</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/212867" style="color:red;">http://badqiu.javaeye.com/blog/212867</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如果在配置文件中写Action执行完的跳转的路径,那么在编写Action Java代码的时候还需要切换至配置文件才能知道action转向那个页面,直接写在Action中不好么?<br />依照这种并且结合struts1,struts2的零配置,已经在多个项目中应用,也没发现问题<br /><br /><br />struts1中我的做法是<br /><pre name="code" class="java">
	public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {
	         //......
		return new ActionForward("/demo/Blog/edit.jsp");
	}
</pre><br />struts1中自己另外做了扩展,可以将action的name作为formBean的配置,整个项目的struts-config配置只有下面这么一段话,path举例/admin/User/delete.do<br /><pre name="code" class="xml">
	&lt;action-mappings>
		&lt;action path="/*/*/*"
			type="com.kingsoft.{1}.web.action.{2}Action"
			name="com.kingsoft.{1}.web.form.{2}Form" scope="request"
			validate="false" parameter="{3}" attribute="{2}Form">
		&lt;/action>
	&lt;/action-mappings>
</pre><br /><br /><br /><br />struts2中自己另外做了扩展,实现forward的做法是<br /><pre name="code" class="java">
	/**进入更新页面*/
	public String edit() {
		blog = (Blog)blogManager.getById(id);
		return "/demo/Blog/edit.jsp";
	}
</pre><br /><br />struts2中实现redirect的做法是,前面增加了一个"!"号<br /><pre name="code" class="java">
	/**保存更新*/
	public String update() {
		blogManager.update(this.blog);
		return "!/demo/Blog/list.action";
	}
</pre><br /><br />struts2增加了direct的返回类型,struts.xml配置也只有一段话<br /><pre name="code" class="xml">
    &lt;package name="default" namespace="/demo" extends="custom-default">
        &lt;action name="*/*" method="{2}" class="com.kingsoft.demo.action.{1}Action">
           &lt;result name="*" type="direct">通过Action直接返回&lt;/result>
        &lt;/action>		
    &lt;/package>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/212867#comments" style="color:red;">已有 <strong>3</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 22:03:37 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/212867</link>
        <guid>http://badqiu.javaeye.com/blog/212867</guid>
      </item>
      <item>
        <title>无法访问的sourceforge的可以通过google搜索下载文件</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/211359" style="color:red;">http://badqiu.javaeye.com/blog/211359</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在google搜索中输入：<br />site:mirror.optus.net/sourceforge projectName<br /><br />projectName换成你要下载的项目名称
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/211359#comments" style="color:red;">已有 <strong>6</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 09:57:54 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/211359</link>
        <guid>http://badqiu.javaeye.com/blog/211359</guid>
      </item>
      <item>
        <title>rapid系列:发布一款动态构造sql的工具: XsqlBuilder</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/210831" style="color:red;">http://badqiu.javaeye.com/blog/210831</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          XsqlBuilder用于可以动态构造sql语句,避免在构造sql时使用过多的 if 判断,与SafeSqlProcesser集成提供防止sql注入攻击,与DataModifier集成完成数据类型的转换 <br /><br /><br /><strong><span style="font-size: large">动态构造sql示例:</span> </strong><br /><br /><pre name="code" class="java">   
       String xsql = "select * from user where 1=1
                /~ and username = {username} ~/
                /~ and password = {password} ~/
                /~ and age = [age] ~/
                /~ and sex = [sex] ~/"

        Map filters = new HashMap();
        filters.put("username", "badqiu");
        filters.put("age", "12");
        filters.put("sex", "");

        XsqlFilterResult result = xsqlBuilder.applyFilters(xsql,filters);
</pre><br /><br />         <br /><strong><span style="font-size: large">构造生成的结果result.getXsql()将会等于</span></strong><br /><br /><pre name="code" class="sql">select * from user where 1=1 and username={username} and age=12</pre><br /><br /><strong><span style="font-size: large">被过滤删除的段:</span></strong><br />       <span style="color: red">/~ and password = {password} ~/</span>这一段由于在filters中password不存在而没有被构造出来<br />        <span style="color: red">/~ and sex = [sex] ~/</span>由于sex的值为空串也没有被构造出来<br /><br /><br /><br /><strong><span style="font-size: large">最后result.acceptedFilters值</span></strong><br /><br /><br /><pre name="code" class="java">
Map acceptedFilters = result.getAcceptedFilters();
会等于:
{username=badqiu}
</pre><br /><br /> <br /><strong><span style="font-size: large">相关符号介绍:</span></strong><br /><br />       /~ segment... ~/ 为一个条件代码块<br />        {key} 过滤器中起标记作用的key,作为后面可以替换为sql的?,或是hql的:username标记<br />        [key] 将直接替换为key value<br /><br /><br /><strong><span style="font-size: large">数据类型转换示例:</span></strong> <br /><br />select * from user where and 1=1 /~ age={age?int} ~/<br /> 将会将Map filters中key=age的值转换为int类型<br /><br />项目地址:<a href="http://code.google.com/p/rapid-xsqlbuilder/" target="_blank">http://code.google.com/p/rapid-xsqlbuilder/</a><br /><br />下载地址:<a href="http://rapid-xsqlbuilder.googlecode.com/files/xsqlbuilder-1.0.zip" target="_blank">http://rapid-xsqlbuilder.googlecode.com/files/xsqlbuilder-1.0.zip</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/210831#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 23:25:10 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/210831</link>
        <guid>http://badqiu.javaeye.com/blog/210831</guid>
      </item>
      <item>
        <title>为公司做的关于Junit单元测试的讲座PPT</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/206174" style="color:red;">http://badqiu.javaeye.com/blog/206174</a>&nbsp;
          发表时间: 2008年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: large"><strong>讲解内容:</strong></span><br /><br /><ul><li>测试技术介绍</li><li>JUnit3.8单元测试及实例</li><li>单元测试最佳实践</li><li>Mock Objects技术</li><li>JUnit相关工具及其扩展</li><li>Spring对测试的支持</li><li>JUnit4.0介绍</li><li>测试驱动开发（TDD）</li></ul>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/206174#comments" style="color:red;">已有 <strong>8</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Jun 2008 12:57:43 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/206174</link>
        <guid>http://badqiu.javaeye.com/blog/206174</guid>
      </item>
      <item>
        <title>&lt;转载&gt;雷锋精神害国害民</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/157409" style="color:red;">http://badqiu.javaeye.com/blog/157409</a>&nbsp;
          发表时间: 2008年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          可能很多人看了这个标题就会进来骂,我请这些人认真看完后再骂.如果您认真看完了还认为我说得不对,那么您随便骂. 我没别的意思 只希望纠正国人过于高尚的道德观. <br />　　 <br />　　 先讲一个小故事,可能大家更容易理解.这个故事不是我编的,论语里面有: <br />　　 <br />　　 “那是春秋时期，鲁国制定了一道法律，如果鲁国人在外国看见同胞被卖为奴婢，只要他们肯出钱把人赎回来，那么回到鲁国后，国家就会给他们以赔偿和奖励。这道法律执行了很多年，很多流落他乡的鲁国人因此得救，因此得以重返故国。” <br />　　 <br />　　“后来孔子有一个弟子叫子贡，他是一个很有钱地商人，他从国外赎回来了很多鲁国人，但却拒绝了国家的赔偿，因为他自认为不需要这笔钱，情愿为国分担赎人地负累。” <br />　　 <br />　　 <br />　　 “但孔子却大骂子贡不止，说子贡此举伤天害理。祸害了无数落难的鲁国同胞。” <br />　　 <br />　　 孔子说:世上万事，不过义、利二字而已，鲁国原先的法律，所求的不过是人们心中的一个‘义’字，只要大家看见落难的同胞时能生出側隐之心、只要他肯不怕麻烦去赎这个人、去把同胞带回国，那他就可以完成一件善举。事后国家会给他补尝和奖励。让这个行善举的人不会受到损失，而且得到大家的赞扬，长此以往，愿意做善事的人就会越来越多。所以这条法律是善法。” <br />　　 <br />　　 <br />　　 <br />　　“圣人还说，子贡的所作所为，固然让他为自己赢得了更高的赞扬，但是同时也拔高了大家对‘义’的要求。往后那些赎人之后去向国家要钱的人，不但可能再也得不到大家的称赞，甚至可能会被国人嘲笑，责问他们为什么不能像子贡一样为国分忧。圣人说，子贡此举是把‘义’和‘利’对立起来了，所以不但不是善事，反倒是最为可恶的恶行。” <br />　　 <br />　　自子贡之后，很多人就会对落难的同胞装做看不见了。因为他们不像子贡那么有钱，而且如果他们求国家给一点点补偿的话反而被人唾骂。很多鲁国人因此而不能返回故土. <br />　　 <br />　　 故事讲完了, 大家也明白了些把,大家每年都在学雷锋做好事,自己其实都没有意识到，你们要做地就是子贡已经做过的事。国人把道德抬得太高,要求每个做好事的人都是雷锋.都无私,都不能求回报,都不能留姓名,结果做好事的人越来越少. <br />　　 <br />　　 很多人都想不通中国的教育, 为什么从小学起就开始学雷锋做好事,在这样高尚的教育下为什么孩子长大了没几个成为新的雷锋呢? <br />　　 <br />　　 大家都在讨论一个话题,为什么中国人喜欢当看客, 看见有人落水了没几个人跳下去去救?报纸上经常写的某某地区 某个桥上一百多人眼看着人淹死.怎么没人救啊,然后就开始批判国人道德沦丧啊 人心不古啊 都是资本主义进来才这样啊...或是鼓吹外国人怎么怎么高尚啊,在外国丢了钱包去pol.ice局很快就可以找到啊, 中国人素质如何如何之类的话题. 如果反映不怎么热,就回那日本说事 说日本人怎么怎么高尚啊 日本三日游 日本人有素质之类的话题,希望借此提高国人素质. 我看用不了多长时间就有人讨论韩国人怎么怎么样有素质之类的话题了.因为韩国2007年已经成为发达国家了嘛.按照国人的观点发达国家肯定比中国人有素质. <br />　　 <br />　　很多话讨论太多了,已经有点麻木了. <br />　　 <br />　　为什么中国人喜欢当看客?为什么落水抢劫之类的事情,一堆人看没人愿意帮助? <br />　　 <br />　　为什么中国很多企业家捐款还被人骂? <br />　　 <br />　　 <br />　　为什么做了好事留了姓名或得到了回报会被骂呢? <br />　　 <br />　　假如一个人做了好事比如救了落水儿童之类的事情留下了姓名并得了一点点奖赏,大家不去骂他 不去按照雷锋的道德水平去要求他.而是把他当英雄一样对待.对于他得了一点点奖励也表示赞同.那么我想做好事救落水儿童人会多许多许多. <br />　　 <br />　　那些给社会捐款的企业家,大家只要不去怀疑他做秀 做广告,而是把他当大善人一样去宣传去崇拜,那么捐款的企业家一定比现在多许多许多. <br />　　 <br />　　中国偶尔出现的一两个活雷锋救不了那么多落水儿童,检不了无数丢失的钱包. 大家越是宣扬雷锋精神 越是表扬某某某做了好事不求回报, 那么愿意做好事的人只会越来越少. 因为中国人把善要求得太高太高太高. <br />　　 <br />　　在这里我不想反对雷锋精神,因为那肯定是错的,雷锋当然是好人, 但是如果想让更多的人做好事,必须认同做好事求回报的行为,不光是认同 还要赞美他. <br />政府如果出台一个法律 鼓励救一个人奖励1万元 那么会出现100多人在桥上看人淹死的事情吗? 你说1万太高了 那么1000元 100元 50元总可以把? <br />　　 <br />　　 重要不是政府有没有这个法律 重要的是国人怎么看得到回报的这个救人的人. <br />　　 <br />　　而现在中国的事实就是如果人拿了别人的回报就会被指责 就会被国人看不起 甚至比站在一旁参观还恶劣.于是大家都不如站在一边看别人淹死把. 这就是国人成看客的原因,不是中国人冷漠,是过于高尚的道德枷锁限制了道德的发展.
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/157409#comments" style="color:red;">已有 <strong>9</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Jan 2008 17:44:41 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/157409</link>
        <guid>http://badqiu.javaeye.com/blog/157409</guid>
      </item>
      <item>
        <title>大家快去下载firebug1.0 beta2吧</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/37676" style="color:red;">http://badqiu.javaeye.com/blog/37676</a>&nbsp;
          发表时间: 2006年12月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          firebug绝对是javascript调试工具的王者,并且新版本中提供了一个Firebug Lite的js包,<br />使其它浏览器上也具有console功能,从此抛开其它的javascript logger工具吧!!<br /><br />以下是Firebug Lite的简单使用方法<br /><pre name="code" class="java">
&lt;!-- 通过这里设置debug="true"也可打开控制台-->
&lt;html debug="true">
&lt;head>
&lt;script language="javascript" type="text/javascript" src="firebug/firebug.js">&lt;/script>
&lt;script>
	console.debug('debug');
	console.info('info');
	console.warn('warn');
	console.error('error');
&lt;/script>
&lt;/head>
&lt;body>
&lt;input type="button" onclick="console.open()" value="打开控制台"/>
&lt;/body>
&lt;/html>
</pre><br /><br />firebug新版本通过Firefox的自动更新还不能下载,需要至官方网站下载<br /><a href="http://www.getfirebug.com/" target="_blank">http://www.getfirebug.com/</a><br /><br />附件为firebug lite的例子
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/37676#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Dec 2006 20:51:08 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/37676</link>
        <guid>http://badqiu.javaeye.com/blog/37676</guid>
      </item>
      <item>
        <title>关于JavaScript的gzip静态压缩方法 </title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/37176" style="color:red;">http://badqiu.javaeye.com/blog/37176</a>&nbsp;
          发表时间: 2006年12月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          传统的JS压缩(删除注释,删除多余空格等)提供的压缩率有时还是不尽不意,幸亏现在的浏览器都支持压缩传输(通过设置http header的Content-Encoding=gzip),可以通过服务器的配置(如apache)为你的js提供压缩传输,或是appfuse中使用的GZipFilter使tomcat也提供这种能力<br /><br />现在的问题是这种动态的压缩会导致服务器CPU占用率过高,现在我想到的解决辨法是通过提供静态压缩(就是将js预先通过gzip.exe压缩好)<br /><br />一.下面描述在tomcat中的应用<br /><br />1.将prototype.js通过gzip.exe压缩保存成prototype.gzjs<br />2.设置header,我编写了一个简单的AddHeadersFilter来将所有以gzjs结尾的文件增加设置header Content-Encoding=gzip<br />web.xml中的配置<br /><pre name="code" class="java">
	&lt;filter>
		&lt;filter-name>AddHeaderFilter&lt;/filter-name>
		&lt;filter-class>
			badqiu.web.filter.AddHeaderFilter
		&lt;/filter-class>
		&lt;init-param>
			&lt;param-name>headers&lt;/param-name>
			&lt;param-value>Content-Encoding=gzip&lt;/param-value>
		&lt;/init-param>
	&lt;/filter>

	&lt;filter-mapping>
		&lt;filter-name>AddHeaderFilter&lt;/filter-name>
		&lt;url-pattern>*.gzjs&lt;/url-pattern>
	&lt;/filter-mapping>
</pre><br /><br />测试prototype.js是否正常的代码<br /><pre name="code" class="java">
&lt;html>
&lt;head>
&lt;!-- type="text/javascript"不可少,有些浏览器缺少这个不能运行,具体已经忘记了 -->
&lt;script src="prototype.gzjs" type="text/javascript">&lt;/script>
&lt;/head>
&lt;body>
	&lt;input id="username" name="username" value="badqiu"/>&lt;br />
	&lt;input id="email" value="badqiu@gmail.com"/>
&lt;script>
	&lt;!-- 测试prototype的方法是否正常-->
	alert($F('username'))
&lt;/script>
&lt;/body>
&lt;/html>
</pre><br /><br />在Apache httpd中可以直接通过在httpd.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header<br /><br />二.相关压缩率数据<br />1. prototype.js 1.5.0_rc0原始大小56KB,未经任何处理直接使用gzip压缩为12KB,总压缩率79%<br />2. 通过js压缩工具压缩过的protytype.js为20KB,使用gzip压缩为10KB,总压缩率为83%<br />3. 实际项目中的多个js合并成的文件 439KB,直接通过gzip压缩为85KB,总压缩率81%<br />4. 439KB经过js压缩为165KB,再经过gzip压缩为65KB,总压缩率86%<br /><br />基本上你都可以忽略js压缩工具的压缩率,直接使用gzip压缩<br /><br />gzip下载地址 <a href="http://www.gzip.org" target="_blank">http://www.gzip.org</a><br />tomcat的压缩配置示例下载地址: <a href="http://www.blogjava.net/Files/badqiu/gziptest.rar" target="_blank">http://www.blogjava.net/Files/badqiu/gziptest.rar</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/37176#comments" style="color:red;">已有 <strong>12</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Dec 2006 22:57:03 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/37176</link>
        <guid>http://badqiu.javaeye.com/blog/37176</guid>
      </item>
      <item>
        <title>转&quot;Common misconceptions about paired programming&quot;</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/32577" style="color:red;">http://badqiu.javaeye.com/blog/32577</a>&nbsp;
          发表时间: 2006年11月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.infoq.com/news/2006/11/paired-progrmaming-myths" target="_blank">Common misconceptions about paired programming</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/32577#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 06 Nov 2006 09:56:19 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/32577</link>
        <guid>http://badqiu.javaeye.com/blog/32577</guid>
      </item>
      <item>
        <title>一条SQL查回整棵树</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/32260" style="color:red;">http://badqiu.javaeye.com/blog/32260</a>&nbsp;
          发表时间: 2006年11月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
DROP TABLE IF EXISTS tree;
/*
tree_level表示树的等级,使用两位表示一级(两位一般可以满足应用,如果不够,你可以使用3位或4位表示一级)
示例: 01为一级,则01的下一级节点为0101,0102,01XX,三级则表示为0101XX,
*/

CREATE TABLE tree (
	id int(11) NOT NULL auto_increment,
	tree_level varchar(11) default NULL,
	PRIMARY KEY (id)
);
</pre><br /><br /><pre name="code" class="java">
--测试数据
INSERT INTO tree VALUES (1, '01');
INSERT INTO tree VALUES (2, '0101');
INSERT INTO tree VALUES (3, '0102');
INSERT INTO tree VALUES (4, '010101');
INSERT INTO tree VALUES (5, '010102');
INSERT INTO tree VALUES (6, '02');
INSERT INTO tree VALUES (7, '0201');
INSERT INTO tree VALUES (8, '0202');
INSERT INTO tree VALUES (9, '020101');
INSERT INTO tree VALUES (10,'020102');
INSERT INTO tree VALUES (11,'020201');
</pre><br /><br /><pre name="code" class="java">
--查找01的所有子节点
select * from tree where tree_level like '01%';

--查找'010101' 的所有父节点
select * from tree where '010101' like concat(tree_level,'%');
</pre><br />性能问题? :),你的树一般不会很深吧,使用两位也是考虑一般足够使用,加上索引,应该不差
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/32260#comments" style="color:red;">已有 <strong>6</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 02 Nov 2006 22:13:57 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/32260</link>
        <guid>http://badqiu.javaeye.com/blog/32260</guid>
      </item>
      <item>
        <title>扩展基于prototype的validation.js</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/30962" style="color:red;">http://badqiu.javaeye.com/blog/30962</a>&nbsp;
          发表时间: 2006年10月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          validation.js是一个基于prototype表单前端验证工具,与其它库相比,简单易用.<br />下面是对validation的介绍<br /><a href="http://tetlaw.id.au/view/blog/really-easy-field-validation-with-prototype/" target="_blank">http://tetlaw.id.au/view/blog/really-easy-field-validation-with-prototype/</a><br />ajax<br /><a href="http://ajax.org/space/start/2006-05-15/2" target="_blank">http://ajax.org/space/start/2006-05-15/2</a><br /><a href="http://ajax.org/space/start/2006-05-22/1" target="_blank">http://ajax.org/space/start/2006-05-22/1</a><br /><br />以下是对其做的扩展.<br /> * 新增验证:<br /> * 增加min-value-number验证,例: 最小值为10.1 = min-value-10.1<br /> * 增加max-value-number验证,例: 最大值为-100.1 = min-value--100.1<br /> * 增加长度范围validate-length-range-minLength-maxLength验证,例: 最小长度为1,最大长度为10 = validate-length-range-1-10<br /> * 增加整型数字范围validate-int-range-minValue-maxValue验证,例: 5至20 = validate-int-range-5-20<br /> * 增加浮点数字范围validate-float-range-minValue-maxValue验证,例: -1.1至10 = validate-float-range--1.1-10<br /> * 增加min-length-number验证,例: 最小长度为10 = min-length-10<br /> * 增加max-length-number验证,例: 最大长度为10 = max-length-10<br /> * 增加文件类型 validate-file-type1-type2-typeX 的验证,例: validate-file-zip-png-jpeg 将验证文件是否为zip,png,jpeg格式之一<br /> * 增加中文日期验证 validate-date-cn<br /> * 增加相等验证validate-equals-item1-item2-itemX,判断输入的值为[item1,item2,itemX]之一<br /> * <br /> * 修改记录:<br /> * 增加Validation._getInputValue() 取代$F()方法以对file input进行验证<br /> * 修正Validation.isVisible() 中while循环中elm可能不存在为空的问题<br /> * 增加ValidationFactory for cache<br /> * 修改Validation.get()方法使用indexOf()的匹配模式,以适应可以通过class传递参数<br /> * 修改errorMsg可由方法返回<br /><br />min-length-number,max-length-number,validate-file-xx1的实现机制主要是直接使用className作为参数传递,再在验证方法中抽取max-length-number的number作为参数使用
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/30962#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Oct 2006 17:58:00 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/30962</link>
        <guid>http://badqiu.javaeye.com/blog/30962</guid>
      </item>
      <item>
        <title> Ajax based login using Acegi</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/30894" style="color:red;">http://badqiu.javaeye.com/blog/30894</a>&nbsp;
          发表时间: 2006年10月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://jroller.com/page/sjivan?entry=ajax_based_login_using_aceci" target="_blank">http://jroller.com/page/sjivan?entry=ajax_based_login_using_aceci</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/30894#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Oct 2006 09:45:23 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/30894</link>
        <guid>http://badqiu.javaeye.com/blog/30894</guid>
      </item>
      <item>
        <title>AJAX开发中常用的Firefox Plugins</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://badqiu.javaeye.com/blog/30208" style="color:red;">http://badqiu.javaeye.com/blog/30208</a>&nbsp;
          发表时间: 2006年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          IE Tab : 在Firefox中使用IE,避免IE/Firefox经常切换的问题<br />Web Developer : 可动态调整CSS,查看页面信息,查看表单等等<br />XPath Checker : 调试XPath使用<br />Firebug : JavaScript调试的王者,比Venkmen JavaScript Debuger好用多了<br />Selenium IDE : Web功能测试工具,可以模拟手工输入表单并提交等动作,并验证提交的结果
          <br/><br/>
          <span style="color:red;">
            <a href="http://badqiu.javaeye.com/blog/30208#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Oct 2006 14:47:30 +0800</pubDate>
        <link>http://badqiu.javaeye.com/blog/30208</link>
        <guid>http://badqiu.javaeye.com/blog/30208</guid>
      </item>
  </channel>
</rss>