<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>珠海之夜</title>
    <description>忙碌了一天 夜幕低沉 这座美丽的海滨小城抚媚的张开了双臂...</description>
    <link>http://dusk.group.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>直接在Action中返回forward不好么</title>
        <author>badqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://badqiu.javaeye.com">badqiu</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/212867" style="color:red;">http://dusk.group.javaeye.com/group/blog/212867</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如果在配置文件中写Action执行完的跳转的路径,那么在编写Action Java代码的时候还需要切换至配置文件才能知道action转向那个页面,直接写在Action中不好么?<br />依照这种并且结合struts1,struts2的零配置,已经在多个项目中应用,也没发现问题<br /><br /><br />struts1中我的做法是<br /><pre name="code" class="java">
	public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {
	         //......
		return new ActionForward("/demo/Blog/edit.jsp");
	}
</pre><br />struts1中自己另外做了扩展,可以将action的name作为formBean的配置,整个项目的struts-config配置只有下面这么一段话,path举例/admin/User/delete.do<br /><pre name="code" class="xml">
	&lt;action-mappings>
		&lt;action path="/*/*/*"
			type="com.kingsoft.{1}.web.action.{2}Action"
			name="com.kingsoft.{1}.web.form.{2}Form" scope="request"
			validate="false" parameter="{3}" attribute="{2}Form">
		&lt;/action>
	&lt;/action-mappings>
</pre><br /><br /><br /><br />struts2中自己另外做了扩展,实现forward的做法是<br /><pre name="code" class="java">
	/**进入更新页面*/
	public String edit() {
		blog = (Blog)blogManager.getById(id);
		return "/demo/Blog/edit.jsp";
	}
</pre><br /><br />struts2中实现redirect的做法是,前面增加了一个"!"号<br /><pre name="code" class="java">
	/**保存更新*/
	public String update() {
		blogManager.update(this.blog);
		return "!/demo/Blog/list.action";
	}
</pre><br /><br />struts2增加了direct的返回类型,struts.xml配置也只有一段话<br /><pre name="code" class="xml">
    &lt;package name="default" namespace="/demo" extends="custom-default">
        &lt;action name="*/*" method="{2}" class="com.kingsoft.demo.action.{1}Action">
           &lt;result name="*" type="direct">通过Action直接返回&lt;/result>
        &lt;/action>		
    &lt;/package>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/212867#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 22:03:37 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/212867</link>
        <guid>http://dusk.group.javaeye.com/group/blog/212867</guid>
      </item>
      <item>
        <title>其实写 blog 是个好习惯</title>
        <author>Feiing</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://feiing.javaeye.com">Feiing</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/166644" style="color:red;">http://dusk.group.javaeye.com/group/blog/166644</a>&nbsp;
          发表时间: 2008年03月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很多时候因为忙很少到这来, 然后慢慢荒凉起来了<br /><br />今天很偶尔翻到以前的一篇 <br /><br /><a href="http://starcraft.blogdriver.com/starcraft/655774.html" target="_blank">http://starcraft.blogdriver.com/starcraft/655774.html</a><br /><br />生活需要留下些印记, 不然记忆很快就消逝于这滚滚红尘了
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/166644#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 02 Mar 2008 14:57:12 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/166644</link>
        <guid>http://dusk.group.javaeye.com/group/blog/166644</guid>
      </item>
      <item>
        <title>幸福 --- 哪怕只是一瞬间</title>
        <author>Feiing</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://feiing.javaeye.com">Feiing</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/161885" style="color:red;">http://dusk.group.javaeye.com/group/blog/161885</a>&nbsp;
          发表时间: 2008年02月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: large; font-family: 隶书; color: #339966">那一刻<br />感受到你的<span style="color: #ff00ff">温柔</span><br />那一刻<br />时间也为你停留<br />浪漫的天空<br />可爱的笑容<br />醉人的发香<br />温暖的双手<br />拥你入怀 <br />在寂静的夜</span>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/161885#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 11 Feb 2008 18:39:37 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/161885</link>
        <guid>http://dusk.group.javaeye.com/group/blog/161885</guid>
      </item>
      <item>
        <title>自动装箱与拆箱的误用</title>
        <author>awed</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://awed.javaeye.com">awed</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/147805" style="color:red;">http://dusk.group.javaeye.com/group/blog/147805</a>&nbsp;
          发表时间: 2007年12月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          自动装箱与拆箱的误用<br />在JAVA JDK1.5以后具有的自动装箱与拆箱的功能，所谓的自动装箱<br />与拆箱也就是把基本的数据类型自动的转为封装类型。<br />如：自动装箱，它可以直接把基本类型赋值给封装类型<br />Integer num = 10 ;<br />Double d = 2d ;<br />    <br />自动拆箱，它可以把封装类型赋值给基本类型<br />int num = new Integer(10);<br />double d = new Double(2d);<br />知道了自动装箱与拆箱后我们现看一下下面这两个程序代码：<br /><pre name="code" class="java">AutoBoxDemo1.java
-------------------------------------------------------
public class AutoBoxDemo1 
{
public static void main(String[] args) 
{        
        Integer d1 = 100 ;
        Integer d2 = 100 ;
        if(d1==d2)
            System.out.println("d1==d2");
        else
            System.out.println("d1!=d2");
    }
}

