<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>leondu</title>
    <description>学以致用。</description>
    <link>http://leondu.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>JE的家长们，出来show宝宝啦</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/149376" style="color:red;">http://leondu.javaeye.com/blog/149376</a>&nbsp;
          发表时间: 2007年12月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          圣诞、元旦，大家把自家的宝贝蛋蛋拿出来show show吧，呵呵。<br />
<br />
<font color="#0000ff"><strong>叔叔阿姨圣诞快乐~</strong></font><br />
<br />
<img src="http://fleet1.footbig.com/111/m/20/12/2012f95fa22f81008945437a9bbb0ebc-4065.jpg" alt="" /><br />
<br />
<strong><font color="#0000ff"><br />
小三口 </font></strong><br />
<img src="http://fleet1.footbig.com/111/m/ea/54/ea547b44022ab3ca9656fef622d3da99-5900.jpg" alt="" /><br />
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/149376#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Dec 2007 12:10:06 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/149376</link>
        <guid>http://leondu.javaeye.com/blog/149376</guid>
      </item>
      <item>
        <title>让Netbeans也拥有缤纷颜色---Dark Pastels配色方案</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/129996" style="color:red;">http://leondu.javaeye.com/blog/129996</a>&nbsp;
          发表时间: 2007年10月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          netbeans的拥趸可能一直羡慕textmate的配色吧，虽然以前也有一款叫做city lights的配色方案，但是搞笑的是这个方案的常量竟然前景色和背景色都是黑色，简直是暗夜里的乌鸦 -__-<br />
<br />
现在终于有一款好看、实用的配色方案出现了，<a href="http://nullcreations.net/">Jerrett Taylor</a>的&quot;Dark Pastels&quot;，具体看下面的截图，这款配色方案已经集成在最新的持续集成版本中（ <a href="http://deadlock.netbeans.org/hudson/job/ruby/">http://deadlock.netbeans.org/hudson/job/ruby/</a>）,beta1以及其他版本用户可以按照以下方法安装：<br />
下载地址：<a href="http://mediacast.sun.com/share/tor/org-netbeans-modules-ruby-themes.nbm">here</a><br />
安装：Tools | Plugins (go to the Downloaded tab)<br />
使用：Tools | Options | &quot;Fonts and Colors&quot; | &quot;Dark Pastels&quot; .<br />
<br />
<br />
原文：http://blogs.sun.com/tor/entry/ruby_screenshot_of_the_week19<br />
<br />
<p> A lot of people have asked for a &quot;dark color theme&quot; for NetBeans, possibly because there are several attractive dark color schemes for TextMate, a favorite editor among many Ruby developers. <a href="http://nullcreations.net/">Jerrett Taylor</a> has designed and contributed a great dark color theme for NetBeans, &quot;Dark Pastels&quot;. I've wrapped it up as a plugin. As of today, it's prebundled with the continuous builds on <a href="http://deadlock.netbeans.org/hudson/job/ruby/">http://deadlock.netbeans.org/hudson/job/ruby/</a>, but for other versions such as beta1 and the upcoming beta2, you can download the plugin from <a href="http://mediacast.sun.com/share/tor/org-netbeans-modules-ruby-themes.nbm">here</a> and install via Tools | Plugins (go to the Downloaded tab). It should hopefully also appear on the Auto Update center pretty soon. </p>
<p>To switch to this color theme after installing the plugin, open the options dialog, go to &quot;Fonts and Colors&quot; and choose the &quot;Dark Pastels&quot; color theme. </p>
<p> Let's get on to the screenshots! Here's a Ruby file: </p>
<p> <img src="http://blogs.sun.com/tor/resource/dark-pastels-ruby.png" alt="" /> </p>
<p> ...and here's an RHTML file: </p>
<p> <img src="http://blogs.sun.com/tor/resource/dark-pastels-rhtml.png" alt="" /> </p>
<p>Note that the plugin only replaces the editor colors. Other windows such as the navigator and project views keep the general look and feel of the whole application, so you can either slide these off to the side, or install a custom look and feel with colors more to your liking. </p>
<p>Here's what the plugin looks like in the Plugin Manager. As you can see I've named it &quot;Extra Themes&quot; such that it can hold several optional themes, so if you've got a color scheme to share, please do! </p>
<p> <img src="http://blogs.sun.com/tor/resource/dark-pastels-plugin.png" alt="" /> </p>
<p> A huge thanks to Jerrett! </p>
<p>P.S. The theme the font to &quot;Monaco&quot;, which is available on the Mac. If you're on a different platform you may want to go a tweak the default font to one that looks good on your system. </p>
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/129996#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 09 Oct 2007 09:34:04 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/129996</link>
        <guid>http://leondu.javaeye.com/blog/129996</guid>
      </item>
      <item>
        <title>rails集成extjs</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/124044" style="color:red;">http://leondu.javaeye.com/blog/124044</a>&nbsp;
          发表时间: 2007年09月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          rails集成extjs<br />
<br />
<br />
原文见：http://extjs.com/tutorial/using-ext-grid-ruby-rails<br />
E文好的就直接看吧。<br />
<br />
<ol>
    <li>下载extjs，将需要的文件放到对应的文件夹（具体需要的文件见第二步的列表）</li>
    <li>在layout中加入javascript引用<br />
    <br />
    <blockquote>
    <pre><code></code><div class="code_title">java 代码</div><div class="dp-highlighter"><br /><ol class="dp-j" start="1"><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;stylesheet_link_tag&nbsp;<span class="string">&quot;../javascripts/ext/resources/css/ext-all.css&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;javascript_include_tag&nbsp;<span class="string">&quot;ext/adapter/prototype/prototype.js&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;javascript_include_tag&nbsp;<span class="string">&quot;ext/adapter/prototype/scriptaculous.js&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;javascript_include_tag&nbsp;<span class="string">&quot;ext/adapter/prototype/effects.js&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;javascript_include_tag&nbsp;<span class="string">&quot;ext/adapter/prototype/ext-prototype-adapter.js&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;javascript_include_tag&nbsp;<span class="string">&quot;ext/ext-all-debug.js&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;%=&nbsp;yield&nbsp;%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></span></li></ol></div><br /></pre>
    </blockquote></li>
    <li>在view中增加显示grid的div<br />
    <blockquote>
    <pre><code></code><div class="code_title">java 代码</div><div class="dp-highlighter"><div class="bar">&nbsp;</div><ol class="dp-j" start="1"><li class="alt"><span><span>&lt;%=&nbsp;javascript_include_tag&nbsp;</span><span class="string">&quot;grid-paging.js&quot;</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;div&nbsp;id=<span class="string">&quot;movies_grid&quot;</span><span>&nbsp;style=</span><span class="string">&quot;border:5px&nbsp;solid&nbsp;#99bbe8;&nbsp;overflow:hidden;&nbsp;width:650px;&quot;</span><span>&gt;&lt;/div&gt;&nbsp;&nbsp;</span></span></li></ol></div></pre>
    </blockquote></li>
