<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Moogle Yang</title>
    <description></description>
    <link>http://moogle.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>Hibernate 对象查询生成的SQL的疑问[已解决]</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/71969" style="color:red;">http://moogle.javaeye.com/blog/71969</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp; <span lang="zh-CN" style="FONT-FAMILY: 宋体">惟一外键关键的情况</span><span lang="en-US" style="FONT-FAMILY: Calibri">(many-to-one):</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">我用了二个这样的例子进行测试</span>
<ul style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.074in; DIRECTION: ltr; unicode-bidi: embed">
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">环境</span><span lang="en-US" style="FONT-FAMILY: Calibri">:Oracle8i,Hibernate3.1.3</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="en-US" style="FONT-FAMILY: Calibri">2</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">张表都是三个字段，然后进行对象查询</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="en-US" style="FONT-FAMILY: Calibri">2</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">种情况的映射文件都是相似的，只是属性具体名称稍有不同</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: 宋体">&nbsp;&nbsp;</p>
    <div class="code_title">xml 代码</div>
    <div style="DIRECTION: ltr">
    <div class="dp-highlighter">
    <div class="bar"></div>
    <ol class="dp-xml">
        <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">id</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;id&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;java.lang.Integer&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">column</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;id&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">generator</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;assigned&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"><span class="tag-name">id</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </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;gzzh&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;java.lang.String&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
        <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">column</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;gzzh&quot;</span><span>&nbsp;</span><span class="attribute">length</span><span>=</span><span class="attribute-value">&quot;20&quot;</span><span>&nbsp;</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"><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </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;www&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;java.lang.String&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">column</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;www&quot;</span><span>&nbsp;</span><span class="attribute">length</span><span>=</span><span class="attribute-value">&quot;30&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"><span class="tag-name">property</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">many-to-one</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;wnote&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.db.Www&quot;</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">&quot;gzzh&quot;</span><span>&nbsp;</span><span class="attribute">lazy</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">update</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">insert</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    </ol>
    </div>
    <table cellspacing="0" border="1" valign="top" cellpadding="0" style="BORDER-RIGHT: #a3a3a3 1pt solid; BORDER-TOP: #a3a3a3 1pt solid; BORDER-LEFT: #a3a3a3 1pt solid; DIRECTION: ltr; BORDER-BOTTOM: #a3a3a3 1pt solid; BORDER-COLLAPSE: collapse">
        <tbody>
            <tr>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 0.667in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">&nbsp;</p>
                </td>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 7.791in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">加黑加粗的是</span><span lang="en-US" style="FONT-FAMILY: Calibri">man-to-one</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">对应的外键</span><span lang="en-US" style="FONT-FAMILY: Calibri">.</span></p>
                </td>
            </tr>
            <tr>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 0.667in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p lang="en-US" style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">A.</p>
                </td>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 7.791in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">Hibernate: select this_.id as id2_0_, <span style="FONT-WEIGHT: bold">this_.gzzh as gzzh2_0_</span>, this_.www as www2_0_ from test_user this_</p>
                </td>
            </tr>
            <tr>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 0.667in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p lang="en-US" style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">B</p>
                </td>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 7.791in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">Hibernate: select this_.id as id0_0_, <span style="FONT-WEIGHT: bold">this_.SQR as SQR0_0_</span>, this_.DWDM as DWDM0_0_,<span style="COLOR: red"> </span><span style="FONT-WEIGHT: bold; COLOR: red"><font color="#ff0000">this_.sqr as sqr0_0_</font></span> from NDZJXX this_</p>
                </td>
            </tr>
            <tr>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 0.667in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">&nbsp;</p>
                </td>
                <td style="BORDER-RIGHT: #a3a3a3 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #a3a3a3 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 4pt; VERTICAL-ALIGN: top; BORDER-LEFT: #a3a3a3 1pt solid; WIDTH: 7.791in; PADDING-TOP: 4pt; BORDER-BOTTOM: #a3a3a3 1pt solid">
                <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="en-US" style="FONT-FAMILY: Calibri">B.</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">看加红的地方</span><span lang="en-US" style="FONT-FAMILY: Calibri">,</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">却凭空多出来了一个字段</span></p>
                </td>
            </tr>
        </tbody>
    </table>
    </div>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: 宋体"><span style="BACKGROUND: yellow; mso-highlight: yellow">这个是因为什么呢？</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: 宋体">这二种情况下的语句都能执行，也不影响最后取出来的结果。<br />
    </p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">大家知道</span><span lang="en-US" style="FONT-FAMILY: Calibri">Criteria</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">的限制结果记录数目的时候</span><span lang="en-US" style="FONT-FAMILY: Calibri"><span style="mso-spacerun: yes">&nbsp; </span></span><span lang="zh-CN" style="FONT-FAMILY: Calibri">setFirstResult(0).setMaxResults(</span><span lang="en-US" style="FONT-FAMILY: Calibri">100</span><span lang="zh-CN" style="FONT-FAMILY: Calibri">)</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">生成的</span><span lang="en-US" style="FONT-FAMILY: Calibri">SQL</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">是形如</span><span lang="en-US" style="FONT-FAMILY: Calibri"> select * from ( &hellip; ) where </span><span lang="zh-CN" style="FONT-FAMILY: Calibri">rownum &lt;= ?</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="en-US" style="FONT-FAMILY: Calibri">A</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">情况当然是没有任何问题的。</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="en-US" style="FONT-FAMILY: Calibri">B</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">情形如下：</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">select * from ( select this_.id as id0_0_, this_.SQR as SQR0_0_, this_.DWDM as DWDM0_0_, this_.sqr as sqr0_0_ from NDZJXX this_ ) where rownum &lt;= ?</p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">这个时候就有问题了</span><span lang="en-US" style="FONT-FAMILY: Calibri">:</span></p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">ORA-00918: column ambiguously defined</p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">&nbsp;</p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">对</span><span lang="en-US" style="FONT-FAMILY: Calibri">B</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">情况下使用</span><span lang="en-US" style="FONT-FAMILY: Calibri">HQL</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">也是出现同样的问题。</span></p>
    <p lang="en-US" style="FONT-SIZE: 12pt; MARGIN: 0in; FONT-FAMILY: Calibri">&nbsp;</p>
    <p style="FONT-SIZE: 12pt; MARGIN: 0in"><span lang="zh-CN" style="FONT-FAMILY: 宋体">这个让我很疑惑，目前我在</span><span lang="en-US" style="FONT-FAMILY: Calibri">B</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">情况下只好规避使用</span><span lang="en-US" style="FONT-FAMILY: Calibri">Criteria</span><span lang="zh-CN" style="FONT-FAMILY: 宋体">的限制结果记录数目的操作，改用</span><span lang="en-US" style="FONT-FAMILY: Calibri">Native Sql,</span></p>