AutoBoxDemo2.java
--------------------------------------------------------
public class AutoBoxDemo2 
{
public static void main(String[] args) 
{        
        Integer d1 = 200 ;
        Integer d2 = 200 ;
        if(d1==d2)
            System.out.println("d1==d2");
        else
            System.out.println("d1!=d2");
    }
}</pre><br />大家看看这两个程序代码的结果是怎么样的呢？<br />其实在AutoBoxDemo1.java中结果是：d1==d2<br />在AutoBoxDemo2.java中结果是：d1!=d2<br />为什么结果会是这样的？我们来看了解一下！<br />其实刚刚这两个程序结果的不同是与==运算符比较有关，==是用来比较<br />两个基本数据类型的变量是否相等的，而事实上==也用于判断两个对象<br />变量名是否参考同一对象。在自动装箱时对于值从-128到127之间的值<br />它们被装箱为Integer对象后会在内存中重用，所以在AutoBoxDemo1.java<br />中是相等的，而超过了从-128到127之前的值时，被装箱后的Integer对象<br />并不会被重用。所以AutoBoxDemo2.java中是不相等的。
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/147805#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Dec 2007 14:21:33 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/147805</link>
        <guid>http://dusk.group.javaeye.com/group/blog/147805</guid>
      </item>
      <item>
        <title>StringBuffer 类与 StringBuilder 类</title>
        <author>awed</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://awed.javaeye.com">awed</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/147804" style="color:red;">http://dusk.group.javaeye.com/group/blog/147804</a>&nbsp;
          发表时间: 2007年12月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这两个类都是用于字符操作而且有相同的方法，具有相同的操作接口，StringBuilder类是在<br />J2SE5.0以后才新增的类，主要区别在于：<br />在单机非多线程的情况下StringBuilder类具有更高的效率，因为StringBuilder类没有处理同<br />步问题，而StringBuffer类则会处理同步问题，如果StringBuilder会在多线程下操作，则需要<br />改用StringBuffer类。
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/147804#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Dec 2007 14:19:43 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/147804</link>
        <guid>http://dusk.group.javaeye.com/group/blog/147804</guid>
      </item>
      <item>
        <title>Atomikos JTA for Hibernate3</title>
        <author>Feiing</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://feiing.javaeye.com">Feiing</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/142663" style="color:red;">http://dusk.group.javaeye.com/group/blog/142663</a>&nbsp;
          发表时间: 2007年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://wiki.atomikos.org/bin/view.pl/Main/HibernateIntegration#With_Spring" target="_blank">http://wiki.atomikos.org/bin/view.pl/Main/HibernateIntegration#With_Spring</a><br /><br />http://www.hibernate.org/hib_docs/v3/reference/en/html/transactions.html#transactions-connection-release<br /><br />经过多次试验, 下面的配置是最合适的 (OpenSessionInView Works fine)<br /><br />jta.properties<br /><pre name="code" class="java">
com.atomikos.icatch.service = com.atomikos.icatch.standalone.UserTransactionServiceFactory

#Do you want transaction logging to be enabled or not?
#If set to false, then no logging overhead will be done
#at the risk of losing data after restart or crash.
#Note: this setting may be overridden depending on your license!
com.atomikos.icatch.enable_logging = false
com.atomikos.icatch.automatic_resource_registration = true
</pre><br /><br />xa datasource and jta transaction manager<br /><pre name="code" class="java">
	&lt;bean id="system.datasource"
		class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
		&lt;property name="uniqueResourceName">&lt;value>XADBMS&lt;/value>&lt;/property>
		&lt;property name="xaDataSourceClassName">
			&lt;value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource&lt;/value>
		&lt;/property>
		&lt;property name="xaDataSourceProperties">
			&lt;value>url=${jdbc.url};user=${jdbc.username};password=${jdbc.password};pinGlobalTxToPhysicalConnection=true&lt;/value>
		&lt;/property>
		&lt;property name="exclusiveConnectionMode">&lt;value>false&lt;/value>&lt;/property>
		&lt;property name="connectionPoolSize">&lt;value>10&lt;/value>&lt;/property>
	&lt;/bean>


	&lt;bean id="system.sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		&lt;property name="dataSource" ref="system.datasource"/>
		&lt;property name="jtaTransactionManager" ref="atomikosTransactionManager" />
		&lt;property name="mappingDirectoryLocations">
            &lt;list>
            &lt;value>classpath:/com/coheg/&lt;/value>
            &lt;/list>
        &lt;/property>
		&lt;property name="hibernateProperties">
			&lt;props>
				&lt;prop key="hibernate.query.substitutions">true ${boolean.true.value}, false ${boolean.false.value}, yes ${boolean.true.value}, no ${boolean.false.value}&lt;/prop>
				&lt;prop key="hibernate.dialect">${hibernate.dialect}&lt;/prop>
				&lt;prop key="hibernate.show_sql">${hibernate.show_sql}&lt;/prop>
				&lt;prop key="hibernate.format_sql">true&lt;/prop>
				&lt;!-- for jta compatilibility -->
				&lt;prop key="current_session_context_class">jta&lt;/prop>		
				&lt;prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory&lt;/prop>	
				&lt;prop key="hibernate.connection.release_mode">after_statement&lt;/prop>
			&lt;/props>
		&lt;/property>
	&lt;/bean>
	

	&lt;!-- Construct Atomikos UserTransactionManager, needed to configure Spring -->
	&lt;bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
		&lt;!--  when close is called, should we force transactions to terminate or not? -->
		&lt;property name="forceShutdown">&lt;value>true&lt;/value>&lt;/property>
	&lt;/bean>
	
	&lt;!-- Also use Atomikos UserTransactionImp, needed to configure Spring  --> 
	&lt;bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
	    &lt;property name="transactionTimeout">&lt;value>120000&lt;/value>&lt;/property>
	&lt;/bean>
	
	&lt;!-- Configure the Spring framework to use JTA transactions from Atomikos -->
	&lt;bean id="system.platformTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
		&lt;property name="transactionManager">&lt;ref bean="atomikosTransactionManager"  />&lt;/property>
		&lt;property name="userTransaction">&lt;ref bean="atomikosUserTransaction"  />&lt;/property>
	&lt;/bean>
	

