﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-无忧无卤</title><link>http://www.blogjava.net/beyondwcm/</link><description>鸟在笼中，恨关羽不能张飞;人处世上，要八戒更需悟空</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 04:29:48 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 04:29:48 GMT</pubDate><ttl>60</ttl><item><title>JQuery 学习&amp;mdash;&amp;mdash;helloworld</title><link>http://www.blogjava.net/beyondwcm/archive/2011/04/08/347917.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Fri, 08 Apr 2011 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2011/04/08/347917.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/347917.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2011/04/08/347917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/347917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/347917.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 一、编写helloworld程序 </p> <p>从helloworld开始，在JQuery库中，$为JQuery的简写形式。 </p><pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;">&lt;html&gt; 

        &lt;head&gt; 

            &lt;script src="../jquery-1.3.1.js" type="text/javascript"&gt;&lt;/script&gt;     

            &lt;script type="text/javascript"&gt; 

                //其中$(document).ready(function(){})，可以简写为$(function(){}); 

                $(document).ready(function(){ //dom加载完毕后执行，类似于window.onload 

                        alert('helloworld !'); 

                }); 

            &lt;/script&gt; 

        &lt;/head&gt; 

        &lt;body&gt;&lt;body&gt; 

&lt;/html&gt; 

</pre>
<p>&nbsp;&nbsp;&nbsp; <span style="font-size: 9pt; font-family: 微软雅黑">二、$(document).ready与window.onload比较。 </span></p>
<p><span style="font-size: 9pt; font-family: 微软雅黑">&nbsp;&nbsp;&nbsp; 1、执行时机，window.onload为必须等待网页所有内容加载完毕后（包括图片）后才能执行。 </span></p>
<p><span style="font-size: 9pt; font-family: 微软雅黑">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而$(document).ready则在网页DOM结构绘制完毕后就执行，可能内容没有加载完毕。 </span></p>
<p><span style="font-size: 9pt; font-family: 微软雅黑">&nbsp;&nbsp;&nbsp; 2、编写个数，window.onload不能进行多次编写，后面编写的将覆盖前面编写的。$(document).ready可以进行多次编写。 </span></p>
<p><span style="font-size: 9pt; font-family: 微软雅黑">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每次都能够执行。</span></p><img src ="http://www.blogjava.net/beyondwcm/aggbug/347917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2011-04-08 23:09 <a href="http://www.blogjava.net/beyondwcm/archive/2011/04/08/347917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】Ext JS Grid在IE6 下宽度的问题解决方法</title><link>http://www.blogjava.net/beyondwcm/archive/2010/02/04/311954.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Thu, 04 Feb 2010 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2010/02/04/311954.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/311954.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2010/02/04/311954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/311954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/311954.html</trackback:ping><description><![CDATA[<p>解决方法： <br />
1、修改ext-all.css，找到.x-grid3-header-offset，修改为.x-grid3-header-offset{padding-left:1px;/*width:10000px;*/width:auto;} <br />
2、在grid中加入下面代码： </p>
<p>复制代码 代码如下:</p>
<p>monitorResize: true, <br />
doLayout: function() { <br />
this.setSize(Ext.get(this.getEl().dom.parentNode).getSize(true)); <br />
Ext.grid.GridPanel.prototype.doLayout.call(this); <br />
} </p>
<p>&nbsp;</p>
转http://www.fengfly.com/plus/view-165078-1.html
<img src ="http://www.blogjava.net/beyondwcm/aggbug/311954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2010-02-04 14:33 <a href="http://www.blogjava.net/beyondwcm/archive/2010/02/04/311954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]js 未结束的字符串常量</title><link>http://www.blogjava.net/beyondwcm/archive/2010/02/04/311892.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Thu, 04 Feb 2010 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2010/02/04/311892.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/311892.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2010/02/04/311892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/311892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/311892.html</trackback:ping><description><![CDATA[<h3><a href="http://wjboy49.javaeye.com/blog/400721">js 未结束的字符串常量</a></h3>
<div class="blog_content">今天在做JAVASCRIPT的时候,发现老是出现&#8221;未结束的字符串常量&#8221;. <br />
<br />
自己找了下应该是传参数的时候,有特殊字符引起的.网上也找了下,也有好多出现这种情况.做下总结,以方便以后查阅. <br />
<br />
1.JAVASCRIPT引用时,使用的字符语言不一致. <br />
比如:&lt;script type=&#8221;text/javascript&#8221; src=&#8221;xxx.js&#8221; charset=&#8221;UTF-8&#8243;&gt;.xxx.js文件内部使用的是GB2312的格式,外面调用使用的是UTF-8,所以文件内部部分特殊字符因为格式不一致,出现乱码,造成此原因. <br />
<br />
2.JAVASCRIPT输出HTML字符时,前后标记不匹配. <br />
这种比较常见,往往在输出字符串时,出现单引号(&#8217;)或双引号(&#8221;)不配对,或者是在document.write()的时候,没有正确输出单引号(&#8217;)或双引号(&#8221;) <br />
<br />
3.参数内出现HTML标记语言或包含换行符 <br />
我今天所遇到的是这种情况.因为我所得到的数据以参数形式传给一函数,结果该数据里包含换行符,造成了此错误. <br />
如:一般测试时只使用单行的数据,是正常的,未出现这个错误,. <br />
当测试时使用多行数据,并使用回车链换行,就出行了此错误.因为里面包含了换行符 <br />
<br />
对于第3种情况,我的解决方法是:不直接将该数据以参数形式传递,而是先将其赋值在一个隐藏的文本内,需要调用的函数里只需读取该文本里的内容即可. <br />
<br />
转 http://www.javaeye.com/topic/400721<br />
</div>
<img src ="http://www.blogjava.net/beyondwcm/aggbug/311892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2010-02-04 10:27 <a href="http://www.blogjava.net/beyondwcm/archive/2010/02/04/311892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】Weblogic和hibernate3异常：ClassNotFoundException: org.hibernate.hql.ast.HqlToken</title><link>http://www.blogjava.net/beyondwcm/archive/2010/02/01/311512.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Mon, 01 Feb 2010 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2010/02/01/311512.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/311512.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2010/02/01/311512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/311512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/311512.html</trackback:ping><description><![CDATA[<div class="tit">Weblogic和hibernate3异常：ClassNotFoundException: org.hibernate.hql.ast.HqlToken</div>
<div class="date">2009年08月25日 星期二 12:37</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>在做项目的时候，我用weblogic跑了一下自己的程序（开发一直在tomcat下），发现出现了这样的问题，<br />
            ClassNotFoundException: org.hibernate.hql.ast.HqlToken ，郁闷了半天，在tomcat下没有任何错误，为何到weblogic就有问题了呢？<br />
            在百度和google上搜了好久，换了n个关键词，才搜到原因如下：<br />
            原因: <br />
            Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器，在Hibernate的配置文件中，hibernate.query.factory_class属性用来选择查询翻译器。 <br />
            （1）选择Hibernate3.0的查询翻译器： <br />
            hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory <br />
            （2）选择Hibernate2.1的查询翻译器 <br />
            hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory <br />
            为了使用3.0的批量更新和删除功能，只能选择（1）否则不能解释批量更新的语句，当使用的时候出现了不支持条件输入中文的情况。<br />
            选择（2）可以支持输入中文，但没法解释批量更新语句了 <br />
            在hibernate3中需要用到antlr，然而这个包在weblogic.jar中已经包含了antrl类库，就会产生一些类加载的错误，<br />
            无法找到在war或者ear中的hibernate3.jar。 <br />
            出现这个错误之后，antlr会调用System.exit()，这样weblogic就会中止服务。<br />
            原来是冲突了，解决方法也很简单，就是添加<br />
            &lt;prop key="hibernate.query.factory_class"&gt;org.hibernate.hql.classic.ClassicQueryTranslatorFactory<br />
            &lt;/prop&gt;<br />
            这个属性后，就可以解决这个问题了。<br />
            有一个人的博客上写的也是也这个方法，不过他的org.hibernate.hql.classic.ClassicQueryTranslatorFactory写错了，<br />
            害的我以为这个方法不能用了，结果看看了，是他上面写错了，下面的是正确的，郁闷的是我拷贝的是上面的，最总还是被我发现了。<br />
            <br />
            <br />
            转 http://hi.baidu.com/lei55022033/blog/item/b20ad52c8c9f7ae58b139940.html<br />
            </p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/beyondwcm/aggbug/311512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2010-02-01 15:31 <a href="http://www.blogjava.net/beyondwcm/archive/2010/02/01/311512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>近期任务</title><link>http://www.blogjava.net/beyondwcm/archive/2009/06/26/284328.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Fri, 26 Jun 2009 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2009/06/26/284328.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/284328.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2009/06/26/284328.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/284328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/284328.html</trackback:ping><description><![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;整合ssh框架<br />
&nbsp;&nbsp;&nbsp;&nbsp;翻译drools5
<img src ="http://www.blogjava.net/beyondwcm/aggbug/284328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2009-06-26 18:08 <a href="http://www.blogjava.net/beyondwcm/archive/2009/06/26/284328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题数据库方面(用于备份)</title><link>http://www.blogjava.net/beyondwcm/archive/2009/06/22/283528.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Mon, 22 Jun 2009 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2009/06/22/283528.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/283528.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2009/06/22/283528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/283528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/283528.html</trackback:ping><description><![CDATA[1.什么是数据库事务，以及作用?<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;数据库事务:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;事务是由相关操作构成的一个完整的操作单元，在一个事物内，数据的修改一起提交或撤销，如果发生故障或系统错误，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整个事物也会自动撤销。<br />
&nbsp;&nbsp;&nbsp;&nbsp;优点:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把逻辑相关的操作分成了一个组<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在数据永久改变前，可以预览数据变化<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;能过保证数据的读一致性
<img src ="http://www.blogjava.net/beyondwcm/aggbug/283528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2009-06-22 11:35 <a href="http://www.blogjava.net/beyondwcm/archive/2009/06/22/283528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>四种操作xml的方式： SAX, DOM, JDOM , DOM4J的比较 </title><link>http://www.blogjava.net/beyondwcm/archive/2009/06/17/282808.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Wed, 17 Jun 2009 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2009/06/17/282808.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/282808.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2009/06/17/282808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/282808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/282808.html</trackback:ping><description><![CDATA[<p>1. 介绍</p>
<p>1）DOM(JAXP&nbsp;Crimson解析器) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构，然后才能做任何工作。由于它是基于信息层次的，因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先，由于树在内存中是持久的，因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航，而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。</p>
<p>2）SAX</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAX处理的优点非常类似于流媒体的优点。分析能够立即开始，而不是等待所有的数据被处理。而且，由于应用程序只是在读取数据时检查数据，因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上，应用程序甚至不必解析整个文档；它可以在某个条件得到满足时停止解析。一般来说，SAX还比它的替代者DOM快许多。 <br />
&nbsp;　　选择DOM还是选择SAX？ 对于需要自己编写代码来处理XML文档的开发人员来说，&nbsp; 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档，而SAX采用的事件模型。 <br />
<br />
　　DOM解析器把XML文档转化为一个包含其内容的树，并可以对树进行遍历。用DOM解析模型的优点是编程容易，开发人员只需要调用建树的指令，然后利用navigation&nbsp;APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档，所以对性能和内存的要求比较高，尤其是遇到很大的XML文件的时候。由于它的遍历能力，DOM解析器常用于XML文档需要频繁的改变的服务中。 <br />
<br />
　　SAX解析器采用了基于事件的模型，它在解析XML文档的时候可以触发一系列的事件，当发现给定的tag的时候，它可以激活一个回调方法，告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低，因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时，SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难，而且很难同时访问同一个文档中的多处不同数据。 </p>
<p>3）JDOM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<a href="http://www.jdom.org/"><font color="#0000ff">http://www.jdom.org/</font></a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDOM的目的是成为Java特定文档模型，它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型，JDOM一直得到大力推广和促进。正在考虑通过&#8220;Java规范请求JSR-102&#8221;将它最终用作&#8220;Java标准扩展&#8221;。从2000年初就已经开始了JDOM开发。 </p>
<p>　　JDOM与DOM主要有两方面不同。首先，JDOM仅使用具体类而不使用接口。这在某些方面简化了API，但是也限制了灵活性。第二，API大量使用了Collections类，简化了那些已经熟悉这些类的Java开发者的使用。 </p>
<p>　　JDOM文档声明其目的是&#8220;使用20%(或更少)的精力解决80%(或更多)Java/XML问题&#8221;(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的，并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而，它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。 </p>
<p>　　JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。</p>
<p>4）DOM4J&nbsp;http://dom4j.sourceforge.net/&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 虽然DOM4J代表了完全独立的开发结果，但最初，它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能，包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项，它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始，它就一直处于开发之中。 </p>
<p>　　为支持所有这些功能，DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类，但是在许多情况下，它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是，虽然DOM4J付出了更复杂的API的代价，但是它提供了比JDOM大得多的灵活性。 </p>
<p>　　在添加灵活性、XPath集成和对大文档处理的目标时，DOM4J的目标与JDOM是一样的：针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案，实现在本质上处理所有Java/XML问题的目标。在完成该目标时，它比JDOM更少强调防止不正确的应用程序行为。 </p>
<p>　　DOM4J是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML，特别值得一提的是连Sun的JAXM也在用DOM4J。 <br />
</p>
<p>2.. 比较</p>
<p>1）DOM4J性能最好，连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J，例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性，那就采用DOM4J.</p>
<p>2）JDOM和DOM在性能测试时表现不佳，在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题，但是从性能观点来看，它确实没有值得推荐之处。另外，DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础，因为它正式获得W3C推荐(与基于非标准的Java模型相对)，所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。</p>
<p>3）SAX表现较好，这要依赖于它特定的解析方式－事件驱动。一个SAX检测即将到来的XML流，但并没有载入到内存(当然当XML流被读入时，会有部分文档暂时隐藏在内存中)。</p>
<p>3. 四种xml操作方式的基本使用方法</p>
<p>xml文件：</p>
<p>&lt;?xml version="1.0" encoding="utf-8" ?&gt; <br />
&lt;Result&gt;<br />
&nbsp;&nbsp; &lt;VALUE&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;NO DATE="2005"&gt;A1&lt;/NO&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ADDR&gt;GZ&lt;/ADDR&gt;<br />
&nbsp;&nbsp; &lt;/VALUE&gt;<br />
&nbsp;&nbsp; &lt;VALUE&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;NO DATE="2004"&gt;A2&lt;/NO&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ADDR&gt;XG&lt;/ADDR&gt;<br />
&nbsp; &lt;/VALUE&gt;<br />
&lt;/Result&gt;</p>
<p>1）DOM</p>
<p>import java.io.*;<br />
import java.util.*;<br />
import org.w3c.dom.*;<br />
import javax.xml.parsers.*; </p>
<p>public class MyXMLReader{ <br />
　public static void main(String arge[]){ </p>
<p>　　long lasting =System.currentTimeMillis(); <br />
　　try{&nbsp; <br />
　　　File f=new File("data_10k.xml"); <br />
　　　DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); <br />
　　　DocumentBuilder builder=factory.newDocumentBuilder(); <br />
　　　Document doc = builder.parse(f); <br />
　　　NodeList nl = doc.getElementsByTagName("VALUE"); <br />
　　　for (int i=0;i＜nl.getLength();i++){ <br />
　　　　System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); <br />
　　　　System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); <br />
　 　} <br />
　　}catch(Exception e){ <br />
　　　e.printStackTrace(); <br />
} </p>
<p>2）SAX</p>
<p>import org.xml.sax.*;<br />
import org.xml.sax.helpers.*;<br />
import javax.xml.parsers.*; </p>
<p>public class MyXMLReader extends DefaultHandler { </p>
<p>　java.util.Stack tags = new java.util.Stack(); <br />
　public MyXMLReader() { <br />
　　super();<br />
&nbsp;&nbsp; } </p>
<p>　public static void main(String args[]) { <br />
　　long lasting = System.currentTimeMillis(); <br />
　　try { <br />
　　　SAXParserFactory sf = SAXParserFactory.newInstance(); <br />
　　　SAXParser sp = sf.newSAXParser(); <br />
　　　MyXMLReader reader = new MyXMLReader(); <br />
　　　sp.parse(new InputSource("data_10k.xml"), reader); <br />
　　} catch (Exception e) { <br />
　　　e.printStackTrace(); <br />
　　} </p>
<p>　　System.out.println("运行时间：" + (System.currentTimeMillis() - lasting) + "毫秒");} <br />
　　public void characters(char ch[], int start, int length) throws SAXException { <br />
　　String tag = (String) tags.peek(); <br />
　　if (tag.equals("NO")) {&nbsp; <br />
　　　System.out.print("车牌号码：" + new String(ch, start, length));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if (tag.equals("ADDR")) { <br />
　　System.out.println("地址:" + new String(ch, start, length));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; } </p>
<p>　　public void startElement(String uri,String localName,String qName,Attributes attrs) { <br />
　　tags.push(qName);}<br />
}&nbsp; </p>
<p>3） JDOM</p>
<p>import java.io.*;<br />
import java.util.*;<br />
import org.jdom.*;<br />
import org.jdom.input.*; </p>
<p>public class MyXMLReader { </p>
<p>　public static void main(String arge[]) { <br />
　　long lasting = System.currentTimeMillis(); <br />
　　try { <br />
　　　SAXBuilder builder = new SAXBuilder();&nbsp; <br />
　　　Document doc = builder.build(new File("data_10k.xml"));&nbsp; <br />
　　　Element foo = doc.getRootElement();&nbsp; <br />
　　　List allChildren = foo.getChildren();&nbsp; <br />
　　　for(int i=0;i＜allChildren.size();i++) {&nbsp; <br />
　　　　System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText()); <br />
　　　　System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); <br />
　　　} <br />
　　} catch (Exception e) { <br />
　　　e.printStackTrace(); <br />
} </p>
<p>}</p>
<p>4）DOM4J</p>
<p>import java.io.*;<br />
import java.util.*;<br />
import org.dom4j.*;<br />
import org.dom4j.io.*; </p>
<p>public class MyXMLReader { </p>
<p>　public static void main(String arge[]) { <br />
　　long lasting = System.currentTimeMillis(); <br />
　　try { <br />
　　　File f = new File("data_10k.xml"); <br />
　　　SAXReader reader = new SAXReader(); <br />
　　　Document doc = reader.read(f); <br />
　　　Element root = doc.getRootElement(); <br />
　　　Element foo; <br />
　　　for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { <br />
　　　　foo = (Element) i.next(); <br />
　　　　System.out.print("车牌号码:" + foo.elementText("NO")); <br />
　　　　System.out.println("车主地址:" + foo.elementText("ADDR")); <br />
　　　} <br />
　　} catch (Exception e) { <br />
　　　e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp; } <br />
}<br />
<br />
转自：http://blog.chinaunix.net/u/25176/showart_379827.html</p>
<img src ="http://www.blogjava.net/beyondwcm/aggbug/282808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2009-06-17 11:42 <a href="http://www.blogjava.net/beyondwcm/archive/2009/06/17/282808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于javascript 压缩</title><link>http://www.blogjava.net/beyondwcm/archive/2009/06/10/281196.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Wed, 10 Jun 2009 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2009/06/10/281196.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/281196.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2009/06/10/281196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/281196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/281196.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beyondwcm/archive/2009/06/10/281196.html'>阅读全文</a><img src ="http://www.blogjava.net/beyondwcm/aggbug/281196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2009-06-10 17:38 <a href="http://www.blogjava.net/beyondwcm/archive/2009/06/10/281196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>定制的Spring Security(Acegi)的并发会话过滤器（ConcurrentSessionFilter）的编码过程(转)</title><link>http://www.blogjava.net/beyondwcm/archive/2009/05/08/269545.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Fri, 08 May 2009 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2009/05/08/269545.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/269545.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2009/05/08/269545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/269545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/269545.html</trackback:ping><description><![CDATA[<h2>定制的Spring Security(Acegi)的并发会话过滤器（ConcurrentSessionFilter）的编码过程</h2>
<div class="node" id="node-517"><span class="submitted">Wed, 10/29/2008 - 08:33 — Fuller</span>
<div class="content">
<p><a href="http://www.gooseeker.com/cn/node/516" target="_blank">上一帖</a>述及使用ConcurrentSessionFilter限制同帐号登录多次的方法，同帐号多次登录限制是运行系统必需的功能，所以作者对其深入测试，在上一帖中也列举了Spring Security的ConcurrentSessionFilter和ConcurrentSessionControllerImpl类的几个限制。做一下简单的总结，下面假设同时使用DigestProcessingFilter和辅助类：</p>
<ul>
    <li>如果exceptionIfMaximumExceeded = true，即第二个发起的会话被禁止，如果一个用户重新启动浏览器，再次登录失败，因为前一个会话没有超时，被当成了多次登录。
    <li>如果exceptionIfMaximumExceeded = false，如果两个人使用同一个帐号登录，将出现交互将对方踢出去的现象，实际上并没有禁止任何人登录，只是每次要先将另一个人踢下去。 </li>
</ul>
<hr />
<br />
<h4>需求</h4>
<p>我想使用exceptionIfMaximumExceeded = true，同时允许同一个用户在同一台机器上连续登录多次，我采取了编写定制的ConcurrentSessionController实现类的方法。</p>
<hr />
<br />
<h4>原理</h4>
<p>ConcurrentSessionController是一个接口，有两个需要实现的方法：checkAuthenticationAllowed（）和registerSuccessfulAuthentication（），Spring Security提供了一个实现类ConcurrentSessionControllerImpl，经过分析缺省的实现类，发现方法allowableSessionsExceeded（）处理多次并发会话，在SecurityRegistry中保存每个会话的信息，主要是用户帐号对应的会话ID（sessionId）和最后发起时间，在并发发生时，从SecurityRegistry中取出关于某个用户帐号的所有会话，如果exceptionIfMaximumExceeded = false，找到最早一个会话，将其释放掉，腾出空间给新会话，如果exceptionIfMaximumExceeded = true，将发出一个异常。</p>
<p>所以，需要改进allowableSessionsExceeded（），如果exceptionIfMaximumExceeded = true让程序判断客户地址，如果同一个IP，则允许登录，将最早的会话释放掉，如果不是同一个IP在发出异常。</p>
<p>在SecurityRegistry中，用户帐号信息存在一个对象中，名字是principal，当前是一个Object对象，实际上只是存了一个字符串，所以需要扩展principal，写一个定制的类（我的类含有两个属性：username和userip），里面保存客户IP信息。allowableSessionsExceeded（）只是使用SecurityRegistry，SecurityRegistry中的内容是由registerSuccessfulAuthentication（）方法写入的，所以，在该方法中需要将原来的pricipal对象替换成定制的Principal类的对象。同时checkAuthenticationAllowed（）方法也要修改，因为这个方法要查询SecurityRegistry，查询条件替换成定制的Principal类的对象。</p>
<hr />
<br />
<h4>注意事项</h4>
<p>定制的Principal类要实现equals()和hashCode()和toString()三个方法，在equals()方法中只要username相同就表示两个对象相同，而在hashCode()中只需要将username的hashcode计算在内，因为SecurityRegistry是以principal为关键字的Map容器，这两个方法决定了对Map的查询。toString()方法可以根据自己的需要写，我只是将username输出。</p>
<hr />
<br />
<h4>测试</h4>
<p>将定制的ConcurrentSessionController对象编制（wire）到应用系统中，经过测试，能够达到预想目的。</p>
<hr />
<br />
<h4>存在的问题</h4>
<p>原来想省点劲，只要继承ConcurrentSessionControllerImpl并重载上述三个方法就行了，但是不知道为什么securityRegistery属性一直注入不了，一气之下，写了一个直接实现ConcurrentSessionController接口的新类。实际上也不是从头写，将ConcurrentSessionControllerImpl代码改吧该吧即可，用不了几分钟，这就是开源的好处。</p>
<br />
</div>
</div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;转自 http://www.gooseeker.com/cn/node/517
<img src ="http://www.blogjava.net/beyondwcm/aggbug/269545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2009-05-08 10:33 <a href="http://www.blogjava.net/beyondwcm/archive/2009/05/08/269545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title /><link>http://www.blogjava.net/beyondwcm/archive/2009/03/22/261299.html</link><dc:creator>beyond</dc:creator><author>beyond</author><pubDate>Sun, 22 Mar 2009 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/beyondwcm/archive/2009/03/22/261299.html</guid><wfw:comment>http://www.blogjava.net/beyondwcm/comments/261299.html</wfw:comment><comments>http://www.blogjava.net/beyondwcm/archive/2009/03/22/261299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondwcm/comments/commentRss/261299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondwcm/services/trackbacks/261299.html</trackback:ping><description><![CDATA[<pre class="csharpcode"><span class="rem">/*********************</span>
<span class="rem"> * 四舍五入到小数点后两位</span>
<span class="rem">燃料子系统有很多数据都要求是固定的格式，并要求四舍五入，一般都是number(12, 2)，</span>
<span class="rem">如果画面出现数据： 3.1230032..此类可以用myRound(arg1, arg2)处理。</span>
<span class="rem">例：</span>
<span class="rem">var num = 3.1260032;</span>
<span class="rem">var result = myRound(num, 2);    // result = 3.13</span>
<span class="rem"> </span>
<span class="rem">若num = 1，则结果为1.00</span>
<span class="rem"> *********************/</span>
<span class="rem">/*</span>
<span class="rem"> * 四舍五入到指定位数</span>
<span class="rem"> *</span>
<span class="rem"> * num 要处理的数字</span>
<span class="rem"> * n 小数点后几位</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> myRound(num,n){
    <span class="kwrd">var</span>   dd=1;  
    <span class="kwrd">var</span>   tempnum;  
    <span class="kwrd">for</span>(i=0;i&lt;n;i++){  
        dd*=10;
    }  
    tempnum=num*dd;
    
    <span class="rem">// 如果参数非数字，将值置为0</span>
    <span class="rem">// modified by liyj 2008/6/16 PM</span>
    <span class="kwrd">if</span> (tempnum+<span class="str">""</span>==<span class="str">"NaN"</span>) {
        <span class="kwrd">return</span> formatnumber(0,n);  
    }
      
    tempnum=Math.round(tempnum);
    <span class="kwrd">return</span> formatnumber(tempnum/dd,n);  
}  
 <span class="rem">/*</span>
<span class="rem">  * 格式化数字</span>
<span class="rem">  *</span>
<span class="rem">  * value  数值</span>
<span class="rem">  * num 位数</span>
<span class="rem">  */</span>
<span class="kwrd">function</span> formatnumber(value, num) {
    <span class="kwrd">var</span> a, b, c, i;
    a = value.toString();
    b = a.indexOf(<span class="str">"."</span>);
    c = a.length;
    <span class="kwrd">if</span> (num == 0) {
        <span class="kwrd">if</span> (b != -1) {
            a = a.substring(0, b);
        }
    } <span class="kwrd">else</span> {
        <span class="kwrd">if</span> (b == -1) {
            a = a + <span class="str">"."</span>;
            <span class="kwrd">for</span> (i = 1; i &lt;= num; i++) {
                a = a + <span class="str">"0"</span>;
            }
        } <span class="kwrd">else</span> {
            a = a.substring(0, b + num + 1);
            <span class="kwrd">for</span> (i = c; i &lt;= b + num; i++) {
                a = a + <span class="str">"0"</span>;
            }
        }
    }
    <span class="kwrd">return</span> a;
} 
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style><img src ="http://www.blogjava.net/beyondwcm/aggbug/261299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondwcm/" target="_blank">beyond</a> 2009-03-22 11:28 <a href="http://www.blogjava.net/beyondwcm/archive/2009/03/22/261299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>