</ul>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/71969#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 17 Apr 2007 19:59:18 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/71969</link>
        <guid>http://moogle.javaeye.com/blog/71969</guid>
      </item>
      <item>
        <title>请问Hibernate中Criteria Query可以使用原生sql作为排序条件么？</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/45728" style="color:red;">http://moogle.javaeye.com/blog/45728</a>&nbsp;
          发表时间: 2007年01月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          正常情况下是<br />addOrder(Order.desc("column"));<br /><br />希望order by nvl(column,'xxxx') desc<br /><br />类似Hibernate 的条件查询就支持原生sql.<br /><br />请问排序支持么？我搜索了一下，没有找到类似的api.<br /><br />当然我使用hql就可以了，但是我前提已经使用了Criteria Query.<br /><br />谢谢。
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/45728#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 10 Jan 2007 12:01:33 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/45728</link>
        <guid>http://moogle.javaeye.com/blog/45728</guid>
      </item>
      <item>
        <title>JSON-RPC-Java</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/40738" style="color:red;">http://moogle.javaeye.com/blog/40738</a>&nbsp;
          发表时间: 2006年12月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JSON-RPC-Java 简单说就是一个web 应用中间件，它允许DHTML直接访问远程的java应用，并无刷新的返回结果。表面上类似于Xml-RPC，或者远程调用EJB。不过JSON-RPC -Java的实现要简单得多，而且最重要的一点，它在客户端是且仅是使用Javascript 。<br /><br />    做web程序的人一定不会陌生   XMLHttpRequest。所以你也许已经猜到 JSON-RPC-Java 框架最底层的实现技术。没错，JSON-RPC-Java 正是使用 XMLHttpRequest 与服务端交换数据并表现出页面无刷新的效果。XMLHttpRequest 我不多说，apple的网站上有一个比较大概的介绍，参见这里，Mozilla的文档就更详尽了，参见这里（很意外，我竟然没有在微软的MSDN上找到一个比较系统的文档）。<br /><br />    从我对现在的所谓新技术的理解，通常是有一个很磅礴的名号，然后便是各巨头一番你捧我喝，实际上却无非是新瓶装老酒。现有的技术套上标准或者规范的外衣，再加上商业吵作，业界就血雨腥风一把。各巨头为了自己的商业利益，订立的繁杂的标准常常让我等望而反胃。<br /><br />    明确了最底层的实现，再看JSON-RPC-Java 就有了一个本质的认识，这有助于我们一件件拨开它神秘的外衣。就好像对待女人，我们通常在已经了解或者相信她有着诱人的身体的时候，才会乐于或者有耐心对待脱衣的前戏。<br /><br />    外套 JSON<br /><br />    JSON (JavaScript Object Notation) 很显然是 JSON-RPC-Java 的基础，它是基于javascript的一种简单易读的轻量级数据交换格式。它的主页在这里。<br /><br />     如果不熟悉Javascript，那么理解JSON则有一些困难。在这里我要先引入“直接量(Literals)”这个javascript概念。很不幸，我很难找到一篇中文的文章介绍它，好不容易在Lycos的中文网站上发现一份，但是只能通过 google 的网页快照来访问了，参见 《JavaScript 的直接量》。<br /><br />    简单说，如果我们要 javascript 创建一个对象，通常情况下可能会这样写：<br />    <br />    function Person(name, sex) {<br />        this.name = name;<br />        this.sex = sex;<br />    } <br />    var p = new Person('zhaozexin', 1);<br />    alert(p.name);<br /><br />    从Javascript 1.2开始，创建一个对象有了一种相当快捷的语法，如下：<br />     var p = {"name": 'zhaozexin', "sex" : 1};<br />       <br />     这一句就是对象的“直接量”。这样的语法很象java中的Map里toString()方法的输出。name 就是 key, 'zhaozexin' 就是 value。和Map一样，value除了可以是字符串或者数字以外，还可以是数组，函数或者其他对象。 再说说数组，常见的数组声明如下：<br />    var a = new Array();<br />    a[0] = 'zhaozexin';<br />    a[1] = 1;<br />    或者 var a = new Array('zhaozexin', 1);<br /><br />    数组的直接量 如下： var a = ['zhaozexin', 1];  是否觉得也很象 ArrayList 的toString() 方法输出呢。javascript 何以叫 Javascript，那不是没有道理的。<br /><br />     除了代码的简化以外，直接量还有什么好处呢。我们就要关注 eval (codeString) 这个javascript内置函数了，它接受一个字符串参数，当作javascript的代码去解析并执行。所以eval 函数允许 javascript 源代码的动态执行。例如，下面的代码创建了一个包含 Date 对象的新变量 mydate ：eval("var mydate = new Date();")。那么如果我们把“直接量” 作为参数传递给 eval函数，那么就可以动态的创建各式各样的对象了。<br /><br />    更详细的直接量的介绍，可以阅读 《Javascript 权威指南》，我强烈推荐这本书给所有从事web编程的同行。<br />    <br />    现在 JSON 应该容易理解了，它的语法实际就是 javascript 的“直接量”。所以 JSON 的介绍上这样写：<br />    <br />    JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, TCL, and many others. These properties make JSON an ideal data-interchange language.<br /><br />     这诸多的语言实现 JSON 的工作就相当简单了，就仿佛做一个字符串处理程序一样。那么JSON-RPC-Java 我们就可以猜出了大概了：
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/40738#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 25 Dec 2006 23:27:29 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/40738</link>
        <guid>http://moogle.javaeye.com/blog/40738</guid>
      </item>
      <item>
        <title>疑问:Spring配置Quartz例子出错,请看下.谢谢</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/38871" style="color:red;">http://moogle.javaeye.com/blog/38871</a>&nbsp;
          发表时间: 2006年12月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          研究了一天，在官方论坛也查询了很多，就是锁定不了原因。请各位朋友帮忙看看<br />spring的配置如下:<br /><pre name="code" class="java">
    &lt;bean id="emailJobBean" class="org.springframework.scheduling.quartz.JobDetailBean">
    	&lt;property name="jobClass" value="EmailJobBean"/>
    &lt;/bean>
	&lt;bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
	    &lt;property name="jobDetail" ref="emailJobBean" />
	    &lt;property name="startDelay" value="2000" />
	    &lt;property name="repeatInterval" value="60000" />
	&lt;/bean>
	&lt;bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        &lt;property name="triggers">
           &lt;list>
           		&lt;ref bean="simpleTrigger"/>
            &lt;/list>
        &lt;/property>
    &lt;/bean>  