</pre><br /><br />hibernate2 不支持 Connection Release Mode 概念, 在使用 JTA + OpenSessionInView 时会出一些问题
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/142663#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 Nov 2007 14:52:36 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/142663</link>
        <guid>http://dusk.group.javaeye.com/group/blog/142663</guid>
      </item>
      <item>
        <title>也说费德勒与桑普拉斯</title>
        <author>Feiing</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://feiing.javaeye.com">Feiing</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/142340" style="color:red;">http://dusk.group.javaeye.com/group/blog/142340</a>&nbsp;
          发表时间: 2007年11月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          从新浪上看到一个网友评论, 实在是精彩, 就转过来了<br /><br /><div class="quote_title">新浪网友 写道</div><div class="quote_div"><br /><br />奶粉：费德勒刷新连续排名第一的纪录拉，<br />桑迷：桑比费强。<br /><br />奶粉：已经连胜41场球了<br />桑迷：桑比费强。<br /><br />奶粉：草场已经连胜48场了<br />桑迷：桑比费强。<br /><br />奶粉：费德勒连续7次进入大满贯决赛<br />桑迷：桑比费强。<br /><br />奶粉：。。。。。。<br />桑迷：桑比费强。<br /><br />奶粉：对阵世界前十24连胜呀，真可怕。<br />桑迷：我们有阿加西。<br /><br />奶粉：决赛24连胜，可怕。<br />桑迷：我们有贝克尔。<br /><br />奶粉：抢7十四连胜<br />桑迷：我们有考瑞尔。<br /><br />奶粉：在北美连胜56场。<br />桑迷：我们有拉夫特。<br /><br />奶粉：.........<br />桑迷：我们有艾德博格<br /><br />奶粉：？？？？？<br />桑迷：我们有张德培。<br /><br />奶粉：！！！！！！<br />桑迷：桑普拉斯最伟大。 <br /><br /></div>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/142340#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 Nov 2007 15:48:00 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/142340</link>
        <guid>http://dusk.group.javaeye.com/group/blog/142340</guid>
      </item>
      <item>
        <title>大师杯 希尔顿 像雾像雨又像风</title>
        <author>Feiing</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://feiing.javaeye.com">Feiing</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/140317" style="color:red;">http://dusk.group.javaeye.com/group/blog/140317</a>&nbsp;
          发表时间: 2007年11月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: green">二零零七年的年终大师杯似乎比想象中来得更快, 年初澳网罗杰兵不血刃、不失一盘夺冠, 法网又一次令人扼腕输给纳达尔, 温网置于死地而后生, 美网力挽狂澜, 然后, 大师杯来了, 从遥远的大洋彼岸来到了中国, 来到了上海, 来到我生活工作的地方.<br />    <br />有比赛的日子总有很多期待, 有费德勒在咫尺之遥比赛更是魂牵梦萦, 大师们下榻的上海普陀希尔顿酒店, 更让我觉得这一切离自己这么近, 今年年初公司就开始与希尔顿合作, 自己几乎投入了全部的精力, 虽然要走的路还很长, 但希尔顿这个名字已经成为我生命中的一部分, 希尔顿酒店的雍容华贵与罗杰华丽梦幻的球技相映成辉, 恍然如梦.</span><br /><br /><span style="color: green">有网球的日子是快乐的, 在温暖和煦的春风享受生活, 在烈日炎炎的盛夏挥汗如雨, 在桂花幽香的金秋闲庭漫步, 在冷冷残阳的冬日释放青春, 奔放的正手 inside-out, 华丽的反手直线, 帅气的网前截击, 风一般的大力发球, 是视觉盛宴, 也是心灵的洗礼.</span><br /><br /><span style="color: green">费德勒又夺冠了, 第一场失利激怒了天王, 剩下的比赛如同摧枯拉朽般摧毁对手的信心, 颁奖仪式上, 顶级奔驰轿跑凸显出王者的尊贵, 今夜他是绝对的主角, 全世界为他惊叹, 完美不需要解释, 如果非要挑出一许瑕疵, 罗兰加洛斯也许是最后的遗憾, 正因为如此, 08 年才显得那么让人期待, 那片浪漫的红土地, 到底什么时候才能接纳新的王者?</span>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/140317#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 18 Nov 2007 21:34:00 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/140317</link>
        <guid>http://dusk.group.javaeye.com/group/blog/140317</guid>
      </item>
      <item>
        <title>使用Filter设置字符编码及禁止页面缓存</title>
        <author>awed</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://awed.javaeye.com">awed</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/140506" style="color:red;">http://dusk.group.javaeye.com/group/blog/140506</a>&nbsp;
          发表时间: 2007年11月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<div class="code_title">