</ol>
4.使用javascript搭建一个grid<code><br />
</code>url:&nbsp;'/movie/grid_data' 指定了数据源
<li>
<pre><code><span><span></span></span></code><code><span><span>Ext.grid.Grid('movies_grid'... 则指定了grid出现在哪个div中。</span></span></code></pre>
<br />
<blockquote>
<pre><code></code><div class="code_title">java 代码</div><div class="dp-highlighter"><div class="bar">&nbsp;</div><ol class="dp-j" start="1"><li class="alt"><span><span>var&nbsp;grid;&nbsp;&nbsp;</span></span></li><li class=""><span>var&nbsp;ds;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>Ext.onReady(function(){&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;init_grid();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>});&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>function&nbsp;init_grid()&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ds&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.Store({&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.HttpProxy({url:&nbsp;'/movie/grid_data'}),&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.data.JsonReader({&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root:&nbsp;'Movies',&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalProperty:&nbsp;'Total',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;'id'&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;[&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;'title',&nbsp;mapping:&nbsp;'title'},&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;'plot',&nbsp;mapping:&nbsp;'plot'},&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;'release_year',&nbsp;mapping:&nbsp;'date'},&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;'genre',&nbsp;mapping:&nbsp;'genre'},&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;'mpaa',&nbsp;mapping:&nbsp;'mpaa'},&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;'directed_by',&nbsp;mapping:&nbsp;'directed_by'}&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;turn&nbsp;on&nbsp;remote&nbsp;sorting</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remoteSort:&nbsp;<span class="keyword">true</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cm&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.grid.ColumnModel&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;([{&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;'title',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header:&nbsp;<span class="string">&quot;Title&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex:&nbsp;'title',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;<span class="number">250</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header:&nbsp;<span class="string">&quot;Release&nbsp;Year&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex:&nbsp;'release_year',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;<span class="number">75</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header:&nbsp;<span class="string">&quot;MPAA&nbsp;Rating&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex:&nbsp;'mpaa',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;<span class="number">75</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header:&nbsp;<span class="string">&quot;Genre&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex:&nbsp;'genre',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;<span class="number">100</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},{&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header:&nbsp;<span class="string">&quot;Director&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex:&nbsp;'directed_by',&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;<span class="number">150</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}]);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;cm.defaultSortable&nbsp;=&nbsp;<span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;grid&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.grid.Grid('movies_grid',&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:&nbsp;ds,&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm:&nbsp;cm,&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selModel:&nbsp;<span class="keyword">new</span><span>&nbsp;Ext.grid.RowSelectionModel({singleSelect:</span><span class="keyword">true</span><span>}),&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoExpandColumn:&nbsp;'title'&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;grid.render();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;ds.load({params:{start:<span class="number">0</span><span>,&nbsp;limit:</span><span class="number">20</span><span>}});&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li></ol></div>&nbsp;</pre>
</blockquote></li>
<li><blockquote>
<pre>5.实现服务器端<br /></pre>
</blockquote></li>
<li> list方法只是为了显示list.rhtml，其实也可以不写，<code><span>grid_data才是真正的幕后英雄，注意其中的render方法直接返回text，不使用layout</span></code>。<br />
<blockquote>
<pre><code></code><div class="code_title">java 代码</div><div class="dp-highlighter"><div class="bar">&nbsp;</div><ol class="dp-j" start="1"><li class="alt"><span><span class="keyword">class</span><span>&nbsp;MovieController&nbsp;&lt;&nbsp;ApplicationController&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;list&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Called&nbsp;from&nbsp;the&nbsp;list&nbsp;page&nbsp;to&nbsp;get&nbsp;the&nbsp;movie&nbsp;list&nbsp;data&nbsp;to&nbsp;populate&nbsp;the&nbsp;grid.&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;grid_data&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;(params[:start]&nbsp;||&nbsp;<span class="number">1</span><span>).to_i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;(params[:limit]&nbsp;||&nbsp;<span class="number">20</span><span>).to_i&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort_col&nbsp;=&nbsp;(params[:sort]&nbsp;||&nbsp;'id')&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort_dir&nbsp;=&nbsp;(params[:dir]&nbsp;||&nbsp;'ASC')&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page&nbsp;=&nbsp;((start/size).to_i)+<span class="number">1</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@movie_pages</span><span>&nbsp;=&nbsp;Paginator.</span><span class="keyword">new</span><span>(self,&nbsp;Movie.count,&nbsp;size,&nbsp;page)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@movies</span><span>&nbsp;=&nbsp;Movie.find(:all,&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:select&nbsp;=&gt;&nbsp;<span class="string">&quot;id,&nbsp;title,&nbsp;plot,&nbsp;date,&nbsp;genre,&nbsp;mpaa,&nbsp;directed_by&quot;</span><span>,&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:limit=&gt;<span class="annotation">@movie_pages</span><span>.items_per_page,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:offset=&gt;<span class="annotation">@movie_pages</span><span>.current.offset,&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:order=&gt;sort_col+'&nbsp;'+sort_dir)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return_data&nbsp;=&nbsp;Hash.<span class="keyword">new</span><span>()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return_data[:Total]&nbsp;=&nbsp;<span class="annotation">@movie_pages</span><span>.item_count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return_data[:Movies]&nbsp;=&nbsp;<span class="annotation">@movies</span><span>.collect{|u|&nbsp;{:id=&gt;u.id,&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:title=&gt;u.title,&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:plot=&gt;u.plot,&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:date=&gt;u.date,&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:genre=&gt;u.genre,&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:mpaa=&gt;u.mpaa,&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:directed_by=&gt;u.directed_by}&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render&nbsp;:text=&gt;return_data.to_json,&nbsp;:layout=&gt;<span class="keyword">false</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;</span></li><li class=""><span>end&nbsp;&nbsp;</span></li></ol></div><br />	</pre>
</blockquote></li>
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/124044#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 15 Sep 2007 13:04:58 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/124044</link>
        <guid>http://leondu.javaeye.com/blog/124044</guid>
      </item>
      <item>
        <title>java中实现汉语拼音排序</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/81867" style="color:red;">http://leondu.javaeye.com/blog/81867</a>&nbsp;
          发表时间: 2007年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>看了下发现确实有问题，看来汉字的字符集扩展的时候对排序考虑的不够周到。goolge下看到sf上有个pinyin4j的项目，虽然有点牛刀，但是可以解决这个问题，pinyin4j的项目地址是： <a href="http://pinyin4j.sourceforge.net/">http://pinyin4j.sourceforge.net/</a> </p>
<p>另外javaeye上的zhangljerry 同学，希望你也能看看，因为你的帖子：http://zhangljerry.javaeye.com/blog/68333 中，用你的方法排序，&quot;怡&quot;还是会排在最后的。 </p>
<p>代码如下：&nbsp;</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.leondu; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.Arrays; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.util.Comparator; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.List; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;net.sourceforge.pinyin4j.PinyinHelper; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PinyinComparator&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Comparator&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;concatPinyinStringArray(String[]&nbsp;pinyinArray)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;pinyinStrBuf&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;StringBuffer(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;((</span><span class="keyword">null</span><span>&nbsp;!=&nbsp;pinyinArray)&nbsp;&amp;&amp;&nbsp;(pinyinArray.length&nbsp;&gt;&nbsp;</span><span class="number">0</span><span>))&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;pinyinArray.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pinyinStrBuf.append(pinyinArray[i]); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;outputString&nbsp;=&nbsp;pinyinStrBuf.toString(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;outputString; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;compare(Object&nbsp;o1,&nbsp;Object&nbsp;o2)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">char</span><span>&nbsp;c1&nbsp;=&nbsp;((String)&nbsp;o1).charAt(</span><span class="number">0</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">char</span><span>&nbsp;c2&nbsp;=&nbsp;((String)&nbsp;o2).charAt(</span><span class="number">0</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;concatPinyinStringArray( &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PinyinHelper.toHanyuPinyinStringArray(c1)).compareTo( &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concatPinyinStringArray(PinyinHelper &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toHanyuPinyinStringArray(c2))); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;data&nbsp;=&nbsp;{&nbsp;</span><span class="string">&quot;孙&quot;</span><span>,&nbsp;</span><span class="string">&quot;孟&quot;</span><span>,&nbsp;</span><span class="string">&quot;宋&quot;</span><span>,&nbsp;</span><span class="string">&quot;尹&quot;</span><span>,&nbsp;</span><span class="string">&quot;廖&quot;</span><span>,&nbsp;</span><span class="string">&quot;张&quot;</span><span>,&nbsp;</span><span class="string">&quot;张&quot;</span><span>,&nbsp;</span><span class="string">&quot;张&quot;</span><span>,&nbsp;</span><span class="string">&quot;徐&quot;</span><span>,&nbsp;</span><span class="string">&quot;昆&quot;</span><span>, &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;曹&quot;</span><span>,&nbsp;</span><span class="string">&quot;曾&quot;</span><span>,&nbsp;</span><span class="string">&quot;怡&quot;</span><span>&nbsp;}; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List<string></string>&nbsp;list&nbsp;=&nbsp;Arrays.asList(data); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.sort(data,&nbsp;</span><span class="keyword">new</span><span>&nbsp;PinyinComparator()); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>结果</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>[曹,&nbsp;曾,&nbsp;昆,&nbsp;廖,&nbsp;孟,&nbsp;宋,&nbsp;孙,&nbsp;徐,&nbsp;怡,&nbsp;尹,&nbsp;张,&nbsp;张,&nbsp;张]&nbsp;&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/81867#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/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 May 2007 15:05:42 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/81867</link>
        <guid>http://leondu.javaeye.com/blog/81867</guid>
      </item>
      <item>
        <title>在springside中使用ecside</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/81265" style="color:red;">http://leondu.javaeye.com/blog/81265</a>&nbsp;
          发表时间: 2007年05月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>被编辑器打败了 -__-!</p>
<p>详细内容看附件吧。</p>
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/81265#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 May 2007 09:28:39 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/81265</link>
        <guid>http://leondu.javaeye.com/blog/81265</guid>
      </item>
      <item>
        <title>参加了bea广州的用户组活动</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/68899" style="color:red;">http://leondu.javaeye.com/blog/68899</a>&nbsp;
          发表时间: 2007年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天的主题是Portal，除了google的自定义主页外，对这方面了解还真不多，加上最近单位的信息化规划搞得如火如荼，所以就去听了一下。<br /><br />感受1：Portal是个好东西，从人找信息，改变为信息找人，可以把多个业务系统的信息集中到一个门户上来展现，方便了用户的操作。对于组织结构复杂、业务系统多的用户尤其适用。<br /><br />感受2：bea对于新技术的响应还是非常快的，陈渚的报告中是以web2.0开始的，而且多次提到讲web2.0的体验带入到企业应用中来。<br /><br />感受3：便宜没好货，好货不便宜，这bea的portal动辄百万的报价可不是谁都消受的起。<br /><br />感受4：关于报告的质量，我的打分如下<br />陈渚9  陶宇8  张年胜7  郑裕显8.5<br />其中陈渚毕竟是行家里手，所以侃侃而谈，思路清晰；陶宇的报告非常的实在，可惜活动现场没有网络环境，没办法演示他的一些东西，所以内容上略显单薄；张年胜不知道是不是没准备好，发言有些干涩，回答提问也是不尽如人意；郑裕显是非常有趣的一个人，讲到的也都是实际开发中的体会，只是语速稍显快了一些。<br /><br /><br />PS：在调查问卷里面，常去的技术网站上有javaeye，而我记得第一次广州bea用户组，主持人还只是问谁从matrix来的。呵呵，看来javaeye的影响力也是越来越大了。
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/68899#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 07 Apr 2007 20:48:13 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/68899</link>
        <guid>http://leondu.javaeye.com/blog/68899</guid>
      </item>
      <item>
        <title>ubuntu 基本正常了</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/55491" style="color:red;">http://leondu.javaeye.com/blog/55491</a>&nbsp;
          发表时间: 2007年02月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          声音问题也解决了，参考了ubuntuchina (www.ubuntu.org.cn)的一个帖子，关键是声音控制面板中，开关选现中，取消选中 external amplifier。上几张pp：<br />
<br />
<strong>全景：</strong><br />
<br />
<img src="http://leondu.javaeye.com/upload/picture/pic/2287/ce60d72d-2151-45a3-bad8-4daaf517024d.jpg" alt="" /><br />
<br />
<strong>登录以后：</strong><br />
<br />
<img src="http://leondu.javaeye.com/upload/picture/pic/2288/d838ef8d-3c3f-4d19-95f9-456c478fc2c2.jpg" alt="" /><br />
<br />
桌面：<br />
<img src="http://leondu.javaeye.com/upload/picture/pic/2325/e8c00cfe-261b-4e0f-bc8f-23304f2c6f0b.png" alt="" />
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/55491#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 24 Feb 2007 17:31:09 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/55491</link>
        <guid>http://leondu.javaeye.com/blog/55491</guid>
      </item>
      <item>
        <title>安装ubuntu记录</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/55090" style="color:red;">http://leondu.javaeye.com/blog/55090</a>&nbsp;
          发表时间: 2007年02月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          春节在家，把家里的sony-tr5zc装上了ubuntu，总体感觉安装的过程比较顺利，对笔记本的支持也超出了我的预期，把过程中的一些东西记录下来：<br />
<br />
<ul>
    <li>安装过程中的摸黑安装：在copy文件快结束的时候，屏幕变黑，然后就再没亮起来，但是光驱仍然在转动，硬盘也有反应，估计是安装程序在设置显卡的时候遇到了问题，按照以前安装的经验，一路狂按回车键，竟然摸黑完成了安装，哈哈。</li>
    <li>无线网卡的支持：对无线网卡的支持还是比较好的，安装完毕能够自动识别出来，但是奇怪的是，默认的密码是10进制的，在连接时会出错，改为16进制之后可以顺利连接无线网络。</li>
    <li>分辨率：这个是比较麻烦的，google一把，找到的答案都和915resolution这个patch有关，apt-get install，却又说找不到源，然后又在www.ubuntu.org.cn找到了推荐的源，修改之后折腾来折腾去，莫名其妙的就找到了源。<br />
    按照一个帖子（http://users.skynet.be/thomasvst/linux-on-laptop/）使用915resolution 修改了分辨率的设置，值得一提的是网上的帖子大多说将一个自己不用的模式覆盖掉，然后在bootmisc.sh中设置以便永久生效，而我是在覆盖了自己在使用的那个（1024*768 32bit）才生效了。</li>
</ul>
<br />
现在还没解决的问题：<br />
<ul>
    <li>声卡还没有解决，仍然处于无声时代，不过这个问题应该不大；</li>
    <li>hotkey还没有完全支持，tr5zc在屏幕侧边有一些控制声音和快速调节分辨率的快捷键，但是现在还没办法使用，Fn+功能键倒是差不多了，虽然不能完全对上。</li>
    <li>休眠功能还不支持，合上之后仍然是开机。</li>
</ul>
安装和使用ubuntu的感受：<br />
<ul>
    <li>安装简单，分区等都比较智能，虽然后半程让我摸黑，总体还是85分以上的。</li>
    <li>系统很人性化，apt-get 简直太方便了。</li>
</ul>
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/55090#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 Feb 2007 21:33:00 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/55090</link>
        <guid>http://leondu.javaeye.com/blog/55090</guid>
      </item>
      <item>
        <title>在Springside中使用ibatis</title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/54694" style="color:red;">http://leondu.javaeye.com/blog/54694</a>&nbsp;
          发表时间: 2007年02月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="3"><span lang="EN-US"><font face="Times New Roman">
<div class="code_title">
<div class="code_title">&nbsp;</div>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">Springside <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中在</span><span lang="EN-US"><font face="Times New Roman">orm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这一层提供了</span><span lang="EN-US"><font face="Times New Roman">ibatis</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现，可惜在例子中没有</span><span lang="EN-US"><font face="Times New Roman">demo</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">具体的用法。所以在这里简单</span><span lang="EN-US"><font face="Times New Roman">demo</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一下在</span><span lang="EN-US"><font face="Times New Roman">springside</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中使用</span><span lang="EN-US"><font face="Times New Roman">ibatis</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方法，运行效果如下：</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img src="http://leondu.javaeye.com/upload/picture/pic/2283/bad48736-e8c6-481e-934c-f5457ad8aae8.jpg" alt="" /></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font>&nbsp;</p>
<font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（可能有人注意到这个列表不是使用</span><span lang="EN-US"><font face="Times New Roman">ss</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中默认集成的</span><span lang="EN-US"><font face="Times New Roman">extremetable</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，呵呵，没错，我用的是</span><span lang="EN-US"><font face="Times New Roman">fins</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的</span><span lang="EN-US"><font face="Times New Roman">ecside</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">控件，关于在</span><span lang="EN-US"><font face="Times New Roman">ss</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中使用</span><span lang="EN-US"><font face="Times New Roman">ecside</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外文章介绍）</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman">1．<span style="FONT: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建新项目</span><span lang="EN-US"><br />
</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于从</span><span lang="EN-US"><font face="Times New Roman">ss</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中创建一个项目，请参看</span><span lang="EN-US"><font face="Times New Roman">ss</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">wiki</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US"><font face="Times New Roman"> wiki.springside.org.cn</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，记得选择控件的时候选择</span><span lang="EN-US"><font face="Times New Roman">orm/ibatis</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman">2．<span style="FONT: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></font></span></span><span lang="EN-US"><font face="Times New Roman">POJO<br />
</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个简单的叫做</span><span lang="EN-US"><font face="Times New Roman">User</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">pojo</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，只包含一个</span><span lang="EN-US"><font face="Times New Roman">id</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和一个</span><span lang="EN-US"><font face="Times New Roman">username</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;username; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getUsername()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;username; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUsername(String&nbsp;username)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.username&nbsp;=&nbsp;username; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span> </li>
    <li class=""><span>}</span> </li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">Service</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个继承自</span><span lang="EN-US"><font face="Times New Roman">IBatisEntityDao</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">Manager</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，已经具有了</span><span lang="EN-US"><font face="Times New Roman">list</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">save&hellip;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等方法：</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;UserManager&nbsp;</span><span class="keyword">extends</span><span>&nbsp;IBatisEntityDao<user></user>&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"></font></span></font>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">Web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层</span></font></p>
<p><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">同样是一个继承自的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Action</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">类，也没什么好说的：</span></p>
<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;UserAction&nbsp;</span><span class="keyword">extends</span><span>&nbsp;StrutsEntityAction&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;UserManager&nbsp;userManager; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUserManager(UserManager&nbsp;userManager)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.userManager&nbsp;=&nbsp;userManager; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"></font></span>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">5</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．配置啊配置</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重头戏来了，下面介绍</span><span lang="EN-US"><font face="Times New Roman">ibatis</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要的配置文件，以及这几个文件之间的关系。</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 57pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 57.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">（1）<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US">applicationContext-ibatis.xml</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类似</span><span lang="EN-US"><font face="Times New Roman">ss</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中演示</span><span lang="EN-US"><font face="Times New Roman">hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时的配置文件</span><span lang="EN-US"><font face="Times New Roman">dataAccessContext-hibernate.xml</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，配置数据源、</span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">sqlMapClient</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">transactionManager</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">。</span><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意在</span><span lang="EN-US"><font face="Times New Roman">sqlMapClient</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置中</span><span lang="EN-US"><font face="Times New Roman">configLocation</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性指明了</span><span lang="EN-US"><font face="Times New Roman">SQL Map XML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件的位置信息，&ldquo;</span><span lang="EN-US"><font face="Times New Roman">SQL Map</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US"><font face="Times New Roman">XML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件统一配置不同的属性，包括</span><span lang="EN-US"><font face="Times New Roman">DataSource</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的详细配置信息，</span><span lang="EN-US"><font face="Times New Roman">SQL Map</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和其他可选属性，如线程管理等。&rdquo;（摘自《</span><span lang="EN-US"><font face="Times New Roman">iBATIS SQL Maps</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发指南》）。不过在本文中只配置了映射文件。</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">&nbsp;</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">default-autowire</span><span>=</span><span class="attribute-value">&quot;byName&quot;</span><span>&nbsp;</span><span class="attribute">default-lazy-init</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- 数据源定义,使用Apache DBCP 连接池 --></span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;dataSource&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.apache.commons.dbcp.BasicDataSource&quot;</span><span>&nbsp;</span><span class="attribute">destroy-method</span><span>=</span><span class="attribute-value">&quot;close&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;driverClassName&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${jdbc.driverClassName}&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;url&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${jdbc.url}&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${jdbc.username}&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;password&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;${jdbc.password}&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;sqlMapClient&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.orm.ibatis.SqlMapClientFactoryBean&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;configLocation&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;/WEB-INF/sql-map.xml&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;dataSource&quot;</span><span>&nbsp;</span><span class="attribute">ref</span><span>=</span><span class="attribute-value">&quot;dataSource&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;transactionManager&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.jdbc.datasource.DataSourceTransactionManager&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;dataSource&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;dataSource&quot;</span><span class="tag">/&gt;</span><span class="tag"><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag"><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 54pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 54.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">（2）</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US"><font size="3">sql-map.xml</font></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正如在（</span><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中所说，本文件中只是说明了映射文件的位置，关于更多配置选项，请参考《</span><span lang="EN-US"><font face="Times New Roman">iBATIS SQL Maps</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发指南》。其中</span><span lang="EN-US"><font face="Times New Roman">resource=&quot;ibatis/user.xml&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中中的路径信息是相对</span><span lang="EN-US"><font face="Times New Roman">classpath</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<div class="code_title">xml 代码</div>
</span></font>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span>&nbsp;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">sqlMapConfig</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">sql-map</span><span>&nbsp;</span><span class="attribute">resource</span><span>=</span><span class="attribute-value">&quot;ibatis/user.xml&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">sqlMapConfig</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 54pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 54.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">（3）</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US"><font size="3">user.xml</font></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">终于到了最后一个配置文件了，这个文件就相当于</span><span lang="EN-US"><font face="Times New Roman">hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的映射文件了，如下所示：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span>&nbsp;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">sqlMap</span><span>&nbsp;</span><span class="attribute">namespace</span><span>=</span><span class="attribute-value">&quot;user&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">resultMap</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;result&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.gpcgd.model.User&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">property</span><span>=</span><span class="attribute-value">&quot;id&quot;</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">&quot;id&quot;</span><span>&nbsp;</span><span class="attribute">columnIndex</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">property</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="attribute">columnIndex</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag"><span class="tag-name">resultMap</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">select</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;com.gpcgd.model.User.select&quot;</span><span>&nbsp;</span><span class="attribute">resultMap</span><span>=</span><span class="attribute-value">&quot;result&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;t.id,t.username,&nbsp;from&nbsp;t_user&nbsp;t &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag"><span class="tag-name">select</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">sqlMap</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: "></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: ">resultMap</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">指明了数据库和对象之间的映射关系，至于下面这段，需要解释一下</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'"></span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: "><o:p></o:p></span></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">select</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;com.gpcgd.model.User.select&quot;</span><span>&nbsp;</span><span class="attribute">resultMap</span><span>=</span><span class="attribute-value">&quot;result&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;t.id,t.username,&nbsp;from&nbsp;t_user&nbsp;t &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">select</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先是这个</span><span lang="EN-US"><font face="Times New Roman">id</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，对应了</span><span lang="EN-US"><font face="Times New Roman">dao</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口中的调用参数，而返回值</span><span lang="EN-US"><font face="Times New Roman">resultMap</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的值（</span><span lang="EN-US"><font face="Times New Roman">resultMap=&quot;result&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）又对应了对象－数据库映射的</span><span lang="EN-US"><font face="Times New Roman">resultMap</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">id</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US"><font face="Times New Roman">resultMap id=&quot;result&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于这个</span><span lang="EN-US"><font face="Times New Roman">id=&quot;com.gpcgd.model.User.select&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，有必要说明一下。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们知道，</span><span lang="EN-US"><font face="Times New Roman">ss</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的</span><span lang="EN-US"><font face="Times New Roman">list</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法是调用</span><span lang="EN-US"><font face="Times New Roman">Manager</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的</span><span lang="EN-US"><font face="Times New Roman">getAll()</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法的。</span></font></p>
<p><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">在</span><span new="" times="" lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: ">/ss2/core/src/java/org/springside/core/dao/IBatisGenericDao.java</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">的源码中我们可以看到：</span></p>
<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="comment">/** </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取全部对象 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;<t></t>&nbsp;List<t></t>&nbsp;getAll(Class<t></t>&nbsp;entityClass)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getSqlMapClientTemplate().queryForList(entityClass.getName()&nbsp;+&nbsp;POSTFIX_SELECT,&nbsp;</span><span class="keyword">null</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
</ol>
</div>
</span></span></font>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">其中</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: ">entityClass.getName()=</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">&ldquo;</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: ">com.gpcgd.model.User</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">&rdquo;，而</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: ">POSTFIX_SELECT=</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">&ldquo;</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: ">.select</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">&rdquo;。所以</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: ">select</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">的</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: ">id</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">要设置为：&ldquo;</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: ">com.gpcgd.model.User.select</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">&rdquo;。</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: "><o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">不知道能不能对&ldquo;</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: ">com.gpcgd.model.User.select</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">&rdquo;这种写法进行简化，如果哪位知道，请留言指正，谢谢！</span><span courier="" lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: "><o:p></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">&nbsp;</p>
</span></span></font>&nbsp;</font></span></font>
          <br/>
          <span style="color:red;">
            <a href="http://leondu.javaeye.com/blog/54694#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 16 Feb 2007 21:18:00 +0800</pubDate>
        <link>http://leondu.javaeye.com/blog/54694</link>
        <guid>http://leondu.javaeye.com/blog/54694</guid>
      </item>
      <item>
        <title>acegi参考手册(v1.0.4)[译]-第六章 通用认证服务 </title>
        <author>leondu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leondu.javaeye.com">leondu</a>&nbsp;
          链接：<a href="http://leondu.javaeye.com/blog/51624" style="color:red;">http://leondu.javaeye.com/blog/51624</a>&nbsp;
          发表时间: 2007年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div style="MARGIN: 17pt 0cm 16.5pt"><strong><font size="6">第六章. 通用认证服务</font></strong></div>
<div style="MARGIN: 13pt 0cm"><strong><font size="5">6.1. Mechanisms, Providers 和 Entry Points</font></strong></div>
<div align="left"><span style="FONT-SIZE: 11pt">如果你使用</span><span style="FONT-SIZE: 11pt">Acegi Security</span><span style="FONT-SIZE: 11pt">提供的认证方法，那么通常你需要配置一个</span><span style="FONT-SIZE: 11pt">web filter</span><span style="FONT-SIZE: 11pt">，一个</span><span style="FONT-SIZE: 9pt">AuthenticationProvider</span></div>
<div align="left"><span style="FONT-SIZE: 11pt">以及</span><span style="FONT-SIZE: 9pt">AuthenticationEntryPoint</span><span style="FONT-SIZE: 11pt">。在本节我们将要浏览一个示例应用，它需要支持基于</span><span style="FONT-SIZE: 11pt">form</span><span style="FONT-SIZE: 11pt">的认证（例如提供给用户登录的</span><span style="FONT-SIZE: 11pt">HTML</span><span style="FONT-SIZE: 11pt">页面）以及基础认证（例如</span><span style="FONT-SIZE: 11pt">web service</span><span style="FONT-SIZE: 11pt">或者类似的可以访问受保护资源）。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">在</span><span style="FONT-SIZE: 11pt">web.xml</span><span style="FONT-SIZE: 11pt">中，这个应用需要一个单独的</span><span style="FONT-SIZE: 11pt">Acegi Security filter</span><span style="FONT-SIZE: 11pt">来使用</span><span style="FONT-SIZE: 11pt">FilterChainProxy</span><span style="FONT-SIZE: 11pt">。几乎所有的</span><span style="FONT-SIZE: 11pt">Acegi Security</span><span style="FONT-SIZE: 11pt">应用都有一个类似的项，看起来象下面这样：</span></div>
<div align="left">&nbsp;</div>
<div align="left">
<div align="left"><span style="FONT-SIZE: 8pt"></span></div>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>Acegi&nbsp;Filter&nbsp;Chain&nbsp;Proxy</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>org.acegisecurity.util.FilterToBeanProxy</span><span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>targetClass</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>org.acegisecurity.util.FilterChainProxy</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>Acegi&nbsp;Filter&nbsp;Chain&nbsp;Proxy</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">上述声明将使每个</span><span style="FONT-SIZE: 11pt">web</span><span style="FONT-SIZE: 11pt">请求都要经过</span><span style="FONT-SIZE: 11pt">Acegi Security</span><span style="FONT-SIZE: 11pt">的</span><span style="FONT-SIZE: 11pt">FilterChainProxy</span><span style="FONT-SIZE: 11pt">。正如在本手册的</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">那节中所说，</span><span style="FONT-SIZE: 11pt">FilterChainProxy</span><span style="FONT-SIZE: 11pt">是一个通用类，它使得</span><span style="FONT-SIZE: 11pt">web</span><span style="FONT-SIZE: 11pt">请求按照</span><span style="FONT-SIZE: 11pt">URL</span><span style="FONT-SIZE: 11pt">模式被发送到不同的</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">。那些被委派的</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">是由</span><span style="FONT-SIZE: 11pt">application context</span><span style="FONT-SIZE: 11pt">管理的，因此它们可以享受依赖注射的好处。我们来看看在你的</span><span style="FONT-SIZE: 11pt">application context</span><span style="FONT-SIZE: 11pt">中</span><span style="FONT-SIZE: 11pt">FilterChainProxy</span><span style="FONT-SIZE: 11pt">的定义会是什么样的：</span></div>
<div align="left">&nbsp;</div>
<div align="left">
<div align="left"><span style="FONT-SIZE: 8pt"></span></div>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;filterChainProxy&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.acegisecurity.util.FilterChainProxy&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;filterInvocationDefinitionSource&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON &nbsp;&nbsp;</span></li>
    <li class="alt"><span>PATTERN_TYPE_APACHE_ANT &nbsp;&nbsp;</span></li>
    <li class=""><span>/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">在内部，</span><span style="FONT-SIZE: 11pt">Acegi Security</span><span style="FONT-SIZE: 11pt">会使用</span><span style="FONT-SIZE: 9pt">PropertyEditor</span><span style="FONT-SIZE: 11pt">来将上述</span><span style="FONT-SIZE: 11pt">XML</span><span style="FONT-SIZE: 11pt">片段中的字符串转化为一个</span><span style="FONT-SIZE: 9pt">FilterInvocationDefinitionSource</span><span style="FONT-SIZE: 11pt">对象。在这个阶段需要注意的是，一系列的</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">会按照定义的顺序运行，并且这些</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">实际就是</span><span style="FONT-SIZE: 11pt">application context</span><span style="FONT-SIZE: 11pt">中的</span><span style="FONT-SIZE: 11pt">bean</span><span style="FONT-SIZE: 11pt">的</span><span style="FONT-SIZE: 9pt">&lt;bean id&gt;</span><span style="FONT-SIZE: 11pt">。所以，在我们的例子中，会在</span><span style="FONT-SIZE: 11pt">application context</span><span style="FONT-SIZE: 11pt">出现另外一些</span><span style="FONT-SIZE: 11pt">bean</span><span style="FONT-SIZE: 11pt">，它们会被命名为</span><span style="FONT-SIZE: 9pt">httpSessionContextIntegrationFilter</span><span style="FONT-SIZE: 11pt">, </span><span style="FONT-SIZE: 9pt">logoutFilter </span><span style="FONT-SIZE: 11pt">等。</span><span style="FONT-SIZE: 11pt">Filter</span><span style="FONT-SIZE: 11pt">出现的顺序会在手册中</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">那一节讨论，虽然上述的例子中它们是正确的。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">在我们的例子中，我们使用了</span><span style="FONT-SIZE: 9pt">AuthenticationProcessingFilter</span><span style="FONT-SIZE: 11pt">和</span><span style="FONT-SIZE: 9pt">BasicProcessingFilter</span><span style="FONT-SIZE: 11pt">。它们分别对应了基于</span><span style="FONT-SIZE: 11pt">form</span><span style="FONT-SIZE: 11pt">的认证和</span><span style="FONT-SIZE: 11pt">BASIC HTTP header-based</span><span style="FONT-SIZE: 11pt">认证的&ldquo;认证机制&rdquo;（我们在手册的前面部分讨论了认证机制扮演的角色）。如果你既不使用</span><span style="FONT-SIZE: 11pt">form</span><span style="FONT-SIZE: 11pt">也不使用</span><span style="FONT-SIZE: 11pt">BASIC</span><span style="FONT-SIZE: 11pt">认证，就不需要定义这些</span><span style="FONT-SIZE: 11pt">bean</span><span style="FONT-SIZE: 11pt">了。取而代之的是你要定义对应你所需要的认证环境的</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">，例如</span><span style="FONT-SIZE: 9pt">DigestProcessingFilter </span><span style="FONT-SIZE: 11pt">或者</span><span style="FONT-SIZE: 9pt">CasProcessingFilter</span><span style="FONT-SIZE: 11pt">。请对照手册中对应的章节来了解如何配置这些认证机制。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">让我们回忆一下，在</span><span style="FONT-SIZE: 9pt">HttpSessionContextIntegrationFilter</span><span style="FONT-SIZE: 11pt">中保存了每个</span><span style="FONT-SIZE: 11pt">HTTP session</span><span style="FONT-SIZE: 11pt">调用中的</span><span style="FONT-SIZE: 9pt">SecurityContext</span><span style="FONT-SIZE: 11pt">。这意味着认证机制只会在</span><span style="FONT-SIZE: 11pt">principal</span><span style="FONT-SIZE: 11pt">最初尝试认证的时候被使用一次。在余下的时间内，认证机制只是静静的待在那里，将请求发往</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">链中的下一个</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">。这个基于实际的需求源于这样的一个事实，很少有认证实现在每一个，每一次的调用的时候都会进行认证（</span><span style="FONT-SIZE: 11pt">BASIC</span><span style="FONT-SIZE: 11pt">认证是一个值得注意的例外），但是如果一个</span><span style="FONT-SIZE: 11pt">pricipal</span><span style="FONT-SIZE: 11pt">在最初的认证步骤之后帐号被取消了，或者被禁用了，或者被修改了（例如</span><span style="FONT-SIZE: 9pt">GrantedAuthority[]</span><span style="FONT-SIZE: 11pt">中增加或者减少）会怎么样呢？让我们来看看现在这些情况是如何处理的。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">前面已经介绍了安全对象的主要认证</span><span style="FONT-SIZE: 11pt">provider</span><span style="FONT-SIZE: 9pt"> AbstractSecurityInterceptor</span><span style="FONT-SIZE: 11pt">。这个类需要能够访问一个</span><span style="FONT-SIZE: 9pt">AuthenticationManager</span><span style="FONT-SIZE: 11pt">。它同时有个可选配置可以设定一个认证对象每次安全对象调用的时候是否需要重新认证。如果</span><span style="FONT-SIZE: 9pt">Authentication.isAuthenticated()</span><span style="FONT-SIZE: 11pt">返回</span><span style="FONT-SIZE: 11pt">true</span><span style="FONT-SIZE: 11pt">，那么它默认在</span><span style="FONT-SIZE: 9pt">SecurityContextHolder</span><span style="FONT-SIZE: 11pt">中的认证对象是已认证的。这样做对于提高性能是非常好的，但是对于即时的认证验证是不理想的。在这样的情况下你可能需要将</span><span style="FONT-SIZE: 9pt">AbstractSecurityInterceptor.alwaysReauthenticate</span><span style="FONT-SIZE: 11pt">属性设置为</span><span style="FONT-SIZE: 11pt">true</span><span style="FONT-SIZE: 11pt">。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">你可能会问自己&ldquo;这个</span><span style="FONT-SIZE: 9pt">AuthenticationManager</span><span style="FONT-SIZE: 11pt">是什么？&rdquo;我们之前没有见过它，但是我们曾经讨论过</span><span style="FONT-SIZE: 9pt">AuthenticationProvider</span><span style="FONT-SIZE: 11pt">的概念。非常简单，</span><span style="FONT-SIZE: 11pt">AuthenticationManager</span><span style="FONT-SIZE: 11pt">负责在</span><span style="FONT-SIZE: 11pt">AuthenticationProvider</span><span style="FONT-SIZE: 11pt">链之间传递请求。它非常象我们之前讨论过的</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">链，虽然有一些不同。</span><span style="FONT-SIZE: 11pt">Acegi Security</span><span style="FONT-SIZE: 11pt">只提供了一个</span><span style="FONT-SIZE: 11pt">AuthenticationManager</span><span style="FONT-SIZE: 11pt">实现，因此让我们看看对于我们这章的例子，它是如何配置的：</span></div>
<div align="left">&nbsp;</div>
<div align="left">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;authenticationManager&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.acegisecurity.providers.ProviderManager&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;providers&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;daoAuthenticationProvider&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;anonymousAuthenticationProvider&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;rememberMeAuthenticationProvider&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">在这个时候，可能值得提到的是你的认证机制（通常是</span><span style="FONT-SIZE: 11pt">filter</span><span style="FONT-SIZE: 11pt">）也被注入了一个</span><span style="FONT-SIZE: 9pt">AuthenticationManager</span><span style="FONT-SIZE: 11pt">的引用。所以和认证机制都会使用上述的</span><span style="FONT-SIZE: 9pt">ProviderManager</span><span style="FONT-SIZE: 11pt">来轮询一系列的</span><span style="FONT-SIZE: 9pt">AuthenticationProvider</span><span style="FONT-SIZE: 11pt">。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">在我们例子中有三个</span><span style="FONT-SIZE: 11pt">provider</span><span style="FONT-SIZE: 11pt">。它们按照上述的顺序调用（使用</span><span style="FONT-SIZE: 11pt">list</span><span style="FONT-SIZE: 11pt">而不是</span><span style="FONT-SIZE: 11pt">set</span><span style="FONT-SIZE: 11pt">来显示是按照顺序调用的），每个</span><span style="FONT-SIZE: 11pt">provider</span><span style="FONT-SIZE: 11pt">都能够尝试认证，或者仅仅返回一个</span><span style="FONT-SIZE: 11pt">null</span><span style="FONT-SIZE: 11pt">来跳过认证。如果所有的实现都返回</span><span style="FONT-SIZE: 11pt">null</span><span style="FONT-SIZE: 11pt">，</span><span style="FONT-SIZE: 9pt">ProviderManager</span><span style="FONT-SIZE: 11pt">会抛出一个相应的异常。如果你想了解更多</span><span style="FONT-SIZE: 11pt">chaining providers</span><span style="FONT-SIZE: 11pt">的信息，请参阅</span><span style="FONT-SIZE: 9pt">ProviderManager</span><span style="FONT-SIZE: 11pt">的</span><span style="FONT-SIZE: 11pt">JavaDoc</span><span style="FONT-SIZE: 11pt">。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">authentication mechanism</span><span style="FONT-SIZE: 11pt">使用的那些</span><span style="FONT-SIZE: 11pt">provider</span><span style="FONT-SIZE: 11pt">有时候是可以互换的，而有时候它们又依赖于特定的</span><span style="FONT-SIZE: 11pt">authentication mechanism</span><span style="FONT-SIZE: 11pt">。例如，</span><span style="FONT-SIZE: 9pt">DaoAuthenticationProvider</span><span style="FONT-SIZE: 11pt">只需要一个基于字符串的用户名和密码。若干个认证机制会产生基于字符串的用户名和密码的集合，包括（但不限于）</span><span style="FONT-SIZE: 11pt">BASIC </span><span style="FONT-SIZE: 11pt">和</span><span style="FONT-SIZE: 11pt"> form </span><span style="FONT-SIZE: 11pt">认证。同时，有些认证机制会产生一个只能和特定类型的</span><span style="FONT-SIZE: 9pt">AuthenticationProvider</span><span style="FONT-SIZE: 11pt">交互的认证请求对象。一个这种一对一映射的例子是</span><span style="FONT-SIZE: 11pt">JA-SIG CAS</span><span style="FONT-SIZE: 11pt">，它使用</span><span style="FONT-SIZE: 11pt">service ticket</span><span style="FONT-SIZE: 11pt">的概念，只能被</span><span style="FONT-SIZE: 11pt">Common Authentication Services </span><span style="FONT-SIZE: 9pt">CasAuthenticationProvider</span><span style="FONT-SIZE: 11pt">认证。一个更加深入的一对一映射的例子是</span><span style="FONT-SIZE: 11pt">LDAP</span><span style="FONT-SIZE: 11pt">认证机制，它只能由</span><span style="FONT-SIZE: 9pt">LdapAuthenticationProvider</span><span style="FONT-SIZE: 11pt">处理。这种特定的对应关系在每个类的</span><span style="FONT-SIZE: 11pt">JavaDoc</span><span style="FONT-SIZE: 11pt">以及在本手册的特定认证方法章节中有详细说明。你不用担心这些实现的细节，因为如果你忘记注册一个合适的</span><span style="FONT-SIZE: 11pt">provider</span><span style="FONT-SIZE: 11pt">，你在尝试认证时只会收到一个</span><span style="FONT-SIZE: 9pt">ProviderNotFoundException</span><span style="FONT-SIZE: 11pt">异常。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">当你在</span><span style="FONT-SIZE: 9pt">FilterChainProxy</span><span style="FONT-SIZE: 11pt">中正确配置了认证机制，并且确保注册了对应的</span><span style="FONT-SIZE: 9pt">AuthenticationProvider</span><span style="FONT-SIZE: 11pt">，你的最后一步是配置一个</span><span style="FONT-SIZE: 9pt">AuthenticationEntryPoint</span><span style="FONT-SIZE: 11pt">。回忆一下早先我们讨论过的</span><span style="FONT-SIZE: 9pt">ExceptionTranslationFilter</span><span style="FONT-SIZE: 11pt">的角色，当一个基于</span><span style="FONT-SIZE: 11pt">HTTP</span><span style="FONT-SIZE: 11pt">的请求收到一个</span><span style="FONT-SIZE: 11pt">HTTP</span><span style="FONT-SIZE: 11pt">头或者一个</span><span style="FONT-SIZE: 11pt">HTTP</span><span style="FONT-SIZE: 11pt">重定向以开始认证时它被使用。继续我们早先的例子：</span></div>
<div align="left">&nbsp;</div>
<div align="left">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;exceptionTranslationFilter&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.acegisecurity.ui.ExceptionTranslationFilter&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;authenticationEntryPoint&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;authenticationProcessingFilterEntryPoint&quot;</span><span class="tag">/&gt;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;accessDeniedHandler&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.acegisecurity.ui.AccessDeniedHandlerImpl&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;errorPage&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;/accessDenied.jsp&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;authenticationProcessingFilterEntryPoint&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;loginFormUrl&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>/acegilogin.jsp</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;forceHttps&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>false</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
&nbsp;</div>
<div align="left"><span style="FONT-SIZE: 11pt">注意到</span><span style="FONT-SIZE: 9pt">ExceptionTranslationFilter</span><span style="FONT-SIZE: 11pt">需要两个协作者。第一个</span><span style="FONT-SIZE: 9pt">AccessDeniedHandlerImpl</span><span style="FONT-SIZE: 11pt">，使用一个</span><span style="FONT-SIZE: 9pt">RequestDispatcher</span><span style="FONT-SIZE: 11pt">导向显示特定的访问拒绝的错误页面。我们使用</span><span style="FONT-SIZE: 11pt">forwad</span><span style="FONT-SIZE: 11pt">所以</span><span style="FONT-SIZE: 9pt">SecurityContextHolder</span><span style="FONT-SIZE: 11pt">中仍然保留</span><span style="FONT-SIZE: 11pt">principal</span><span style="FONT-SIZE: 11pt">的详细信息，这些对于显示给用户来说是有用的（在</span><span style="FONT-SIZE: 11pt">Acegi Security</span><span style="FONT-SIZE: 11pt">的老版本中，我们依赖</span><span style="FONT-SIZE: 11pt">rervlet</span><span style="FONT-SIZE: 11pt">容器来处理</span><span style="FONT-SIZE: 11pt">403</span><span style="FONT-SIZE: 11pt">错误信息，它缺乏这个有用的上下文信息）。</span><span style="FONT-SIZE: 9pt">AccessDeniedHandlerImpl</span><span style="FONT-SIZE: 11pt">同时将会将</span><span style="FONT-SIZE: 11pt">HTTP</span><span style="FONT-SIZE: 11pt">头设置为</span><span style="FONT-SIZE: 11pt">403</span><span style="FONT-SIZE: 11pt">，它是访问拒绝的正式错误代码。至于</span><span style="FONT-SIZE: 9pt">AuthentionEntryPoint</span><span style="FONT-SIZE: 11pt">，这里设置如果一个未受认证的</span><span style="FONT-SIZE: 11pt">principal</span><span style="FONT-SIZE: 11pt">尝试执行一个受保护的操作时，我们需要执行那些动作。因为在我们的例子中要使用基于</span><span style="FONT-SIZE: 11pt">form</span><span style="FONT-SIZE: 11pt">的认证，因此我们设定</span><span style="FONT-SIZE: 9pt">AuthenticationProcessinFilterEntryPoint</span><span style="FONT-SIZE: 11pt">以及登录页面的</span><span style="FONT-SIZE: 11pt">URL</span><span style="FONT-SIZE: 11pt">。你的应用系统通常只需要一个</span><span style="FONT-SIZE: 11pt">entry point</span><span style="FONT-SIZE: 11pt">，并且大多数的认证方法都定义了自己特有的</span><span style="FONT-SIZE