</pre><br />其中被调度的bean<br /><pre name="code" class="java">
public class EmailJobBean extends QuartzJobBean {

	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		System.out.println("Quartz !!!");
	}

}
</pre><br /><br />启动后就保错<br /><pre name="code" class="java">
14:29:38,11882 ERROR  [org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:205)] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'quartzScheduler' defined in ServletContext resource [/WEB-INF/classes/spring-quartz.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: ORA-00942: table or view does not exist
</pre><br />不知道有没有朋友遇到过类似问题？请大家指点<br />环境我用的是resin2.1.16,jdk1.4.2,spring2.0.1,quartz1.6.0
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/38871#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 13 Dec 2006 14:35:14 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/38871</link>
        <guid>http://moogle.javaeye.com/blog/38871</guid>
      </item>
      <item>
        <title>配置Spring 支持 Web session,request</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/38611" style="color:red;">http://moogle.javaeye.com/blog/38611</a>&nbsp;
          发表时间: 2006年12月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          费了1天劲，终于琢磨出来了。。。。<br />配置Spring使得支持Session,request,<br /><pre name="code" class="java">
	&lt;context-param>
		&lt;param-name>contextConfigLocation&lt;/param-name>
		&lt;param-value>/WEB-INF/classes/spring*.xml&lt;/param-value>
	&lt;/context-param>
	&lt;listener>
		&lt;listener-class>
			org.springframework.web.util.Log4jConfigListener
		&lt;/listener-class>
	&lt;/listener>
	&lt;!-- 在servlet2.4规范上配置以下,不加载只是不支持session,request,globle session -->
	&lt;listener>
		&lt;listener-class>
			org.springframework.web.context.request.RequestContextListener
		&lt;/listener-class>
	&lt;/listener>
	&lt;!-- 在servlet2.4规范下配置以下 -->
	&lt;filter>
		&lt;filter-name>requestContextFilter&lt;/filter-name>
		&lt;filter-class>
			org.springframework.web.filter.RequestContextFilter
		&lt;/filter-class>
	&lt;/filter>
	&lt;filter-mapping>
		&lt;filter-name>requestContextFilter&lt;/filter-name>
		&lt;url-pattern>/*&lt;/url-pattern>
	&lt;/filter-mapping>
	&lt;!-- Spring启动入口，不管怎么样都得加载 -->
	&lt;servlet>
		&lt;servlet-name>context&lt;/servlet-name>
		&lt;servlet-class>
			org.springframework.web.context.ContextLoaderServlet
		&lt;/servlet-class>
		&lt;load-on-startup>1&lt;/load-on-startup>
	&lt;/servlet></pre>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/38611#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 11 Dec 2006 23:13:27 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/38611</link>
        <guid>http://moogle.javaeye.com/blog/38611</guid>
      </item>
      <item>
        <title>spry</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/37279" style="color:red;">http://moogle.javaeye.com/blog/37279</a>&nbsp;
          发表时间: 2006年12月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">Spry学习资料..<br />
<br />
<a href="http://www.cnblogs.com/dannyr/archive/2006/10/19/533468.html">http://www.cnblogs.com/dannyr/archive/2006/10/19/533468.html</a><br />
<br />
<font face="Arial"><a href="http://www.javaeye.com/topic/37180">http://www.javaeye.com/topic/37180</a></font></font>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/37279#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 05 Dec 2006 13:44:21 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/37279</link>
        <guid>http://moogle.javaeye.com/blog/37279</guid>
      </item>
      <item>
        <title>MySQL 5.0 字符集</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/37138" style="color:red;">http://moogle.javaeye.com/blog/37138</a>&nbsp;
          发表时间: 2006年12月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="postentry">
<p><font size="1" face="Tahoma">自4.1以后，MySQL增强了对字符集的支持。</font></p>
<p><font size="1" face="Tahoma">名词解释：<br />
&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;<br />
字符集(character set)是一套符号和编码。<br />
而校对(collation)是在该字符集下，用于比较字符的一个规则。<br />
&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;</font></p>
<p><font size="1" face="Tahoma">对于数据库，有四种级别的编码和整理设定：<br />
1. server<br />
2. database<br />
3. table<br />
4. column</font></p>
<p><font size="1" face="Tahoma">　　SQL标准只定义了server和database级别的字符集，MySQL在此基础上，增加了对table和column字符集的支持。下面是相应的语法：</font></p>
<p><font size="1" face="Tahoma">1. server<br />
&mdash;&mdash;&mdash;&mdash;&ndash;<br />
&ndash;character-set-server<br />
&ndash;collation-server</font></p>
<p><font size="1" face="Tahoma">编译时指定服务器编码<br />
shell&gt; ./configure &ndash;with-charset=latin1</font></p>
<p><font size="1" face="Tahoma">shell&gt; ./configure &ndash;with-charset=latin1 \<br />
&ndash;with-collation=latin1_german1_ci</font></p>
<p><font size="1" face="Tahoma">2. database<br />
&mdash;&mdash;&mdash;&mdash;&ndash;<br />
CREATE DATABASE db_name<br />
[[DEFAULT] CHARACTER SET charset_name]<br />
[[DEFAULT] COLLATE collation_name]</font></p>
<p><font size="1" face="Tahoma">ALTER DATABASE db_name<br />
[[DEFAULT] CHARACTER SET charset_name]<br />
[[DEFAULT] COLLATE collation_name]</font></p>
<p><font size="1" face="Tahoma">eg: CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;</font></p>
<p><font size="1" face="Tahoma">3. table<br />
&mdash;&mdash;&mdash;&mdash;&ndash;<br />
CREATE TABLE tbl_name (column_list)<br />
[[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]]</font></p>
<p><font size="1" face="Tahoma">ALTER TABLE tbl_name<br />
[[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]</font></p>
<p><font size="1" face="Tahoma">eg: CREATE TABLE t1 ( &hellip; ) CHARACTER SET latin1 COLLATE latin1_danish_ci;</font></p>
<p><font size="1" face="Tahoma">* The table character set and collation are MySQL extensions; there are no such things in standard SQL.</font></p>
<p><font size="1" face="Tahoma">4. column (only available for CHAR, VARCHAR and TEXT)<br />
&mdash;&mdash;&mdash;&mdash;&ndash;<br />
col_name {CHAR | VARCHAR | TEXT} (col_length)<br />
[CHARACTER SET charset_name] [COLLATE collation_name]</font></p>
<p><font size="1" face="Tahoma">eg:</font></p>
<p><font size="1" face="Tahoma">CREATE TABLE Table1<br />
(<br />
column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci<br />
); </font></p>
<p><font size="1" face="Tahoma"></font></p>
<p><font size="1" face="Tahoma">1. 客户端以什么字符集来发送SQL命令？<br />
character_set_client</font></p>
<p><font size="1" face="Tahoma">2. 当服务器接收到SQL命令时，它会将其转换成什么字符集？<br />
character_set_connection and collation_connection<br />
服务器将客户端发送的SQL命令从character_set_client转换到character_set_connection<br />
在进行字符串比较时，collation_connection将起作用。<br />
但是在进行column中字符串比较时，collation_connection将不起作用，因为column有自己的collation。</font></p>
<p><font size="1" face="Tahoma">3. 服务器将以什么字符集发送 给果/错误信息 给客户端？<br />
character_set_results</font></p>
<p><font size="1" face="Tahoma">－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
有两个语句可以改变connection character set：<br />
1. SET NAMES &lsquo;charset_name&rsquo;;<br />
2. SET CHARACTER SET charset_name;</font></p>
<p><font size="1" face="Tahoma">SET NAMES告诉服务器客户端将使用什么样的字符集来发送SQL命令，也同时指定服务器返回给客户端所使用的字符集。</font></p>
<p><font size="1" face="Tahoma">SET NAMES &lsquo;x&rsquo; 等效于：<br />
SET character_set_client = x;<br />
SET character_set_results = x;<br />
SET character_set_connection = x;<br />
(注：SET character_set_connection = x; 语句同时也自动指定了字符集x的默认collation为 collation_connection的值，但也可以用 SET NAMES &lsquo;charset_name&rsquo; COLLATE &lsquo;collation_name&rsquo;来提定你想使用的collation。)</font></p>
<p><font size="1" face="Tahoma">SET CHARACTER SET和SET NAMES作用相似，但它将连接的字符集和collation设置为默认数据库的字符集和collation。</font></p>
<p><font size="1" face="Tahoma">SET CHARACTER SET x 等效于：<br />
SET character_set_client = x;<br />
SET character_set_results = x;<br />
SET collation_connection = @@collation_database;<br />
(注：SET collation_connection同时也会自动设置character_set_connection。)</font></p>
<p><font size="1" face="Tahoma">如果不希望MySQL在返回结果时进行转换，可以使用SET character_set_results = NULL;语句 </font></p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/37138#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Mon, 04 Dec 2006 15:46:18 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/37138</link>
        <guid>http://moogle.javaeye.com/blog/37138</guid>
      </item>
      <item>
        <title>mysql查询优化</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/37137" style="color:red;">http://moogle.javaeye.com/blog/37137</a>&nbsp;
          发表时间: 2006年12月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="1" face="Tahoma">1. 索引按顺序排列存储<br />
2. 选择索引<br />
　　搜索的索引列，不一定是所要选择的列。出现在ON，WHERE和GROUP BY后的列适合作索引。<br />
　　使用惟一索引<br />
　　　　对于惟一值的列，索引的效果最好。例如：存放年龄的列具有不同值，所以很容易区分各行；而用来记录性别的列，只有&rsquo;M'和&rsquo;F'，不论搜索哪个值，都会得出大约一半的行，所以对其进行索引没有多大用途。<br />
　　使用短索引<br />
　　　　如果对字符串类型的列进行索引，应该指定一个前辍长度。比如一个varchar(200)的列，最好指定索引为前10个或20个字符内。（短的索引节省存储空间，并可能使查询更快）<br />
　　利用最左前辍<br />
　　　　在创建一个包含n列的索引时，实际上是创建了MySQL可以使用的n个索引。<br />
多列索引可起几个索引的作用，因为可利用索引中最左边的列来匹配行。这样的列的集称为最左前辍。</font></p>
<p><font size="1" face="Tahoma">　　比如在一个表中的state, city和zip三个列上创建索引，那么索引中的行是按state/city/zip的次序存放的。因此，索引中的行也会自动按state/city的顺序和state的顺序来存放。所以，该索引可以用来搜索下列的列的组合：<br />
　　　　state/city/zip<br />
　　　　state/city<br />
　　　　state</font></p>
<p><font size="1" face="Tahoma">　　不要过度索引<br />
　　考虑在列上进行的比较类型<br />
　　　　索引可用于&lt;, &lt;=, =, &gt;=, &gt;和BETWEEN运算，也可以用于LIKE运算。对于其他类型的计算（如STRCP()），则索引不起作用。<br />
<br />
3. MySQL查询优化程序<br />
　　EXPLAIN SELECT * FROM student WHERE 1=0;</font></p>
<p><font size="1" face="Tahoma">　　3.1 优化程序怎样工作<br />
　　　　MySQL查询优化程序有几个目标，但主要目标是尽量利用索引，而且尽量使用最具有限制性的索引以排除尽可能多的行。<br />
　　　　比如：WHERE col1=&rsquo;aaa&rsquo; AND col2=&rsquo;bbb&rsquo;，col1和col2都是索引。<br />
　　　　假设整个表内，满足这col1=&rsquo;aaa&rsquo;的行有900行，满足col2=&rsquo;bbb&rsquo;的行有300行，两个条件都满足的行有30行。<br />
　　　　那么，如果首先测试col1，必须检查900行以找到同时与col2值相符的30行，那么在测试col2时，有870行会失败。如果首先测试col2，要找到同时与col1相符的30行，只需要检测300行，这个过程中会有270行失败，这样所涉及的计算较少，磁盘I/O也较少，所以相对来说更快。</font></p>
<p><font size="1" face="Tahoma">　　　　遵循下列准则，有助于优化程序利用索引：<br />
　　　　　　a. 比较具有相同类型的列。<br />
　　　　　　b. 比较中应尽量使用索引列独立。两个例子：<br />
　　　　　　　　1. 比如WHERE col1 &lt; 4 / 2的效果好于WHERE col1 * 2 &lt; 4，后者不会使用索引，且会扫描表中所有行并进行计算。<br />
　　　　　　　　2. 某表中的一个索引列date_col，日期类型<br />
　　　　　　　　　　对于查询WHERE YEAR(date_col) &lt; 1990，并不会使用索引与1990比较，而是将从列值计算出的值与1990比较，而且必须计算每一行。索引没有得到应用。<br />
　　　　　　　　　　改进：WHERE date_col &lt; &lsquo;1990-01-01&rsquo;</font></p>
<p><font size="1" face="Tahoma">――――――――――――――――――――――――――――<br />
但如果没有特定的日期值，比如要查询到今天为止100天内的记录，有3条语句可以完成这个任务<br />
WHERE TO_DAYS(date_col) &ndash; TO_DAYS(CURRENT_DATE) &lt; 100<br />
WHERE TO_DAYS(date_col) &lt; 100 + TO_DAYS(CURRENT_DATE)<br />
WHERE date_col &lt; DATE_ADD(CURRENT_DATE, INTERVAL 100 DAY)</font></p>
<p><font size="1" face="Tahoma">第一条查询不能利用索引，因为必须检索每一行，以计算TO_DAYS(date_col)。<br />
第二条查询要好一些，100和TO_DAYS(CURRENT_DATE)都是常量，因为表达式右边的值可以在查询处理前由优化程序一次计算出来，而不是每行计算一次，但date_col仍然在函数中，所以仍然没有使用索引。<br />
第三条查询是最好的方法，表达式右边会在查询处理前一次性计算出来，其值是一个日期，可以直接和date_col比较，不需要再转换为天数，索引得到利用。</font></p>
<p><font size="1" face="Tahoma">　　　　　　c. 在LIKE模式的起始处不要使用通配符。<br />
　　　　　　　　查询WHERE name LIKE &lsquo;%zhang%&rsquo;的效率是很差的。<br />
　　　　　　　　如果要查询以Mac开始的行，可以写成WHERE name LIKE &lsquo;Mac%&rsquo;，<br />
　　　　　　　　但是WHERE name &gt;= &lsquo;Mac&rsquo; AND name &lt; &lsquo;Mad&rsquo;的效率好于前者。</font></p>
<p><font size="1" face="Tahoma">4. 列类型的选择与查询效率<br />
　　a. 使用定长列，不使用可变长列。特别对于经常修改的表，变长列更容易产生碎片。<br />
　　b. 在较短的列能够满足要求时不要使用较长的列<br />
　　　　比如能使用CHAR(40)就不要使用CHAR(60)，好处：节省空间、节省I/O操作时间。<br />
　　c. 将列定义为NOT NULL<br />
　　　　这样处理速度更快，所需空间也更少。而且有时还能简化查询，因为不需要检查是否存在行例NULL。<br />
　　d. 考虑使用ENUM列<br />
　　　　如果某列的值的数量有限，应该考虑将其转换为ENUM类型。ENUM在内部使用数值表示，具有更快的处理速度。<br />
　　e. 使用PROCEDURE ANALYSE()<br />
　　　　比如SELECT * FROM commodity PROCEDURE ANALYSE();<br />
　　　　会告诉你该列的最大值、最小值、平均值，以及推荐的列类型等等（主要是ENUM）。<br />
　　f. 对容易产生碎片的表使用OPTIMIZE TABLE<br />
　　　　以常进行修改的表、特别包含了变长列（特别是BLOB类型）的表，容易产生碎片。<br />
　　g. 除非需要，应避免检索BLOB或TEXT值　――节省网络传输时间<br />
　　h. 将BLOB或TEXT列分离到一个独立的表中<br />
　　　　在某些情况下，将BLOB或TEXT列从表中移出可能具有一定意义，比如可将剩下的字段设置为定长格式，可以减少碎片，加快处理速度。</font></p>
<p><font size="1" face="Tahoma">5. 有效地装载数据<br />
　　基本理论：<br />
　　a. 成批装载比单行装载更快，因为不需要在装载每个记录后就刷新索引。<br />
　　b. 在表无索引的时候装载比有索引装载快，因为有索引的时候不仅需要写到数据文件，还需要写到索引文件。<br />
　　c. 较短的语句比较长的语句快，因为服务器分析较少，网络传输量也较少。</font></p>
<p><font size="1" face="Tahoma">　　实际结论：<br />
　　a. LOAD DATA比INSERT效率高。<br />
　　b. LOAD DATE比LOAD DATA LOCAL效率高。因为使用LOAD DATA，文件必须在服务器上（需要有FILE权限），节省了网络传输时间。<br />
　　c. 如果必须使用INSERT，应该使用其多行插入形式。比如：<br />
　　　　INSERT INTO student VALUES (1, &lsquo;AAA&rsquo;), (2, &lsquo;BBB&rsquo;), &hellip;<br />
　　　　这样会减少索引创建的次数，也可以减少网络传送SQL语句的时间。</font></p>
<p><font size="1" face="Tahoma">　　　　如果使用mysqldump来生成SQL备份文件，应该使用&mdash;extended-insert选项，使备份文件生成为多行插入形式。或者使用&mdash;opt参数。<br />
　　d. 使用压缩参数。当需要在客户机/服务器间传输数据时，对于大多数客户机，可以使用&mdash;compress参数。但一般只用于较慢的网络，因为&mdash;compress参数需要占用更多的处理器时间。<br />
　　e. 让MySQL来插入缺省值　――减少传输时间和服务器分析语句时间。<br />
　　f. 在装载大量数据之前不要建立索引，待装载完成后再建立索引。或者在装载前删除索引，完成后再重建。</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/37137#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Dec 2006 15:42:51 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/37137</link>
        <guid>http://moogle.javaeye.com/blog/37137</guid>
      </item>
      <item>
        <title>Hibernate 要点</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35764" style="color:red;">http://moogle.javaeye.com/blog/35764</a>&nbsp;
          发表时间: 2006年11月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <ol>
    <li><font size="3">Hibernate 如果采用 ThreadLocal 的session .在事务被提交后系统会自动关闭session.</font> </li>
    <li><font size="3">Hibernate中对于字典代码的关系问题,有一个比较简单的配置方法.<br />
    使用<span class="attribute">formula, filter, subselect <font face="Arial"><a href="http://dev2dev.bea.com.cn/techdoc/20060109720.html">http://dev2dev.bea.com.cn/techdoc/20060109720.html</a></font><br />
    </span></font><font size="3">xml 代码</font>
    <p><font size="3"></font></p>
    </li>
</ol>
<p>&nbsp;</p>
<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">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;etCode&quot;</span><span>&nbsp;</span><span class="attribute">column</span><span>=</span><span class="attribute-value">&quot;ETCODE&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;java.lang.String&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp; &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;entTypeName&quot;</span><span>&nbsp;</span><span class="attribute">formula</span><span>=</span><span class="attribute-value">&quot;(&nbsp;select&nbsp;s.name&nbsp;from&nbsp;ValueSet&nbsp;s&nbsp;where&nbsp;s.code&nbsp;=&nbsp;etCode&nbsp;)&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;java.lang.String&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35764#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 24 Nov 2006 08:32:03 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35764</link>
        <guid>http://moogle.javaeye.com/blog/35764</guid>
      </item>
      <item>
        <title>Log4j应用</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35153" style="color:red;">http://moogle.javaeye.com/blog/35153</a>&nbsp;
          发表时间: 2006年11月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3"><a href="../../../admin/show/35153"><span class="postdesc"></span></a><strong><font color="#339966">1.Log4j初始化:</font></strong><br />
最简单的配置方式：将配置文件取名<em><font face="Arial">log4j.properties</font></em>，放到WEB-INF/classes下<br />
<br />
</font><font size="3"><font color="#339966"><strong>2.log4j日志分级输出到不同文件的配置</strong><br />
</font></font><font size="3"><br />
例如想只把log4j的debug信息输出到debug.log.error信息输出到error.log，info信息输出到info.log</font></p>
<p><font size="3">log4j提供了下面一种方式来实现.</font></p>
<p><font size="3">必须使用xml方式进行配置才能够支持filter过滤元素。</font></p>
<p><font size="3">配置文件来自：</font></p>
<p><font size="3"><a href="http://www.mail-archive.com/log4j-user@jakarta.apache.org/msg09720.html">http://www.mail-archive.com/log4j-user@jakarta.apache.org/msg09720.html</a></font></p>
<p><font size="3">&nbsp;</font></p>
<h2><font size="3" color="#339966">3.把重要的业务日志异步批量写入数据库</font></h2>
<div class="code">
<div class="codeContent">
<pre class="code-java"><font size="3">log4j.logger.business=INFO,dblog4j.appender.db=org.apache.log4j.jdbc.JDBCAppender<br />log4j.appender.db.BufferSize=10log4j.appender.db.URL=jdbc:hsqldb:res:/hsqldb/bookstore<br />log4j.appender.db.driver=org.hsqldb.jdbcDriver<br />log4j.appender.db.user=sa<br />log4j.appender.db.password=<br />log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')<br />log4j.appender.db.layout=org.apache.log4j.PatternLayout</font></pre>
</div>
</div>
<p><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j提供了简单灵活且不影响性能的机制, 将重要业务日志写入数据库，方便日后的查询：</font></p>
<p><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.&nbsp; 建立一个任意命名的日志记录表，在log4j.properties里设置连接参数，根据刚才建的表名列名，编写插入的语句。&nbsp;</font></p>
<p><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.&nbsp; BufferSize=10 这样的参数可以让日志异步批量写入，不会影响系统性能。</font></p>
<p><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.&nbsp; 业务日志log最好不要用原来的package结构，而是在项目里协调一个独立的名字，如business。</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35153#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Thu, 23 Nov 2006 11:20:00 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35153</link>
        <guid>http://moogle.javaeye.com/blog/35153</guid>
      </item>
      <item>
        <title>pager-taglib 的使用</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35542" style="color:red;">http://moogle.javaeye.com/blog/35542</a>&nbsp;
          发表时间: 2006年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3">&nbsp;<a href="http://jsptags.com/tags/navigation/pager/index.jsp" target="_blank">Pager-taglib 2.0</a>  是一套分页标签库，可以灵活地实现多种不同风格的分页导航页面，并且可以很好的与服务器分页逻辑分离。这样一套标签库，你想你的分页效果怎样就能怎样。</font></p>
<p><font size="3">1、&lt;pg:pager&gt;,在这个标签库里就充当着一个领袖的作用，一切子标签都在它里面工作。就以上出现的参数进行解释一下：<br />
items：数据的纪录数，非页数<br />
url:分页跳进是使用的URL，该URL不可带参数，因为Pager会在给出的URL后面加上&quot;?page.offset=&quot;来标识当前偏移量。<br />
index：向前或向后一次大跳跃之后，当前页面在各个页数的什么位置，默认为Center。<br />
maxPageItems：显示最多的纪录数/页<br />
maxIndexPages：显示最多的分页数/次，如设为5的话，则会出现这样的情况  1 2 3 4 5 .或 3 4 5 6 7  这样的形式，其实她自带的DEMO都喜欢把页数展现出来排成一排。<br />
isOffset：与pg:item配套使用，pg:item是用来显示数据的，实际上大多数情况是我们不需要这个标签，该值默认即可<br />
export： 这个属性比较重要，官方文档也对此作好相对长篇幅的说明。这个属性是让标签给你暴露什么变量，当然这些变量是有选择的，如在Pager标签里，可以暴露出 来的变量有pageOffset及pageNumber，即页码偏移量及页码。通过这两个变量名，可以在Jsp或Java里面从Request里获得。 Export属性接受的值还有表达式，如currentPage=pageNumber表示，把pageNumber的值暴露出来，并赋给一个叫 CurrentPage的变量，这个变量将被保存到Request中，在Jsp或Java中可以得到。<br />
scope：有Reuqest、page可选<br />
<br />
2、 &lt;pg:param&gt;这个标签很有用，用来设置将要加入到URL的变量。使用Name属性指定即可。在示范时，因为Spring的 Action的URL后面带参数，为/springside/bookstore.do?method=newBooks这时URL<br />
<br />
3、&lt;pg:index&gt;这个标签说明分页显示开始了。跳进我们Include的页面。再看看详细的情况。</font></p>
<p><font size="3">二、自定义分页导航页</font></p>
<p><font size="3">用来定义分页导航页的标签有pg:first、pg:skip、pg:pages、pg:pre、pg:next、pg:last等。从名字上很容 易看出他们是干什么用的。Tager本身带的Demo演示了六种以上的自定义风格</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35542#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Wed, 22 Nov 2006 23:36:44 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35542</link>
        <guid>http://moogle.javaeye.com/blog/35542</guid>
      </item>
      <item>
        <title>[转]UrlRewrite Filter</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35529" style="color:red;">http://moogle.javaeye.com/blog/35529</a>&nbsp;
          发表时间: 2006年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一：首先在到官方站点下载最新的jar文件</p>
<p><a href="http://tuckey.org/urlrewrite/manual/3.0/">http://tuckey.org/urlrewrite/manual/3.0/</a></p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>http:</span><span class="comment">//tuckey.org/urlrewrite/</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>二：在web.xm中加上如下的filter</p>
<div class="code_title">xml 代码</div>
<div class="code_title">
<div class="dp-highlighter">
<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>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>UrlRewriteFilter</span><span class="tag"><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</span><span class="tag"><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">filter</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">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>UrlRewriteFilter</span><span class="tag"><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag"><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
</div>
<div class="code_title">&nbsp;</div>
<div class="code_title">三：创建匹配的规则</div>
<div class="code_title">我们这里的就是要的是根据不同的用户，转到不同的页面去,</div>
<div class="code_title">如:</div>
<div class="code_title">&nbsp;&nbsp;&nbsp; <a href="http://www.com/user/martin">http://www.com/user/martin</a></div>
<div class="code_title">转到</div>
<div class="code_title">&nbsp;&nbsp;&nbsp; <a href="http://www.com/portal.html?username=martin">http://www.com/portal.html?username=martin</a></div>
<div class="code_title">&nbsp;</div>
<div class="code_title">xml 代码</div>
<div class="code_title">
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><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></li>
    <li class=""><span>&lt;!DOCTYPE&nbsp;urlrewrite&nbsp;PUBLIC&nbsp;&quot;-//tuckey.org//DTD&nbsp;UrlRewrite&nbsp;3.0//EN&quot; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://tuckey.org/res/dtds/urlrewrite3.0.dtd&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">urlrewrite</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">rule</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">from</span><span class="tag">&gt;</span><span>^/user/(.*)$</span><span class="tag">&lt;/</span><span class="tag-name">from</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">to</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;forward&quot;</span><span class="tag">&gt;</span><span>/portal.html\?</span><span class="attribute">username</span><span>=$1</span><span class="tag">&lt;/</span><span class="tag-name">to</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">rule</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">urlrewrite</span><span class="tag">&gt;</span><span>&nbsp; <br />
    </span></li>
</ol>
</div>
<br />
<br />
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35529#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Nov 2006 21:17:21 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35529</link>
        <guid>http://moogle.javaeye.com/blog/35529</guid>
      </item>
      <item>
        <title>[转]showModalDialog和showModelessDialog</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35475" style="color:red;">http://moogle.javaeye.com/blog/35475</a>&nbsp;
          发表时间: 2006年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt"><strong>基本介绍：<br />
            </strong>showModalDialog() (IE 4+ 支持)<br />
            showModelessDialog() (IE 5+ 支持)<br />
            window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。<br />
            window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。<br />
            <br />
            <strong>使用方法：</strong><br />
            vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])<br />
            vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])<br />
            <br />
            <strong>参数说明：</strong><br />
            sURL--必选参数，类型：字符串。用来指定对话框要显示的文档的URL。<br />
            vArguments--可选参数，类型：变体。用来向对话框传递参数。传递的参数类型不限，包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。<br />
            sFeatures--可选参数，类型：字符串。用来描述对话框的外观等信息，可以使用以下的一个或几个，用分号&ldquo;;&rdquo;隔开。<br />
            1.dialogHeight :对话框高度，不小于１００px，ＩＥ４中dialogHeight 和 dialogWidth 默认的单位是em，而ＩＥ５中是px，为方便其见，在定义modal方式的对话框时，用px做单位。<br />
            2.dialogWidth: 对话框宽度。<br />
            3.dialogLeft: 离屏幕左的距离。<br />
            4.dialogTop: 离屏幕上的距离。<br />
            5.center: {yes | no | 1 | 0 }：窗口是否居中，默认yes，但仍可以指定高度和宽度。<br />
            6.help: {yes | no | 1 | 0 }：是否显示帮助按钮，默认yes。<br />
            7.resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改变大小。默认no。<br />
            8.status: {yes | no | 1 | 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。<br />
            9.scroll:{ yes | no | 1 | 0 | on | off }：指明对话框是否显示滚动条。默认为yes。<br />
            下面几个属性是用在HTA中的，在一般的网页中一般不使用。<br />
            10.dialogHide:{ yes | no | 1 | 0 | on | off }：在打印或者打印预览时对话框是否隐藏。默认为no。<br />
            11.edge:{ sunken | raised }：指明对话框的边框样式。默认为raised。<br />
            12.unadorned:{ yes | no | 1 | 0 | on | off }：默认为no。<br />
            <br />
            <strong>参数传递：</strong><br />
            1.要想对话框传递参数，是通过vArguments来进行传递的。类型不限制，对于字符串类型，最大为4096个字符。也可以传递对象，例如：<br />
            <div class="code">&lt;script&gt;<br />
            var obj = new Object();<br />
            obj.name=&quot;ttop&quot;;<br />
            window.showModalDialog(&quot;test.htm&quot;,obj,&quot;dialogWidth=200px;dialogHeight=100px&quot;);<br />
            &lt;/script&gt;<br />
            test.htm<br />
            &lt;script&gt;<br />
            var obj = window.dialogArguments<br />
            alert(&quot;您传递的参数为：&quot; + obj.name)<br />
            &lt;/script&gt;</div>
            <br />
            2.可以通过window.returnValue向打开对话框的窗口返回信息，当然也可以是对象。例如：<br />
            <div class="code">&lt;script&gt;<br />
            str =window.showModalDialog(&quot;test.htm&quot;,,&quot;dialogWidth=200px;dialogHeight=100px&quot;);<br />
            alert(str);<br />
            &lt;/script&gt;<br />
            test.htm<br />
            &lt;script&gt;<br />
            window.returnValue=&quot;/&quot;;<br />
            &lt;/script&gt;</div>
            <div class="code">&nbsp;</div>
            <div class="code">
            <p><strong>一、showModalDialog和showModelessDialog有什么不同？</strong><br />
            　　showModalDialog：被打开后就会始终保持输入焦点。除非对话框被关闭，否则用户无法切换到主窗口。类似alert的运行效果。<br />
            　　showModelessDialog：被打开后，用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)</p>
            <p><strong>二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口？</strong><br />
            　　在被打开的网页里加上&lt;base target=&quot;_self&quot;&gt;就可以了。这句话一般是放在&lt;html&gt;和&lt;body&gt;之间的。</p>
            <p><strong>三、怎样才刷新showModalDialog和showModelessDialog里的内容？</strong><br />
            　　在showModalDialog和showModelessDialog里是不能按F5刷新的，又不能弹出菜单。这个只能依靠javascript了，以下是相关代码：</p>
            <p>&lt;body onkeydown=&quot;if (event.keyCode==116){reload.click()}&quot;&gt;<br />
            &lt;a id=&quot;reload&quot; href=&quot;filename.htm&quot; style=&quot;display:none&quot;&gt;reload...&lt;/a&gt;</p>
            <p>　　将filename.htm替换成网页的名字然后将它放到你打开的网页里，按F5就可以刷新了，注意，这个要配合&lt;base target=&quot;_self&quot;&gt;使用，不然你按下F5会弹出新窗口的。</p>
            <p><strong>四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。<br />
            </strong>　　&lt;input type=&quot;button&quot; value=&quot;关闭&quot; onclick=&quot;window.close()&quot;&gt;<br />
            　　也要配合&lt;base target=&quot;_self&quot;&gt;，不然会打开一个新的IE窗口，然后再关掉的。</p>
            <p><strong>五、showModalDialog和showModelessDialog数据传递技巧。</strong><br />
            　　(作者语：本来想用一问一答形式来写的，但是我想不出这个怎么问，所以只好这样了。)<br />
            　　这个东西比较麻烦，我改了好几次了不是没办法说明白(语文水平越来越差了)，只好用个例子说明了。<br />
            　　例子：<br />
            　　　　现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name</p>
            <p>　　　　　　一般的传递方式：<br />
            　　　　　　　　window.showModalDialog(&quot;filename.htm&quot;,var_name)<br />
            　　　　　　　　//传递var_name变量<br />
            　　　　　　在showModalDialog(或showModelessDialog)读取和设置时：<br />
            　　　　　　　　alert(window.dialogArguments)//读取var_name变量<br />
            　　　　　　　　window.dialogArguments=&quot;oyiboy&quot;//设置var_name变量<br />
            　　　　这种方式是可以满足的，但是当你想在操作var_name同时再操作第二个变理var_id时呢？就无法再进行操作了。这就是这种传递方式的局限性。<br />
            　　　　<br />
            　　　　　　以下是我建议使用的传递方式：<br />
            　　　　　　　　window.showModalDialog(&quot;filename.htm&quot;,window)<br />
            　　　　　　　　//不管要操作什么变量，只直传递主窗口的window对象<br />
            　　　　　　在showModalDialog(或showModelessDialog)读取和设置时：<br />
            　　　　　　　　alert(window.dialogArguments.var_name)//读取var_name变量<br />
            　　　　　　　　window.dialogArguments.var_name=&quot;oyiboy&quot;//设置var_name变量</p>
            <p>　　　　　　　　同时我也可以操作var_id变量<br />
            　　　　　　　　alert(window.dialogArguments.var_id)//读取var_id变量<br />
            　　　　　　　　window.dialogArguments.var_id=&quot;001&quot;//设置var_id变量</p>
            <p>　　　　　　　　同样还可以对主窗口的任何对象进行操作，如form对象里的元素。<br />
            　　　　　　　　window.dialogArguments.form1.index1.value=&quot;这是在设置index1元素的值&quot;</p>
            <p><strong>六、多个showModelessDialog的相互操作。</strong><br />
            　　以下代码的主要作用是在一个showModelessDialog里移动别一个showModelessDialog的位置。</p>
            <p>　　主文件的部份js代码。<br />
            　　var s1=showModelessDialog('控制.htm',window,&quot;dialogTop:1px;dialogLeft:1px&quot;）&nbsp;//打开控制窗口<br />
            　　var s2=showModelessDialog('about:blank',window,&quot;dialogTop:200px;dialogLeft:300px&quot;）　　//打开被控制窗口</p>
            <p>　　控制.htm的部份代码。<br />
            　　&lt;script&gt;<br />
            　　　　//操作位置数据，因为窗口的位置数据是&quot;xxxpx&quot;方式的，所以需要这样的一个特殊操作函数。<br />
            &nbsp;function countNumber(A_strNumber,A_strWhatdo)<br />
            &nbsp;{<br />
            &nbsp;&nbsp;A_strNumber=A_strNumber.replace('px','')<br />
            &nbsp;&nbsp;A_strNumber-=0<br />
            &nbsp;&nbsp;switch(A_strWhatdo)<br />
            &nbsp;&nbsp;{<br />
            &nbsp;&nbsp;case &quot;-&quot;:A_strNumber-=10;break;<br />
            &nbsp;&nbsp;case &quot;+&quot;:A_strNumber+=10;break;<br />
            &nbsp;&nbsp;}<br />
            &nbsp;&nbsp;return A_strNumber + &quot;px&quot;<br />
            &nbsp;}<br />
            　　&lt;/script&gt;<br />
            　　&lt;input type=&quot;button&quot; onclick=&quot;window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'-')&quot; value=&quot;上移&quot;&gt;<br />
            　　&lt;input type=&quot;button&quot; onclick=&quot;window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'-')&quot; value=&quot;左移&quot;&gt;<br />
            　　&lt;input type=&quot;button&quot; onclick=&quot;window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'+')&quot; value=&quot;右移&quot;&gt;<br />
            　　&lt;input type=&quot;button&quot; onclick=&quot;window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'+')&quot; value=&quot;下移&quot;&gt;</p>
            <p>　　以上关键部份是：<br />
            　　　　窗口命名方式：var s1=showModelessDialog('控制.htm',window,&quot;dialogTop:1px;dialogLeft:1px&quot;）<br />
            　　　　变量访问方式：window.dialogArguments.s2.dialogTop</p>
            <p>　　这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能，通过这个原理，在showModelessDialog之间相互控制各自的显示页面，传递变量和数据等。这要看各位的发挥了。</p>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35475#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Nov 2006 13:34:22 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35475</link>
        <guid>http://moogle.javaeye.com/blog/35475</guid>
      </item>
      <item>
        <title>[转]Tomcat 5.0.28 连接池配置</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35428" style="color:red;">http://moogle.javaeye.com/blog/35428</a>&nbsp;
          发表时间: 2006年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>其实Tomcat的连接池配置并不是很难，但也花费了我一些时间。今天，终于搞定，希望将经验分享出来，能给未解决问题的朋友提供帮助。 <br />
这里我的Tomcat版本为5.0.28，这个版本应该说是Tomcat比较稳定的一个版本。 <br />
首先备份你的$TomcatHome$/conf/server.xml文件（$TomcatHome$是指你的tomcat安装路径）,然后在&lt;Host&gt;节点下添加: <br />
</p>
<div class="code_title">代码</div>
<div class="code_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">Context</span><span>&nbsp;</span><span class="attribute">path</span><span>=</span><span class="attribute-value">&quot;/pool&quot;</span><span>&nbsp;</span><span class="attribute">docBase</span><span>=</span><span class="attribute-value">&quot;pool&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Resource</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;jdbc/test&quot;</span><span>&nbsp;</span><span class="attribute">scope</span><span>=</span><span class="attribute-value">&quot;Shareable&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;javax.sql.DataSource&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ResourceParams</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;jdbc/test&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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>factory</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>org.apache.commons.dbcp.BasicDataSourceFactory</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments">&lt;!--&nbsp;DBCP&nbsp;database&nbsp;connection&nbsp;settings&nbsp;--&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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>url</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>jdbc:jtds:sqlserver://localhost:1433;</span><span class="attribute">DatabaseName</span><span>=</span><span class="attribute-value">pubs</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>driverClassName</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>net.sourceforge.jtds.jdbc.Driver</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>username</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>sa</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>password</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>sa</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments">&lt;!--&nbsp;DBCP&nbsp;connection&nbsp;pooling&nbsp;options&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>maxWait</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>3000</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>maxIdle</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>100</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</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">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>maxActive</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>10</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">parameter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">ResourceParams</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">Context</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<script>render_code();</script><br />
其中红色部分是你需要修改的。 <br />
&lt;Context path=&quot;/pool&quot; docBase=&quot;pool&quot;&gt;这里的pool是指你的项目在tomcat发布目录webapps下的目录路径，这里我的项目目录为：.../webapps/pool <br />
&lt;Resource name=&quot;jdbc/test&quot;..&gt;jdbc/test为需要通过jndi调用的数据源名称。 <br />
&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;这里我们用的是dbcp连接池包，这是apache提供的一个免费开源连接池，而且效率和稳定性都不错。如果你使用的是tomcat5x或以上的版本，可以在$TomcatHome$/common/lib目录下找到它。 <br />
关于数据库的设置，这里就不在多说。
<p>&nbsp;</p>
<p>下面打开web.xml文件，在其根节点下添加数据源的引用设置。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_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">resource-ref</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">res-ref-name</span><span class="tag">&gt;</span><span>jdbc/test</span><span class="tag">&lt;/</span><span class="tag-name">res-ref-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">res-type</span><span class="tag">&gt;</span><span>javax.sql.DataSource</span><span class="tag">&lt;/</span><span class="tag-name">res-type</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">res-auth</span><span class="tag">&gt;</span><span>Container</span><span class="tag">&lt;/</span><span class="tag-name">res-auth</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">resource-ref</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<script>render_code();</script><br />
最后我们在代码中从连接池获得Connection对象。 <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>Context&nbsp;context&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;InitialContext(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="comment">//获得数据源 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>DataSource&nbsp;ds&nbsp;=&nbsp;context.lookup(</span><span class="string">&quot;java:comp/env/jdbc/test&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="comment">//获取连接 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Connection&nbsp;conn&nbsp;=&nbsp;ds.getConnection(); &nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<script>render_code();</script><br />
这样我们就在代码中获得了Connection对象，至于剩下的操作，就完全是jdbc操作了。
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35428#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Nov 2006 09:58:33 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35428</link>
        <guid>http://moogle.javaeye.com/blog/35428</guid>
      </item>
      <item>
        <title>[转]Tomcat类加载机制</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35419" style="color:red;">http://moogle.javaeye.com/blog/35419</a>&nbsp;
          发表时间: 2006年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://dev.csdn.net/develop/article/27/27225.shtm">TOMCAT源码分析(启动框架)</a><br />
<span id="ArticleTitle1_ArticleTitle1_lblTitle"><a href="http://www.csdn.net/Develop/read_article.asp?id=28075">TOMCAT源码分析(消息处理)</a></span></p>
<p>yahoo中国的一个面试题，转至水木，希望对大家有用.</p>
<p>Tomcat Server在启动的时候将构造一个ClassLoader树，以保证模块的类库是私有的 <br />
Tomcat Server的ClassLoader结构如下： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;Bootstrap &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;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Common &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>Catalina&nbsp;&nbsp;Shared &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&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;WebApp1&nbsp;&nbsp;WebApp2 &nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<script>render_code();</script><br />
其中： <br />
- Bootstrap - 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/*.jar <br />
- System - 载入$CLASSPATH/*.class <br />
- Common - 载入$CATALINA_HOME/common/...，它们对TOMCAT和所有的WEB APP都可见 <br />
- Catalina - 载入$CATALINA_HOME/server/...，它们仅对TOMCAT可见，对所有的WEB APP都不可见 <br />
- Shared - 载入$CATALINA_HOME/shared/...，它们仅对所有WEB APP可见，对TOMCAT不可见（也不必见） <br />
- WebApp - 载入ContextBase?/WEB-INF/...，它们仅对该WEB APP可见
<p>&nbsp;</p>
<p>每个运行中的线程都有一个成员contextClassLoader，用来在运行时动态地载入其它类，系统默认的contextClassLoader是systemClassLoader，所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类，可以使用Thread.currentThread().setContextClassLoader(...);更改当前线程的contextClassLoader，来改变其载入类的行为</p>
<p>ClassLoader被组织成树形，一般的工作原理是： <br />
1) 线程需要用到某个类，于是contextClassLoader被请求来载入该类 <br />
2) contextClassLoader请求它的父ClassLoader来完成该载入请求 <br />
3) 如果父ClassLoader无法载入类，则contextClassLoader试图自己来载入 <br />
注意：WebApp?ClassLoader的工作原理和上述有少许不同： <br />
它先试图自己载入类（在ContextBase?/WEB-INF/...中载入类），如果无法载入，再请求父ClassLoader完成</p>
<p>由此可得： <br />
- 对于WEB APP线程，它的contextClassLoader是WebApp?ClassLoader <br />
- 对于Tomcat Server线程，它的contextClassLoader是CatalinaClassLoader </p>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35419#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 22 Nov 2006 08:58:18 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35419</link>
        <guid>http://moogle.javaeye.com/blog/35419</guid>
      </item>
      <item>
        <title>li 隐藏/显示内容</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/35278" style="color:red;">http://moogle.javaeye.com/blog/35278</a>&nbsp;
          发表时间: 2006年11月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;style&nbsp;type=</span><span class="string">&quot;text/css&quot;</span><span>&gt;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.dc&nbsp;{&nbsp;display:&nbsp;none;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/style&gt;&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;script&nbsp;language=<span class="string">&quot;javascript&quot;</span><span>&gt;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">function</span><span>&nbsp;test(e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.style.display&nbsp;=&nbsp;e.style.display&nbsp;==&nbsp;<span class="string">'inline'</span><span>&nbsp;?&nbsp;</span><span class="string">'none'</span><span>&nbsp;:&nbsp;</span><span class="string">'inline'</span><span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/script&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
<div class="code_title">html 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;test(children[0]);&quot;</span><span class="tag">&gt;</span><span>新闻&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;dc&quot;</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;event.cancelBubble&nbsp;=&nbsp;true;&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>11111</span><span class="tag">&lt;/</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;test(children[0]);&quot;</span><span class="tag">&gt;</span><span>音乐&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;dc&quot;</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;event.cancelBubble&nbsp;=&nbsp;true;&quot;</span><span class="tag">&gt;</span><span>&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;<span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>22222</span><span class="tag">&lt;/</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>&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;<span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>2222222</span><span class="tag">&lt;/</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/35278#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 20 Nov 2006 23:08:00 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/35278</link>
        <guid>http://moogle.javaeye.com/blog/35278</guid>
      </item>
      <item>
        <title>PTViewer 全景显示</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/34896" style="color:red;">http://moogle.javaeye.com/blog/34896</a>&nbsp;
          发表时间: 2006年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          全景显示<br />
<a href="http://www.fsoft.it/panorama/ptviewer.htm">http://www.fsoft.it/panorama/ptviewer.htm</a><br />
<br />
<br />
applet- code=&quot;ptviewer.class&quot; archive=&quot;Applet/ptviewer.jar&quot; width=600 height=450&gt;<br />
param name=file value=&quot;001.jpg&quot;&gt;<br />
param name=cursor value=&quot;MOVE&quot;&gt;<br />
param name=pan value=-105&gt;<br />
param name=showToolbar value=&quot;true&quot;&gt;<br />
param name=imgLoadFeedback value=&quot;false&quot;&gt;<br />
param name=hotspot0 value=&quot;X21.3 Y47.7 u'Sample27L2.htm' n'Hotspot description'&quot;&gt;<br />
/applet-&gt;
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/34896#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Sun, 19 Nov 2006 00:03:58 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/34896</link>
        <guid>http://moogle.javaeye.com/blog/34896</guid>
      </item>
      <item>
        <title>XStream使用学习</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/34866" style="color:red;">http://moogle.javaeye.com/blog/34866</a>&nbsp;
          发表时间: 2006年11月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<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">import</span><span> java.io.File;   </span></span> </li>
    <li class=""><span></span><span class="keyword">import</span><span> java.io.FileInputStream;   </span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span> java.io.FileOutputStream;   </span> </li>
    <li class=""><span></span><span class="keyword">import</span><span> java.io.InputStream;   </span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span> java.io.InputStreamReader;   </span> </li>
    <li class=""><span></span><span class="keyword">import</span><span> java.io.OutputStream;   </span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span> java.io.OutputStreamWriter;   </span> </li>
    <li class=""><span></span><span class="keyword">import</span><span> java.nio.charset.Charset;   </span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span> java.util.ArrayList;   </span> </li>
    <li class=""><span></span><span class="keyword">import</span><span> java.util.List;   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span></span><span class="keyword">import</span><span> com.thoughtworks.xstream.XStream;   </span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span> com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider;   </span> </li>
    <li class=""><span>  </span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> test {   </span> </li>
    <li class=""><span>    </span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args) {   </span> </li>
    <li class="alt"><span>        test.write();   </span> </li>
    <li class=""><span>        test.read();   </span> </li>
    <li class="alt"><span>    }   </span> </li>
    <li class=""><span>  </span> </li>
    <li class="alt"><span>    </span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> write() {   </span> </li>
    <li class=""><span>        XStream sm = </span><span class="keyword">new</span><span> XStream();   </span> </li>
    <li class="alt"><span>        mytest t = </span><span class="keyword">new</span><span> mytest();   </span> </li>
    <li class=""><span>        t.setName(</span><span class="string">"asd"</span><span>);   </span> </li>
    <li class="alt"><span>        t.setXb(</span><span class="string">"男"</span><span>);   </span> <span></span></li>
    <li class=""><span>        </span><span class="keyword">try</span><span> {   </span> </li>
    <li class="alt"><span>            OutputStream out = </span><span class="keyword">new</span><span> FileOutputStream(</span><span class="keyword">new</span><span> File(</span><span class="string">"C:\\111.xml"</span><span>));   </span> </li>
    <li class=""><span>            OutputStreamWriter writer = </span><span class="keyword">new</span><span> OutputStreamWriter(out, Charset.forName(</span><span class="string">"GBK"</span><span>));   </span> </li>
    <li class="alt"><span>            writer.write(</span><span class="string">"<!--l version=\"1.0\" encoding=\"GBK\-->\n"</span><span>);   </span> </li>
    <li class=""><span>            </span><span class="comment">//sm.omitField(mytest.class, "name"); </span><span>  </span> </li>
    <li class="alt"><span>               </span> </li>
    <li class=""><span>            sm.toXML(t, writer);   </span> </li>
    <li class="alt"><span>            out.close();   </span> </li>
    <li class=""><span>        } </span><span class="keyword">catch</span><span> (Exception e) {   </span> </li>
    <li class="alt"><span>            e.printStackTrace();   </span> </li>
    <li class=""><span>        }   </span> </li>
    <li class="alt"><span>    }   </span> </li>
    <li class=""><span>  </span> </li>
    <li class="alt"><span>    </span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> read() {   </span> </li>
    <li class=""><span>        XStream sm = </span><span class="keyword">new</span><span> XStream(</span><span class="keyword">new</span><span> PureJavaReflectionProvider());   </span> </li>
    <li class="alt"><span>        </span><span class="comment">//XStream sm = new XStream(); </span><span>  </span> </li>
    <li class=""><span>        </span><span class="keyword">try</span><span> {   </span> </li>
    <li class="alt"><span>            InputStream in = </span><span class="keyword">new</span><span> FileInputStream(</span><span class="keyword">new</span><span> File(</span><span class="string">"C:\\111.xml"</span><span>));   </span> </li>
    <li class=""><span>            InputStreamReader reader = </span><span class="keyword">new</span><span> InputStreamReader(in, Charset.forName(</span><span class="string">"GBK"</span><span>));   </span> </li>
    <li class="alt"><span>            mytest t = (mytest) sm.fromXML(in);   </span> </li>
    <li class=""><span>            System.out.println(t.getXb());   </span> </li>
    <li class="alt"><span>            in.close();   </span> </li>
    <li class=""><span>        } </span><span class="keyword">catch</span><span> (Exception e) {   </span> </li>
    <li class="alt"><span>            e.printStackTrace();   </span> </li>
    <li class=""><span>        }   </span> </li>
    <li class="alt"><span>    }   </span> </li>
    <li class=""><span>}   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span></span><span class="keyword">class</span><span> mytest {   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span>    </span><span class="keyword">private</span><span> String name;   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span>    </span><span class="keyword">private</span><span> String xb;   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span>    </span><span class="keyword">public</span><span> String getName() {   </span> </li>
    <li class="alt"><span>        </span><span class="keyword">return</span><span> name;   </span> </li>
    <li class=""><span>    }   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span>    </span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setName(String name) {   </span> </li>
    <li class="alt"><span>        </span><span class="keyword">this</span><span>.name = name;   </span> </li>
    <li class=""><span>    }   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span>    </span><span class="keyword">public</span><span> String getXb() {   </span> </li>
    <li class="alt"><span>        </span><span class="keyword">return</span><span> xb;   </span> </li>
    <li class=""><span>    }   </span> </li>
    <li class="alt"><span>  </span> </li>
    <li class=""><span>    </span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setXb(String xb) {   </span> </li>
    <li class="alt"><span>        </span><span class="keyword">this</span><span>.xb = xb;   </span> </li>
    <li class=""><span>    }   </span> </li>
    <li class="alt"><span>}   </span> <span></span></li>
</ol>
</div>
<ol>
    <li> <strong>XStream 的编码:<br />
    </strong>本身并没有实现编码，必须依靠java.io.Writer来实现输出编码的转换。参考上例代码<br />
    </li>
    <li><strong>XStream 的常用方法<br />
    </strong><font face="Arial">xstream.omitField(mytest.class, "name");               定义某一个属性的值不进行xml序列化。<br />
    </font><font face="Arial"><font face="Arial">xstream.alias("cat", Cat.class);<br />
    xstream.aliasField("age", Cat.class, "mAge");        对某一个类和类的属性进行别名定义。<br />
    <font face="Arial">xstream.useAttributeFor(String.class);                     对所有String类型的字段定义为属性tag显示<br />
    <font face="Arial">xstream.useAttributeFor("name".String.class);       对所有String类型的字段名成为name 定义为属性tag显示</font></font></font></font><font face="Arial"><br />
    </font><br />
    </li>
</ol>
</font><strong><br />
</strong>
          <br/>
          <span style="color:red;">
            <a href="http://moogle.javaeye.com/blog/34866#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Sat, 18 Nov 2006 17:46:29 +0800</pubDate>
        <link>http://moogle.javaeye.com/blog/34866</link>
        <guid>http://moogle.javaeye.com/blog/34866</guid>
      </item>
      <item>
        <title>开发和使用JSP自定义标签过程</title>
        <author>moogle</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moogle.javaeye.com">moogle</a>&nbsp;
          链接：<a href="http://moogle.javaeye.com/blog/34672" style="color:red;">http://moogle.javaeye.com/blog/34672</a>&nbsp;
          发表时间: 2006年11月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>开发和使用JSP自定义标签过程:</p>
<p>1.开发标签实现类.<br />
&nbsp; HelloTag_Interface.java文件内容:</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">import</span><span>&nbsp;javax.servlet.jsp.tagext.Tag; &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.jsp.PageContext; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.jsp.JspException; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.io.*; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.jsp.JspTagException; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="comment">/**&nbsp;*/</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;以实现Tag接口的方式来开发标签程序 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HelloTag &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Tag&nbsp;...{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;PageContext&nbsp;pageContext; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Tag&nbsp;parent; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;HelloTag()...{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">super</span><span>(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="comment">/**&nbsp;*/</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;设置标签的页面上下文 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;pageContext </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPageContext(PageContext&nbsp;pageContext)&nbsp;...{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageContext=pageContext; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="comment">/**&nbsp;*/</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;设置上一级标签 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;t </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setParent(Tag&nbsp;parent)&nbsp;...{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.parent=parent; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Tag&nbsp;getParent()&nbsp;...{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>.parent; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="comment">/**&nbsp;*/</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;开始标签时的操作 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;JspException </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;doStartTag()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;JspException&nbsp;...{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>.SKIP_BODY;</span><span class="comment">//返回SKIP_BODY，表示不计算标签体 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/**&nbsp;*/</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;结束标签时的操作 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;JspException </span>&nbsp;</span></li>
    <li class="alt"><span