<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;java.io.IOException; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.Filter; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.FilterChain; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.FilterConfig; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletException; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletRequest; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletResponse; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletResponse; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;EncodingAndCacheflush&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Filter{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;FilterConfig&nbsp;config&nbsp;; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;destroy()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;ServletException&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;encoding&nbsp;=&nbsp;config.getInitParameter(</span><span class="string">&quot;encoding&quot;</span><span>);</span><span class="comment">//从配置文件从读取编码格式 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(encoding);</span><span class="comment">//设置编码 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((HttpServletResponse)response).setHeader(</span><span class="string">&quot;Pragma&quot;</span><span>,</span><span class="string">&quot;No-cache&quot;</span><span>);&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((HttpServletResponse)response).setHeader(</span><span class="string">&quot;Cache-Control&quot;</span><span>,</span><span class="string">&quot;no-cache&quot;</span><span>);&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((HttpServletResponse)response).setHeader(</span><span class="string">&quot;Expires&quot;</span><span>,</span><span class="string">&quot;0&quot;</span><span>);</span><span class="comment">//禁止缓存&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;init(FilterConfig&nbsp;config)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;ServletException&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.config&nbsp;=&nbsp;config; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<div class="code_title">在web.xml中加入Filter的配置，如下：
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>EncodingAndCacheflush</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>EncodingAndCacheflush</span><span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>encoding</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>UTF-8</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>EncodingAndCacheflush</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">&lt;/</span><span class="tag-name">url-pattern</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">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>还有几点需要注意的是：</p>
<p>要传递参数的时候最好使用form进行传参，如果使用链接的话当中文字符的时候过滤器转码是不会起作用的，还有就是页面上</p>
<p>form的method也要设置为post，不然过滤器也起不了作用。</p>
</font>然后在页面中设置编码为UTF-8这样就不必第次都进行转码了。
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/140506#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 Nov 2007 15:04:53 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/140506</link>
        <guid>http://dusk.group.javaeye.com/group/blog/140506</guid>
      </item>
      <item>
        <title>sql server2000 时间操作</title>
        <author>awed</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://awed.javaeye.com">awed</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/140153" style="color:red;">http://dusk.group.javaeye.com/group/blog/140153</a>&nbsp;
          发表时间: 2007年11月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">1.显示本月第一天<br />
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0) <br />
select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)</font></p>
<p><font face="Arial">2.显示本月最后一天<br />
select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))<br />
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) </font></p>
<p><font face="Arial">3.上个月的最后一天 <br />
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)) </font></p>
<p><font face="Arial">4.本月的第一个星期一<br />
select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)</font></p>
<p><font face="Arial">5.本年的第一天 <br />
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0) </font></p>
<p><font face="Arial">6.本年的最后一天 <br />
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))</font></p>
<p><font face="Arial">7.去年的最后一天 <br />
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))</font></p>
<p><font face="Arial">8.本季度的第一天 <br />
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)&nbsp; </font></p>
<p><font face="Arial">9.本周的星期一 <br />
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0) </font></p>
<p><font face="Arial">10.查询本月的记录 <br />
select * from tableName where DATEPART(mm, theDate) = DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE()) </font></p>
<p><font face="Arial">11.查询本周的记录 <br />
select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE()) </font></p>
<p><font face="Arial">12.查询本季的记录 <br />
select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE()) <br />
其中:GETDATE()是获得系统时间的函数。</font></p>
<p><font face="Arial">13.获取当月总天数:<br />
select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate()))</font></p>
<p><font face="Arial">select datediff(day,<br />
dateadd(mm, datediff(mm,'',getdate()), ''),<br />
dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))</font></p>
<p><font face="Arial">14.获取当前为星期几<br />
DATENAME(weekday, getdate())</font></p>
<p><font face="Arial">15. 当前系统日期、时间 <br />
select getdate() </font></p>
<p><font face="Arial">16. dateadd 在向指定日期加上一段时间的基础上，返回新的 datetime 值<br />
例如：向日期加上2天 <br />
select dateadd(day,2,'2004-10-15') --返回：2004-10-17 00:00:00.000</font></p>
<p><font face="Arial">17. datediff 返回跨两个指定日期的日期和时间边界数。<br />
select datediff(day,'2004-09-01','2004-09-18') --返回：17</font></p>
<p><font face="Arial">18. datepart 返回代表指定日期的指定日期部分的整数。<br />
SELECT DATEPART(month, '2004-10-15') --返回 10<br />
年为year,月为month，日为day,小时hour,分为minute，秒为second</font></p>
<p><font face="Arial">19. datename 返回代表指定日期的指定日期部分的字符串<br />
SELECT datename(weekday, '2004-10-15') --返回：星期五</font></p>
<p><font face="Arial">17. day(), month(),year() --可以与datepart对照一下<br />
select 当前日期=convert(varchar(10),getdate(),120),当前时间=convert(varchar(8),getdate(),114) <br />
select datename(dw,'2004-10-15') <br />
select 本年第多少周=datename(week,'2004-10-15'),今天是周几=datename(weekday,'2004-10-15')</font></p>
<p><font face="Arial">函数 参数/功能<br />
GetDate( ) 返回系统目前的日期与时间<br />
DateDiff (interval,date1,date2) 以interval 指定的方式，返回date2 与date1两个日期之间的差值 date2-date1<br />
DateAdd (interval,number,date) 以interval指定的方式，加上number之后的日期<br />
DatePart (interval,date) 返回日期date中，interval指定部分所对应的整数值<br />
DateName (interval,date) 返回日期date中，interval指定部分所对应的字符串名称</font></p>
<p><font face="Arial">参数 interval的设定值如下：<br />
值 缩 写（Sql Server） 说明<br />
Year Yy 年 1753 ~ 9999<br />
Quarter Qq 季 1 ~ 4<br />
Month Mm 月1 ~ 12<br />
Day of year Dy 一年的日数,一年中的第几日 1-366<br />
Day Dd 日，1-31<br />
Weekday Dw 一周的日数，一周中的第几日 1-7<br />
Week Wk 周，一年中的第几周 0 ~ 51<br />
Hour Hh 时0 ~ 23<br />
Minute Mi 分钟0 ~ 59<br />
Second Ss 秒 0 ~ 59<br />
Millisecond Ms 毫秒 0 ~ 999</font></p>
<p><font face="Arial">举例：<br />
1.GetDate() 用于sql server :select GetDate()</font></p>
<p><font face="Arial">2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒<br />
&nbsp; DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天</font></p>
<p><font face="Arial">3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1，周六为7)<br />
&nbsp; DatePart('d','2005-7-25 22:56:32')返回值为 25即25号<br />
&nbsp; DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天<br />
&nbsp; DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年</font></p>
<p><font face="Arial">应用示例：</font></p>
<p><font face="Arial">查询某个日期之间的记录数据：<br />
select * from 表 where 开始时间&gt;'2005-02-01' and 结束时间&lt;='2005-06-05'order by id desc</font></p>
<font face="Arial">
<p><br />
查询最近30内的记录数据：<br />
select * from 表 where datediff(Dd,last_date,getdate())&lt;=30 order by id desc</p>
<p>查询最近一周内的点击率大于100的记录数据：<br />
select * from t_business_product where hit_count&gt;100 and datediff(Dw,last_date,getdate())&lt;=7 order by id desc</p>
<p>查询某一年(如2006年)的记录数据：<br />
select * from 表 where DatePart(Yy,last_date)=2006 order by id desc<br />
或<br />
select * from 表 where DatePart(Year,last_date)=2006 order by id desc</p>
<p>如查询系统当前年份插入的一年内的数据：<br />
select * from 表 where DatePart(Yy,getdate())=DatePart(Yy,getdate()) order by id desc</p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/140153#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Nov 2007 11:43:53 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/140153</link>
        <guid>http://dusk.group.javaeye.com/group/blog/140153</guid>
      </item>
      <item>
        <title>[转]比尔-盖茨致珠海南方软件园员工的黄金准则</title>
        <author>silent.wong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://silentwong.javaeye.com">silent.wong</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/113091" style="color:red;">http://dusk.group.javaeye.com/group/blog/113091</a>&nbsp;
          发表时间: 2007年08月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">&nbsp; 　　1.&nbsp;&nbsp; 南方软件园食堂是不干净的，你要去适应它。&nbsp;&nbsp; <br />
&nbsp; 　　2.&nbsp;&nbsp; 南方软件园食堂并不会在意你的自尊，而是要求你在自我感觉良好之前先吃下这些饭菜，尽管是臭的。&nbsp;&nbsp; <br />
&nbsp; 　　3.&nbsp;&nbsp; 在南方软件园食堂上班是不可能吃到干净饭菜的，更不可能吃到可口饭菜，直到你拥有很多钱的那一天。&nbsp;&nbsp; <br />
&nbsp; 　　4.&nbsp;&nbsp; 如果你认为南方软件园食堂的饭菜不干净不好吃，那么等你离开这里再回头想一想。&nbsp;&nbsp; <br />
&nbsp; 　　5.&nbsp;&nbsp; 卖变质的饭菜不会有损于南方软件园食堂的尊严。他们称之为&ldquo;机遇&rdquo;。&nbsp;&nbsp; <br />
&nbsp; 　　6.&nbsp;&nbsp; 如果你在南方软件园食堂吃到不好的饭菜，那不是南方软件园食堂的过错，不要将你理应承担的责任转嫁给南方软件园食堂，而要学着从中吸取教训。&nbsp;&nbsp; <br />
&nbsp; 　　7.&nbsp;&nbsp; 在你来到南方软件园食堂，这里的饭菜就是这么差！他们变成今天这个样子是因为这些年来一直没有竞争。&nbsp;&nbsp; <br />
&nbsp; 　　8.&nbsp;&nbsp; 你所在南方软件园食堂已经不分好吃与不好吃，或者变质与不变质。&nbsp;&nbsp; <br />
&nbsp; 　　9.&nbsp;&nbsp; 南方软件园食堂是不会自己去改变的，没有几位老板乐于做好吃的饭菜给你吃，想要吃好吃的你必须依靠自己去完成。&nbsp;&nbsp; <br />
&nbsp; 　　10.&nbsp;&nbsp; 电视中的许多场景决不是真实的生活。在现实生活中，南方软件园食堂的饭菜就是那么差劲的，而并不像电视里演的那么干净。&nbsp;&nbsp; <br />
&nbsp; 　　11.&nbsp;&nbsp; 善待你所厌恶的南方软件园食堂，因为明天还要到那去吃饭。&nbsp;&nbsp; <br />
&nbsp; 总结，知道微软为什么能发展成今天的规模吗？那是因为垄断！南方软件园食堂也将发展成食堂中的&ldquo;微软&rdquo;！ </font>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/113091#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 16 Aug 2007 18:13:25 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/113091</link>
        <guid>http://dusk.group.javaeye.com/group/blog/113091</guid>
      </item>
      <item>
        <title>关于在DOM4J在读取XML文件时，解释DTD的问题</title>
        <author>fqtrnt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fqtrnt.javaeye.com">fqtrnt</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/97841" style="color:red;">http://dusk.group.javaeye.com/group/blog/97841</a>&nbsp;
          发表时间: 2007年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal"><span style="font-family: 宋体-18030;">近日在使用 </span><span new="" courier="" lang="EN-US" style="">DOM4J</span><span style="font-family: 宋体;"></span><span style="font-family: 宋体-18030;"> 的时候，遇到一个问题，现在有两个解决方法，先记下来，以便日后使用。</span></p>
<p class="MsoNormal">问题：对一个 XML 文件进行读写操作，但是发现当文件存在的时候，使用DOM4J读进来的时候，生成的 Document 对象会根据 DTD 里的定义，追加了一些 default 属性（实际不需要）。而且在读取的时间被延长。<span style="font-family: 宋体-18030;"></span></p>
<br />
<p class="MsoNormal"><span style="font-family: 宋体-18030;">有一个</span><span new="" courier="" lang="EN-US" style=""> XML</span><span style="font-family: 宋体-18030;"> 文件如下：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">xml 代码</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">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;beans&nbsp;PUBLIC&nbsp;&quot;-//SPRING//DTD&nbsp;BEAN//EN&quot;&nbsp;&quot;http://www.springframework.org/dtd/spring-beans.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;....&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p class="MsoNormal"><span style="font-family: 宋体;">使用</span><span new="" courier="" lang="EN-US" style=""> DOM4J</span><span style="font-family: 宋体;"> 的读取文件的一般性写法：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>SAXReader&nbsp;reader&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SAXReader(</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>document&nbsp;=&nbsp;reader.read(file);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>root&nbsp;=&nbsp;document.getRootElement();&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<p class="MsoNormal"><span style="font-family: 宋体;">对象</span><span new="" courier="" lang="EN-US" style=""> document</span><span style="font-family: 宋体;"> 里的节点会被自动追加 </span><span new="" courier="" lang="EN-US" style="">DTD</span><span style="font-family: 宋体;"> 里的定义的</span><span new="" courier="" lang="EN-US" style=""> default</span><span style="font-family: 宋体;"> 属性，只有新增加的节点不受影响，如下。而且，如果文件的操作时间被延长。</span></p>
<p class="MsoNormal">
<div class="code_title">xml 代码</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">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;beans&nbsp;PUBLIC&nbsp;&quot;-//SPRING//DTD&nbsp;BEAN//EN&quot;&nbsp;&quot;http://www.springframework.org/dtd/spring-beans.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">default-lazy-init</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">default-autowire</span><span>=</span><span class="attribute-value">&quot;no&quot;</span><span>&nbsp;</span><span class="attribute">default-dependency-check</span><span>=</span><span class="attribute-value">&quot;none&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</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">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<span style="font-family: 宋体;"></span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">为了不让生成我们不需要的</span><span new="" courier="" lang="EN-US" style=""> default </span><span style="font-family: 宋体;"></span><span style="font-family: 宋体;">属性和缩短文件的操作时间，我们可以调用</span><span new="" courier="" lang="EN-US" style=""> SAXReader.</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;">setFeature </span><span style="font-size: 10pt; font-family: 宋体; color: black;">方法来改变</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"> DOM4J</span><span style="font-size: 10pt; font-family: 宋体; color: black;"> 的行为，片断代码如下：</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">//&nbsp;http://apache.org/xml/features/nonvalidating/load-external-dtd&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>saxReader.setFeature(&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Constants.XERCES_FEATURE_PREFIX&nbsp;+&nbsp;Constants.LOAD_EXTERNAL_DTD_FEATURE,&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 宋体;">关于更多的</span><span new="" courier="" lang="EN-US" style="font-size: 9pt;"> Feature</span><span style="font-size: 9pt; font-family: 宋体;"> 请参考</span><strong style=""><span new="" courier="" color:="" lang="EN-US" style="font-size: 9pt;"> <a href="http://kickjava.com/src/com/sun/org/apache/xerces/internal/impl/Constants.java.htm">com.sun.org.apache.xerces.internal.impl.Constants</a><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 宋体;">以下为片断代码：</span><span new="" courier="" lang="EN-US" style="font-size: 9pt;"><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">//&nbsp;xerces&nbsp;features</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Xerces&nbsp;features&nbsp;prefix&nbsp;(&quot;http://apache.org/xml/features/&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;XERCES_FEATURE_PREFIX&nbsp;=&nbsp;</span><span class="string">&quot;http://apache.org/xml/features/&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Schema&nbsp;validation&nbsp;feature&nbsp;(&quot;validation/schema&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_VALIDATION_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Expose&nbsp;schema&nbsp;normalized&nbsp;values&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_NORMALIZED_VALUE&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/normalized-value&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Send&nbsp;schema&nbsp;default&nbsp;value&nbsp;via&nbsp;characters()&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_ELEMENT_DEFAULT&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/element-default&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Schema&nbsp;full&nbsp;constraint&nbsp;checking&nbsp;(&quot;validation/schema-full-checking&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_FULL_CHECKING&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema-full-checking&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Augment&nbsp;Post-Schema-Validation-Infoset&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_AUGMENT_PSVI&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/augment-psvi&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Dynamic&nbsp;validation&nbsp;feature&nbsp;(&quot;validation/dynamic&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DYNAMIC_VALIDATION_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/dynamic&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Warn&nbsp;on&nbsp;duplicate&nbsp;attribute&nbsp;declaration&nbsp;feature&nbsp;(&quot;validation/warn-on-duplicate-attdef&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;WARN_ON_DUPLICATE_ATTDEF_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/warn-on-duplicate-attdef&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Warn&nbsp;on&nbsp;undeclared&nbsp;element&nbsp;feature&nbsp;(&quot;validation/warn-on-undeclared-elemdef&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;WARN_ON_UNDECLARED_ELEMDEF_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/warn-on-undeclared-elemdef&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Warn&nbsp;on&nbsp;duplicate&nbsp;entity&nbsp;declaration&nbsp;feature&nbsp;(&quot;warn-on-duplicate-entitydef&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;WARN_ON_DUPLICATE_ENTITYDEF_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;warn-on-duplicate-entitydef&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Allow&nbsp;Java&nbsp;encoding&nbsp;names&nbsp;feature&nbsp;(&quot;allow-java-encodings&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;ALLOW_JAVA_ENCODINGS_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;allow-java-encodings&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Disallow&nbsp;DOCTYPE&nbsp;declaration&nbsp;feature&nbsp;(&quot;disallow-doctype-decl&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DISALLOW_DOCTYPE_DECL_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;disallow-doctype-decl&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Continue&nbsp;after&nbsp;fatal&nbsp;error&nbsp;feature&nbsp;(&quot;continue-after-fatal-error&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CONTINUE_AFTER_FATAL_ERROR_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;continue-after-fatal-error&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Load&nbsp;dtd&nbsp;grammar&nbsp;when&nbsp;nonvalidating&nbsp;feature&nbsp;(&quot;nonvalidating/load-dtd-grammar&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;LOAD_DTD_GRAMMAR_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;nonvalidating/load-dtd-grammar&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Load&nbsp;external&nbsp;dtd&nbsp;when&nbsp;nonvalidating&nbsp;feature&nbsp;(&quot;nonvalidating/load-external-dtd&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;LOAD_EXTERNAL_DTD_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;nonvalidating/load-external-dtd&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Defer&nbsp;node&nbsp;expansion&nbsp;feature&nbsp;(&quot;dom/defer-node-expansion&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DEFER_NODE_EXPANSION_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;dom/defer-node-expansion&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Create&nbsp;entity&nbsp;reference&nbsp;nodes&nbsp;feature&nbsp;(&quot;dom/create-entity-ref-nodes&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CREATE_ENTITY_REF_NODES_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;dom/create-entity-ref-nodes&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Include&nbsp;ignorable&nbsp;whitespace&nbsp;feature&nbsp;(&quot;dom/include-ignorable-whitespace&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;INCLUDE_IGNORABLE_WHITESPACE&nbsp;=&nbsp;</span><span class="string">&quot;dom/include-ignorable-whitespace&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Default&nbsp;attribute&nbsp;values&nbsp;feature&nbsp;(&quot;validation/default-attribute-values&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DEFAULT_ATTRIBUTE_VALUES_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/default-attribute-values&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Validate&nbsp;content&nbsp;models&nbsp;feature&nbsp;(&quot;validation/validate-content-models&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;VALIDATE_CONTENT_MODELS_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/validate-content-models&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Validate&nbsp;datatypes&nbsp;feature&nbsp;(&quot;validation/validate-datatypes&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;VALIDATE_DATATYPES_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/validate-datatypes&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Notify&nbsp;character&nbsp;references&nbsp;feature&nbsp;(scanner/notify-char-refs&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;NOTIFY_CHAR_REFS_FEATURE&nbsp;=&nbsp;&quot;scanner/notify-</span><span class="keyword">char</span><span>-refs</span><span class="string">&quot;;</span>&nbsp;</span></li>
    <li class=""><span><span class="string"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">/**&nbsp;Notify&nbsp;built-in&nbsp;(&amp;,&nbsp;etc.)&nbsp;references&nbsp;feature&nbsp;(scanner/notify-builtin-refs&quot;</span><span>).&nbsp;*/&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;NOTIFY_BUILTIN_REFS_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;scanner/notify-builtin-refs&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Standard&nbsp;URI&nbsp;conformant&nbsp;feature&nbsp;(&quot;standard-uri-conformant&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;STANDARD_URI_CONFORMANT_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;standard-uri-conformant&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Internal&nbsp;performance&nbsp;related&nbsp;feature:&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;false&nbsp;-&nbsp;the&nbsp;parser&nbsp;settings&nbsp;(features/properties)&nbsp;have&nbsp;not&nbsp;changed&nbsp;between&nbsp;2&nbsp;parses</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;true&nbsp;-&nbsp;the&nbsp;parser&nbsp;settings&nbsp;have&nbsp;changed&nbsp;between&nbsp;2&nbsp;parses&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;NOTE:&nbsp;this&nbsp;feature&nbsp;should&nbsp;only&nbsp;be&nbsp;set&nbsp;by&nbsp;the&nbsp;parser&nbsp;configuration.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;PARSER_SETTINGS&nbsp;=&nbsp;</span><span class="string">&quot;internal/parser-settings&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Feature&nbsp;to&nbsp;make&nbsp;XML&nbsp;Processor&nbsp;XInclude&nbsp;Aware&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;XINCLUDE_AWARE&nbsp;=&nbsp;</span><span class="string">&quot;xinclude-aware&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Ignore&nbsp;xsi:schemaLocation&nbsp;and&nbsp;xsi:noNamespaceSchemaLocation.&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;IGNORE_SCHEMA_LOCATION_HINTS&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/ignore-schema-location-hints&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;When&nbsp;true,&nbsp;the&nbsp;schema&nbsp;processor&nbsp;will&nbsp;change&nbsp;characters&nbsp;events</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;to&nbsp;ignorableWhitespaces&nbsp;events,&nbsp;when&nbsp;characters&nbsp;are&nbsp;expected&nbsp;to</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;only&nbsp;contain&nbsp;ignorable&nbsp;whitespaces.</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CHANGE_IGNORABLE_CHARACTERS_INTO_IGNORABLE_WHITESPACES&nbsp;=&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;validation/change-ignorable-characters-into-ignorable-whitespaces&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<p class="MsoNormal"><span style="font-family: 宋体;">除通过上面的</span><span new="" courier="" lang="EN-US" style=""> SAXReader.</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;">setFeature</span><span style="font-size: 10pt; font-family: 宋体; color: black;"> 文件之外</span><span new="" courier="" color:="" style="font-size: 10pt;"> </span><span style="font-size: 10pt; font-family: 宋体; color: black;">，我们还可以通过自己的</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"> EntityResolver </span><span style="font-size: 10pt; font-family: 宋体; color: black;">来解决这个问题。</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><o:p></o:p></span></p>
<p class="MsoNormal"><span new="" courier="" lang="EN-US" style="">PS</span><span style="font-family: 宋体;">：这个方法是从<a href="http://blog.csdn.net/lessoft/archive/2007/06/20/1659579.aspx"><span style="color: blue;">凝香小筑</span></a>的</span><span new="" courier="" lang="EN-US" style="">BLOG</span><span style="font-family: 宋体;">里</span><span style="font-family: 宋体;">的一编</span><span style="font-family: 宋体;">主题是：</span><span new="" courier="" lang="EN-US" style="">Do not resolve DTD files when dom4j read xml file </span><span style="font-family: 宋体;">的文章里看到的。地址：</span><a href="http://blog.csdn.net/lessoft/archive/2007/06/20/1659579.aspx"><span new="" courier="" color:="" lang="EN-US" style="">http://blog.csdn.net/lessoft/archive/<st1:chsdate isrocdate="False" month="6" day="20" islunardate="False" w:st="on" year="2007">2007/06/20</st1:chsdate>/1659579.aspx</span></a><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">代码片断如下：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>saxReader.setEntityResolver(</span><span class="keyword">new</span><span>&nbsp;EntityResolver()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;emptyDtd&nbsp;=&nbsp;<span class="string">&quot;&quot;</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayInputStream&nbsp;bytels&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ByteArrayInputStream(emptyDtd.getBytes());&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;InputSource&nbsp;resolveEntity(String&nbsp;publicId,&nbsp;String&nbsp;systemId)&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws</span><span>&nbsp;SAXException,&nbsp;IOException&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;InputSource(bytels);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
<br />
<p class="MsoNormal"><span new="" courier="" lang="EN-US" style=""><o:p>&nbsp;</o:p></span>  </p>
<p class="MsoNormal"><span style="font-family: 宋体;">完整的代码如下：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;test;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.BufferedWriter;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.io.ByteArrayInputStream;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.File;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.io.FileWriter;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.IOException;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;junit.framework.TestCase;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.Document;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.dom4j.DocumentHelper;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.Element;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.dom4j.io.OutputFormat;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.io.SAXReader;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.dom4j.io.XMLWriter;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.tree.DefaultDocumentType;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.xml.sax.EntityResolver;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.xml.sax.InputSource;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.xml.sax.SAXException;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.sun.org.apache.xerces.internal.impl.Constants;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;A&nbsp;test&nbsp;case&nbsp;class&nbsp;for&nbsp;read&nbsp;and&nbsp;writer&nbsp;a&nbsp;xml&nbsp;file&nbsp;by&nbsp;Dom4j.</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;X.F.Yang&nbsp;[2007/07/03]</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@version&nbsp;1.0</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;OperateXmlByDom4jTestCase&nbsp;</span><span class="keyword">extends</span><span>&nbsp;TestCase&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Default&nbsp;way&nbsp;to&nbsp;read&nbsp;and&nbsp;writer&nbsp;a&nbsp;xml&nbsp;file&nbsp;by&nbsp;Dom4j.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testWriteXml()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlFileOperation&nbsp;operation&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XmlFileOperation();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation.writer(<span class="keyword">new</span><span>&nbsp;SAXReaderWrapper()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Nothing&nbsp;to&nbsp;do.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&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;&nbsp;});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Do&nbsp;not&nbsp;resolve&nbsp;DTD&nbsp;files&nbsp;when&nbsp;dom4j&nbsp;read&nbsp;xml&nbsp;file&nbsp;via&nbsp;the&nbsp;set&nbsp;feature.&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testWriteXmlSetFeature()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlFileOperation&nbsp;operation&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XmlFileOperation();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation.writer(<span class="keyword">new</span><span>&nbsp;SAXReaderWrapper()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;http://apache.org/xml/features/nonvalidating/load-external-dtd&quot;</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;saxReader.setFeature(&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constants.XERCES_FEATURE_PREFIX&nbsp;+&nbsp;Constants.LOAD_EXTERNAL_DTD_FEATURE,&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&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;&nbsp;});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Do&nbsp;not&nbsp;resolve&nbsp;DTD&nbsp;files&nbsp;when&nbsp;dom4j&nbsp;read&nbsp;xml&nbsp;file&nbsp;via&nbsp;implement&nbsp;{@link&nbsp;EntityResolver}.&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testWriteXmlEntityResolver()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlFileOperation&nbsp;operation&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XmlFileOperation();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation.writer(<span class="keyword">new</span><span>&nbsp;SAXReaderWrapper()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saxReader.setEntityResolver(<span class="keyword">new</span><span>&nbsp;EntityResolver()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;emptyDtd&nbsp;=&nbsp;&quot;<span class="string">&quot;;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayInputStream&nbsp;bytels&nbsp;=&nbsp;new&nbsp;ByteArrayInputStream(emptyDtd.getBytes());</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;InputSource&nbsp;resolveEntity(String&nbsp;publicId,</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;systemId)&nbsp;throws&nbsp;SAXException,&nbsp;IOException&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;InputSource(bytels);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*/</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;interface&nbsp;SAXReaderWrapper&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;operation&nbsp;{@link&nbsp;SAXReader}&nbsp;*/</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;throws&nbsp;Exception;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;when&nbsp;the&nbsp;target&nbsp;file&nbsp;was&nbsp;existed,&nbsp;read&nbsp;and&nbsp;append&nbsp;the&nbsp;new&nbsp;element.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;else,&nbsp;create&nbsp;a&nbsp;new&nbsp;xml&nbsp;file&nbsp;and&nbsp;add&nbsp;the&nbsp;new&nbsp;element.</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;class&nbsp;XmlFileOperation&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;target&nbsp;file&nbsp;*/</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;File&nbsp;file;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;XmlFileOperation()&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;target&nbsp;file</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;=&nbsp;new&nbsp;File(&quot;</span><span>d:\\spring.xml</span><span class="string">&quot;);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Write&nbsp;xml&nbsp;file</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;wrapper&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;{@link&nbsp;SAXReaderWrapper}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;writer(SAXReaderWrapper&nbsp;wrapper)&nbsp;throws&nbsp;Exception&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document&nbsp;=&nbsp;null;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;root&nbsp;=&nbsp;null;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;read&nbsp;the&nbsp;xml&nbsp;file&nbsp;if&nbsp;target&nbsp;file&nbsp;was&nbsp;existed&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(file.exists())&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;reader&nbsp;=&nbsp;new&nbsp;SAXReader(false);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wrapper.operation(reader);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;=&nbsp;reader.read(file);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;document.getRootElement();</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;the&nbsp;target&nbsp;file&nbsp;was&nbsp;not&nbsp;existed,&nbsp;create&nbsp;a&nbsp;new&nbsp;one</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;=&nbsp;DocumentHelper.createDocument();</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.setDocType(new&nbsp;DefaultDocumentType(&quot;</span><span>beans</span><span class="string">&quot;,&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;</span><span>-</span><span class="comment">//SPRING//DTD&nbsp;BEAN//EN&quot;,&nbsp;</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;http:<span class="comment">//www.springframework.org/dtd/spring-beans.dtd&quot;));</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;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;document.addElement(&quot;beans<span class="string">&quot;);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;create&nbsp;the&nbsp;element&nbsp;under&nbsp;the&nbsp;root&nbsp;element</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.addElement(&quot;</span><span>bean</span><span class="string">&quot;)</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addAttribute(&quot;</span><span>id</span><span class="string">&quot;,&nbsp;&quot;</span><span>OperateXmlByDom4jTestCase</span><span class="string">&quot;)</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addAttribute(&quot;</span><span class="keyword">class</span><span class="string">&quot;,&nbsp;&quot;</span><span>test.OperateXmlByDom4jTestCase&quot;);&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;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;writer&nbsp;the&nbsp;document</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;writer(document);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">throw</span><span>&nbsp;e;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&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;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;writer(Document&nbsp;document)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLWriter&nbsp;xmlWriter&nbsp;=&nbsp;<span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;OutputFormat&nbsp;format&nbsp;=&nbsp;OutputFormat.createPrettyPrint();&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;xmlWriter&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XMLWriter(</span><span class="keyword">new</span><span>&nbsp;BufferedWriter(</span><span class="keyword">new</span><span>&nbsp;FileWriter(file)),&nbsp;format);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter.write(document);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(</span><span class="keyword">null</span><span>&nbsp;!=&nbsp;xmlWriter)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter.flush();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/97841#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 04 Jul 2007 17:35:14 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/97841</link>
        <guid>http://dusk.group.javaeye.com/group/blog/97841</guid>
      </item>
      <item>
        <title>Hibernate与JDBC事务整合</title>
        <author>finalbone</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://finalbone.javaeye.com">finalbone</a>&nbsp;
          链接：<a href="http://dusk.group.javaeye.com/group/blog/37707" style="color:red;">http://dusk.group.javaeye.com/group/blog/37707</a>&nbsp;
          发表时间: 2006年12月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近摸索了一下<font face="Arial">Hibernate与JDBC(iBATIS)事务整合问题，算是有点收获，写出来和大家讨论一下吧。。。</font></p>
<p>一般大家都会使用Spring声明型事务 transactionAttributes 为 <font face="Arial">PROPAGATION_REQUIRED</font></p>
<p>Hibernate 使用 HibernateTransactionManager 、JDBC(iBATIS) 使用 <font face="Arial">DataSourceTransactionManager</font></p>
<p>当需要将它们整合到一个事务中的时候</p>
<p>普通的做法是配置统一的DataSource，&nbsp;Hibernate与JDBC(iBATIS) 都使用HibernateTransactionManager </p>
<p><font face="Arial">坛子里有篇帖子已经详细论述了这种整合方案 </font><font face="Arial"><a href="http://www.javaeye.com/topic/11063?page=2">http://www.javaeye.com/topic/11063?page=2</a></font></p>
<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
<p>Hibernate与JDBC(iBATIS) 都使用<font face="Arial">DataSourceTransactionManager又可不可以呢？</font></p>
<p>普遍的看法是 NO！ 认为<font face="Arial">DataSourceTransactionManager根本就不处理Hibernate的session，事务当然无法实现。。。</font></p>
<p>但事实是否真的如此呢？</p>
<p><font face="Arial">答案同样是 NO！&nbsp;<a href="http://forum.springframework.org/archive/index.php/t-9878.html">http://forum.springframework.org/archive/index.php/t-9878.html</a></font></p>
<p><font face="Arial"><strong>Juergen Hoeller：<br />
Just if you proxy your JDBC DataSource with a TransactionAwareDataSourceProxy (available since Spring 1.1 RC1) and pass that proxy to your LocalSessionFactoryBean, you could use DataSourceTransactionManager in combination with Hibernate.</strong></font></p>
<p>也就是说配置 <font face="Arial">sessionFactory &nbsp;的 <font face="Arial">useTransactionAwareDataSource 为 true</font></font></p>
<p>Hibernate与JDBC(iBATIS)&nbsp; 都使用 <font face="Arial">DataSourceTransactionManager 同样可以保证事务</font></p>
<p>原理就是保证了 connection 的唯一性。</p>
          <br/>
          <span style="color:red;">
            <a href="http://dusk.group.javaeye.com/group/blog/37707#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 07 Dec 2006 09:33:26 +0800</pubDate>
        <link>http://dusk.group.javaeye.com/group/blog/37707</link>
        <guid>http://dusk.group.javaeye.com/group/blog/37707</guid>
      </item>
  </channel>
</rss>