<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[程序员启示录]]></title>
<link>http://www.yexu8.com/</link>
<description><![CDATA[任何时候都要把自己放在最低的位置 , java,struts,hibernate,spring,mysql,sqlserver,oracle,asp,php,seo]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[blurxx@yahoo.cn(Blurxx)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>程序员启示录</title>
	<url>http://www.yexu8.com/images/logos.gif</url>
	<link>http://www.yexu8.com/</link>
	<description>程序员启示录</description>
</image>

			<item>
			<link>http://www.yexu8.com/article.asp?id=897</link>
			<title><![CDATA[代码实现显示&#34;数据加载中...&#34;]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[Web技巧]]></category>
			<pubDate>Mon,06 Oct 2008 13:14:00 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=897</guid>
		<description><![CDATA[第一步：将以下代码复制到&lt;head&gt;和&lt;/head&gt;标记之中： <br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yexu8.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&lt;script language=&#34;JavaScript&#34; type=&#34;text/<a href="http://www.yexu8.com" target="_blank">java</a>script&#34;&gt; <br/>var t_id = setInterval(animate,20); <br/>var pos=0; <br/>var dir=2; <br/>var len=0; <br/>function animate() <br/>{ <br/>var elem = document.getElementById(&#39;progress&#39;); <br/>if(elem != null) { <br/>if (pos==0) len += dir; <br/>if (len&gt;32 || pos&gt;79) pos += dir; <br/>if (pos&gt;79) len -= dir; <br/>if (pos&gt;79 &amp;&amp; len==0) pos=0; <br/>elem.style.left = pos; <br/>elem.style.width = len; <br/>} <br/>} <br/>function remove_loading() { <br/>this.clearInterval(t_id); <br/>var targelem = document.getElementById(&#39;loader_container&#39;); <br/>targelem.style.display=&#39;none&#39;; <br/>targelem.style.visibility=&#39;hidden&#39;; <br/>} <br/>&lt;/script&gt; <br/>&lt;style&gt; <br/>#loader_container { <br/>text-align:center; <br/>position:absolute; <br/>top:40%; <br/>width:100%; <br/>left: 0; <br/>} <br/>#loader { <br/>font-family:Tahoma, Helvetica, sans; <br/>font-size:11.5px; <br/>color:#000000; <br/>background-color:#FFFFFF; <br/>padding:10px 0 16px 0; <br/>margin:0 auto; <br/>display:block; <br/>width:130px; <br/>border:1px solid #5a667b; <br/>text-align:left; <br/>z-index:2; <br/>} <br/>#progress { <br/>height:5px; <br/>font-size:1px; <br/>width:1px; <br/>position:relative; <br/>top:1px; <br/>left:0px; <br/>background-color:#8894a8; <br/>} <br/>#loader_bg { <br/>background-color:#e4e7eb; <br/>position:relative; <br/>top:8px; <br/>left:8px; <br/>height:7px; <br/>width:113px; <br/>font-size:1px; <br/>} <br/>&lt;/style&gt; </div></div><br/><br/>第二步：将以下代码复制到&lt;body&gt;和&lt;/body&gt;标记之中： <br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yexu8.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&lt;body onLoad=&#34;remove_loading();&#34;&gt; <br/>&lt;div id=&#34;loader_container&#34;&gt; <br/>&lt;div id=&#34;loader&#34;&gt; <br/>&lt;div align=&#34;center&#34;&gt;页面正在加载中 ...&lt;/div&gt; <br/>&lt;div id=&#34;loader_bg&#34;&gt;&lt;div id=&#34;progress&#34;&gt; &lt;/div&gt;&lt;/div&gt; <br/>&lt;/div&gt; <br/>&lt;/div&gt; <br/>&lt;/body&gt;</div></div> <br/><br/>注：这里的&lt;body onLoad=&#34;remove_loading();&#34;&gt;已经包含了一个&lt;body&gt;标记，不需要在添加一个。最后我已经加了一个&lt;/body&gt;,要复制的时候小心不要和原有的&lt;body&gt;标签重复哦。]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=896</link>
			<title><![CDATA[本X]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[五味]]></category>
			<pubDate>Sat,04 Oct 2008 21:36:18 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=896</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 我从小就是个沉默寡言的孩子，不知从何时开始我总怀有一种难以名状的苦闷。也不知多少次被人重创，遭人欺骗，亦或被人误解。99年末接触过一个网游叫千年，当时一度沉溺在其中。事隔多年仍然会想起，感慨万千。倘若还有一次选择的机会，我还会选择它吗，我想还是会的。经过它之后，我对任何网游都有了较强的免疫力。之后的WOW我也玩过，但已经不像之前那样着迷了，当时在那最大的爱好就是钓鱼。自从安走后，那个游戏就送人了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;我用一种叙事性的口吻来说这些我与网游的经历。其实游戏并没让我失去什么，相反让我得到很多。千年之后我开始一度钻研木马程序原理，网络安全、Base64编码破解与信息反解密。而WOW让我有幸认识了安，留下了一段美好的回忆。<br/>&nbsp;&nbsp;&nbsp;&nbsp;说心里话，我觉得自己或多或少有些自闭症，因为我也习惯和自己说话。我并不是像Ben那样会在心里假想出一个爱人来（估计他那是比较严重的），我只是有时自己和自己说话，还会和淘淘说话。蛮吓人的哈，不过我自己倒无所谓。]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=895</link>
			<title><![CDATA[自定义遍历标签，修改版]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[笔记 ]]></category>
			<pubDate>Mon,29 Sep 2008 15:35:09 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=895</guid>
		<description><![CDATA[上篇文章的自定义标签我用了一段时间，我发现pageContent的值不能在下一次标签使用时销毁。这样我又改进了下，如下，另增加了indexId属性<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yexu8.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">public class MyIterateTag extends BodyTagSupport {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private static final long serialVersionUID = -6171671879525533157L;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Logger log = Logger.getLogger(IterateTag.class);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Tag的属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String typeid;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String id;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String row;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String type;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String o&#114;derby;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String att;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String indexId;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// it为要迭代的对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Iterator it = null;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/** */<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 设置属性collection<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setCollection(Collection collection) {<br/>&#160;&#160;&#160;&#160;if (collection.size() &gt; 0)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;it = collection.iterator();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果it属性为null，那么忽略计算tagbody。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public int doStartTag() throws JspTagException {<br/><br/>&#160;&#160;&#160;&#160;if (typeid == null)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return SKIP_BODY;<br/>&#160;&#160;&#160;&#160;else {<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;String hql = this.getHql(type, o&#114;derby);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;Collection li = new ArrayList();<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;li = this.getList(hql.toString(), row);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;it = li.iterator();<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;if (it == null)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return SKIP_BODY;<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return continueNext(it);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public int doAfterBody() throws JspTagException {<br/><br/>&#160;&#160;&#160;&#160;if (bodyContent != null)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;try {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bodyContent.writeOut(bodyContent.getEnclosingWriter());<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// TODO 自动生成 catch 块<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&#160;&#160;&#160;&#160;return continueNext(it);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public int doEndTag() throws JspTagException {<br/>&#160;&#160;&#160;&#160;it = null;<br/>&#160;&#160;&#160;&#160;flag = 1;<br/><br/>&#160;&#160;&#160;&#160;return EVAL_PAGE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/** */<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 保护方法，用于把it.next()设置为pagecontext的属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;int flag = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;protected int continueNext(Iterator it) throws JspTagException {<br/><br/>&#160;&#160;&#160;&#160;if (it.hasNext()) {<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;pageContext.setAttribute(id, it.next(), PageContext.PAGE_SCOPE);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (indexId != null) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pageContext.setAttribute(indexId, new Integer(flag),<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;PageContext.PAGE_SCOPE);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;log.info(&#34;index&#34; + flag);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;flag++;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return (EVAL_BODY_TAG);<br/>&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return SKIP_BODY;<br/>&#160;&#160;&#160;&#160;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public Collection getList(String hql, String row) {<br/><br/>&#160;&#160;&#160;&#160;// System.out.println(hql);<br/><br/>&#160;&#160;&#160;&#160;ArticleService s = new ArticleService();<br/><br/>&#160;&#160;&#160;&#160;List li = null;<br/><br/>&#160;&#160;&#160;&#160;if (type != null &amp;&amp; type.equals(&#34;rand&#34;))<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;li = s.getMaxRsRandArticle(hql, Integer.parseInt(row));<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;li = s.getMaxRsManayArticle(hql, Integer.parseInt(row));<br/><br/>&#160;&#160;&#160;&#160;return li;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getHql(String type, String o&#114;derby) {<br/><br/>&#160;&#160;&#160;&#160;int label = 0;<br/><br/>&#160;&#160;&#160;&#160;// 切词<br/>&#160;&#160;&#160;&#160;IterateBean bean = new IterateBean();<br/><br/>&#160;&#160;&#160;&#160;StringBuffer addHql = new StringBuffer();<br/><br/>&#160;&#160;&#160;&#160;// 处理typeid<br/>&#160;&#160;&#160;&#160;if (!typeid.equals(&#34;0&#34;)) {<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;(&#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;a.catalog=&#34; + typeid);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;CatalogService cs = new CatalogService();<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;int cid = Integer.parseInt(typeid);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;Catalog catalog = cs.getCatalog(cid);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;// 关联的子集<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql = bean.getChildId(catalog, addHql);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;)&#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;label = 1;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;// 处理type<br/>&#160;&#160;&#160;&#160;if (type != null) {<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (label == 1)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;addHql.append(&#34; and &#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (type.equals(&#34;.image&#34;)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;addHql.append(&#34;a.imgPath!=null&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;label = 1;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;// log.info(&#34;att:&#34;+att);<br/><br/>&#160;&#160;&#160;&#160;if (att != null) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (label == 1)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;addHql.append(&#34; and &#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;a.att =&#39;&#34; + att + &#34;&#39;&#34;);<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;label = 1;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;String hql = &#34;&#34;;<br/>&#160;&#160;&#160;&#160;String oby = &#34;id&#34;;<br/><br/>&#160;&#160;&#160;&#160;// 处理orderby<br/>&#160;&#160;&#160;&#160;if (orderby != null) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;oby = o&#114;derby;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;if (label == 0) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;hql = &#34;from Article as a o&#114;der by a.&#34; + oby + &#34; desc&#34;;<br/>&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;hql = &#34;from Article as a wh&#101;re &#34; + addHql + &#34; o&#114;der by a.&#34; + oby<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;+ &#34; desc&#34;;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;return hql;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getId() {<br/>&#160;&#160;&#160;&#160;return id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setId(String id) {<br/>&#160;&#160;&#160;&#160;this.id = id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getRow() {<br/>&#160;&#160;&#160;&#160;return row;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setRow(String row) {<br/>&#160;&#160;&#160;&#160;this.row = row;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getTypeid() {<br/>&#160;&#160;&#160;&#160;return typeid;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setTypeid(String typeid) {<br/>&#160;&#160;&#160;&#160;this.typeid = typeid;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getOrderby() {<br/>&#160;&#160;&#160;&#160;return o&#114;derby;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setOrderby(String o&#114;derby) {<br/>&#160;&#160;&#160;&#160;this.orderby = o&#114;derby;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getType() {<br/>&#160;&#160;&#160;&#160;return type;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setType(String type) {<br/>&#160;&#160;&#160;&#160;this.type = type;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getAtt() {<br/>&#160;&#160;&#160;&#160;return att;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setAtt(String att) {<br/>&#160;&#160;&#160;&#160;this.att = att;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getIndexId() {<br/>&#160;&#160;&#160;&#160;return indexId;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setIndexId(String indexId) {<br/>&#160;&#160;&#160;&#160;this.indexId = indexId;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>}</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=894</link>
			<title><![CDATA[自定义遍历标签，原始版]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[笔记 ]]></category>
			<pubDate>Mon,29 Sep 2008 15:32:26 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=894</guid>
		<description><![CDATA[这样做主要是为了方便用户自制SKIN<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.yexu8.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">public class IterateTag extends BodyTagSupport {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private static final long serialVersionUID = -6171671879525533157L;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Logger log = Logger.getLogger(IterateTag.class);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Tag的属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String typeid;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String id;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String row;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String type;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String o&#114;derby;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private String att;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// it为要迭代的对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Iterator it = null;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/** */<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 设置属性collection<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setCollection(Collection collection) {<br/>&#160;&#160;&#160;&#160;if (collection.size() &gt; 0)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;it = collection.iterator();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/** */<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 如果it属性为null，那么忽略计算tagbody。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public int doStartTag() throws JspTagException {<br/><br/>&#160;&#160;&#160;&#160;if (typeid == null)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return SKIP_BODY;<br/>&#160;&#160;&#160;&#160;else {<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;String hql = this.getHql(type, o&#114;derby);<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;Collection li = new ArrayList();<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;li = this.getList(hql.toString(), row);<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;it = li.iterator();<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;if (it == null)<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return SKIP_BODY;<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return continueNext(it);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public int doAfterBody() throws JspTagException {<br/>&#160;&#160;&#160;&#160;return continueNext(it);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public int doEndTag() throws JspTagException {<br/>&#160;&#160;&#160;&#160;try {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (bodyContent != null)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bodyContent.writeOut(bodyContent.getEnclosingWriter());<br/>&#160;&#160;&#160;&#160;} catch (<a href="http://www.yexu8.com" target="_blank">java</a>.io.IOException e) {<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;return EVAL_PAGE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/** */<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 保护方法，用于把it.next()设置为pagecontext的属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;protected int continueNext(Iterator it) throws JspTagException {<br/>&#160;&#160;&#160;&#160;if (it.hasNext()) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;pageContext.setAttribute(id, it.next(), PageContext.PAGE_SCOPE);<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return EVAL_BODY_TAG;<br/>&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;return SKIP_BODY;<br/>&#160;&#160;&#160;&#160;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public Collection getList(String hql, String row) {<br/><br/>&#160;&#160;&#160;&#160;// System.out.println(hql);<br/><br/>&#160;&#160;&#160;&#160;ArticleService s = new ArticleService();<br/><br/>&#160;&#160;&#160;&#160;List li = null;<br/><br/>&#160;&#160;&#160;&#160;if (type != null &amp;&amp; type.equals(&#34;rand&#34;))<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;li = s.getMaxRsRandArticle(hql, Integer.parseInt(row));<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;li = s.getMaxRsManayArticle(hql, Integer.parseInt(row));<br/><br/>&#160;&#160;&#160;&#160;return li;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getHql(String type, String o&#114;derby) {<br/><br/>&#160;&#160;&#160;&#160;int label = 0;<br/><br/>&#160;&#160;&#160;&#160;// 切词<br/>&#160;&#160;&#160;&#160;IterateBean bean = new IterateBean();<br/><br/>&#160;&#160;&#160;&#160;StringBuffer addHql = new StringBuffer();<br/><br/>&#160;&#160;&#160;&#160;// 处理typeid<br/>&#160;&#160;&#160;&#160;if (!typeid.equals(&#34;0&#34;)) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;(&#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;a.catalog=&#34; + typeid);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;CatalogService cs = new CatalogService();<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;int cid = Integer.parseInt(typeid);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;Catalog catalog = cs.getCatalog(cid);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;//关联的子集<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql = bean.getChildId(catalog, addHql);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;)&#34;);<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;label = 1;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;// 处理type<br/>&#160;&#160;&#160;&#160;if (type != null) {<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (label == 1)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;addHql.append(&#34; and &#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (type.equals(&#34;.image&#34;)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;addHql.append(&#34;a.imgPath!=null&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;label = 1;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;log.info(&#34;att:&#34;+att);<br/><br/>&#160;&#160;&#160;&#160;if (att != null) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;if (label == 1)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;addHql.append(&#34; and &#34;);<br/><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;addHql.append(&#34;a.att =&#39;&#34; + att + &#34;&#39;&#34;);<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;label = 1;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;String hql = &#34;&#34;;<br/>&#160;&#160;&#160;&#160;String oby = &#34;id&#34;;<br/><br/>&#160;&#160;&#160;&#160;// 处理orderby<br/>&#160;&#160;&#160;&#160;if (orderby != null) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;oby = o&#114;derby;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;if (label == 0) {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;hql = &#34;from Article as a o&#114;der by a.&#34; + oby + &#34; desc&#34;;<br/>&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;hql = &#34;from Article as a wh&#101;re &#34; + addHql + &#34; o&#114;der by a.&#34; + oby<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;+ &#34; desc&#34;;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;log.info(&#34;heh hql::&#34; + hql);<br/><br/>&#160;&#160;&#160;&#160;return hql;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getId() {<br/>&#160;&#160;&#160;&#160;return id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setId(String id) {<br/>&#160;&#160;&#160;&#160;this.id = id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getRow() {<br/>&#160;&#160;&#160;&#160;return row;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setRow(String row) {<br/>&#160;&#160;&#160;&#160;this.row = row;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getTypeid() {<br/>&#160;&#160;&#160;&#160;return typeid;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setTypeid(String typeid) {<br/>&#160;&#160;&#160;&#160;this.typeid = typeid;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getOrderby() {<br/>&#160;&#160;&#160;&#160;return o&#114;derby;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setOrderby(String o&#114;derby) {<br/>&#160;&#160;&#160;&#160;this.orderby = o&#114;derby;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getType() {<br/>&#160;&#160;&#160;&#160;return type;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setType(String type) {<br/>&#160;&#160;&#160;&#160;this.type = type;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getAtt() {<br/>&#160;&#160;&#160;&#160;return att;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setAtt(String att) {<br/>&#160;&#160;&#160;&#160;this.att = att;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>}</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=893</link>
			<title><![CDATA[正确解决OutOfMemeoryError中heap space故障]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[笔记 ]]></category>
			<pubDate>Sun,28 Sep 2008 14:40:01 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=893</guid>
		<description><![CDATA[<p>&nbsp;这段时间，我们的J10平台总是报OutOfMemoryError，基本平均在7小时左右就会报错，停止服务。而那段时间我的工作重心被安排倾向在搜索查作弊上，平台一直是技术经理Kenny在维护了，也由他查这个问题，我有点轻视了这个问题，仅按照网络的一些文章提示检查和配置了一些Java虚拟机的参数，然后由K去检查和排除故障点，所以直到第三天我制订好了防作弊的业务规则后，才又注意到这个报错一直在发生。</p>
<p>&nbsp;</p>
<p>然后找K来聊，他说网上的文章都说是加大内存配置一个-Xms -Xmn -Xmx之类的内容就可以，可是他暂时不清楚配置在哪里<img alt="" src="http://wap.javaeye.com/images/smiles/icon_cool.gif" _counted="undefined" />。我就开始跟踪报错时日志，从中找流程脉络，先花了十分钟找到一个文件I/O的资源泄露，再花了五分钟找到一个内存溢出的代码段，改掉这两个地方后，目前运作到第五天了，没有再报内存溢出的错误。以下把查找这类错误的经验和大家交流一下，<span style="color: #0000ff">希望大家以后碰到类似问题时，不要完全信奉拿来主义甚至以拿来为标准不加思索的去用，而要根据你的知识去根据jvm日志（我用resin时看jvm-default.log，有人回帖提示websphere和weblog是<span class="hilite1"><font style="background-color: #ffff00">Heap</font></span>Dump和Javacore文件）分析，去读自己的代码，找根本原因才是解决之道。</span></p>
<p>&nbsp;</p>
<p>这里我把查这个错的工作过程介绍一下，其中的示例代码并非真正工作当中的代码，而是点出重点：</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: medium; font-family: 黑体"><font size="3">一、根本思路</font></span></strong></p>
<p>1、OutOfMemoryError所报的<span class="hilite1"><font style="background-color: #ffff00">heap</font></span> <span class="hilite2"><font style="background-color: #55ff55">space</font></span>错误是堆的空间不足，大家都知道，<span class="hilite1"><font style="background-color: #ffff00">heap</font></span>（堆）是动态分配大小的区域，不需要预声明空间大小，并且由JVM自动管理和回收。</p>
<p>2、<span class="hilite1"><font style="background-color: #ffff00">heap</font></span>里存放的是非共享的过程性的变量或者资源的，也就是说错误原因就是<span class="hilite1"><font style="background-color: #ffff00">heap</font></span>里的数据一直增长发生了错误。</p>
<p>综上所述，错误原因是过程当中对一些资源没有释放、内存没有释放导致的。特别需要注意的就是容器里的数据。</p>
<p><strong><span style="font-size: medium; font-family: 黑体"><font size="3">二、过程示例</font></span></strong></p>
<p>我首先去看我的jvm的日志文件，如果你是自己的client型软件，那么养成良好习惯记得自己做一下logging操作，对于异常要进行exception.printStackTrace(OutputStream)的操作。我做的是b/s项目，使用的resin-3.1.5平台，resin-3.1.5的jvm日志存放在log/jvm-default.log文件。我用vi指令打开jvm-default.log文件，键入&ldquo;:$&rdquo;跳到最后一行，再键入&ldquo;?OutOfMemoryError&rdquo;，这样其实可以看到jvm打出来的错误报告，尽量找到这件故障第一次报错时的错误提示，以后的错误提示可信度不高，因为内存管理已经紊乱。例如我看到的错原因是：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>java.lang.OutOfMemoryError:&nbsp;Java&nbsp;&lt;SPAN&nbsp;</span><span class="keyword">class</span><span>=hilite1&gt;heap&lt;/SPAN&gt;&nbsp;&lt;SPAN&nbsp;</span><span class="keyword">class</span><span>=hilite2&gt;space&lt;/SPAN&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.caucho.server.http.HttpRequest.&lt;init&gt;(HttpRequest.java:</span><span class="number">102</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.caucho.server.http.HttpProtocol.createRequest(HttpProtocol.java:</span><span class="number">70</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.caucho.server.port.Port.run(Port.java:</span><span class="number">1428</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Thread.run(Thread.java:</span><span class="number">619</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.caucho.server.http.HttpRequest.&lt;init&gt;(HttpRequest.java:</span><span class="number">102</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.caucho.server.http.HttpProtocol.createRequest(HttpProtocol.java:</span><span class="number">70</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.caucho.server.port.Port.run(Port.java:</span><span class="number">1428</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Thread.run(Thread.java:</span><span class="number">619</span><span>)&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
java.lang.OutOfMemoryError: Java <span class="hilite1"><font style="background-color: #ffff00">heap</font></span> <span class="hilite2"><font style="background-color: #55ff55">space</font></span>
        at com.caucho.server.http.HttpRequest.&lt;init&gt;(HttpRequest.java:102)
        at com.caucho.server.http.HttpProtocol.createRequest(HttpProtocol.java:70)
        at com.caucho.server.port.Port.run(Port.java:1428)
        at java.lang.Thread.run(Thread.java:619)
        at com.caucho.server.http.HttpRequest.&lt;init&gt;(HttpRequest.java:102)
        at com.caucho.server.http.HttpProtocol.createRequest(HttpProtocol.java:70)
        at com.caucho.server.port.Port.run(Port.java:1428)
        at java.lang.Thread.run(Thread.java:619)</pre>
<p>我先说一下这个是不准确的，因为系统已经乱了。为什么这么说呢，因为这个报的是系统级错误了。呵，根据前面我说的<span class="hilite1"><font style="background-color: #ffff00">heap</font></span> <span class="hilite2"><font style="background-color: #55ff55">space</font></span>的故障原因来说，故障应该是由我们自己的故障引起的（因为resin是很健壮的，这个信任是前提）。</p>
<p>然后看到第一个报错原因是这样的：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>[</span><span class="number">12</span><span>:</span><span class="number">31</span><span>:</span><span class="number">47.372</span><span>]&nbsp;{http--</span><span class="number">8080</span><span>-</span><span class="number">10</span><span>}&nbsp;java.lang.OutOfMemoryError:&nbsp;Java&nbsp;&lt;SPAN&nbsp;</span><span class="keyword">class</span><span>=hilite1&gt;heap&lt;/SPAN&gt;&nbsp;&lt;SPAN&nbsp;</span><span class="keyword">class</span><span>=hilite2&gt;space&lt;/SPAN&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>[</span><span class="number">12</span><span>:</span><span class="number">31</span><span>:</span><span class="number">47.372</span><span>]&nbsp;{http--</span><span class="number">8080</span><span>-</span><span class="number">10</span><span>}&nbsp;&nbsp;at&nbsp;java.util.Properties$LineReader.&lt;init&gt;(Properties.java:</span><span class="number">389</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>[</span><span class="number">12</span><span>:</span><span class="number">31</span><span>:</span><span class="number">47.372</span><span>]&nbsp;{http--</span><span class="number">8080</span><span>-</span><span class="number">10</span><span>}&nbsp;&nbsp;at&nbsp;java.util.Properties.load(Properties.java:</span><span class="number">325</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>[</span><span class="number">12</span><span>:</span><span class="number">31</span><span>:</span><span class="number">47.372</span><span>]&nbsp;{http--</span><span class="number">8080</span><span>-</span><span class="number">10</span><span>}&nbsp;&nbsp;at&nbsp;amun.util.PropertiesUtil.property(PropertiesUtil.java:</span><span class="number">40</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>[</span><span class="number">12</span><span>:</span><span class="number">31</span><span>:</span><span class="number">47.372</span><span>]&nbsp;{http--</span><span class="number">8080</span><span>-</span><span class="number">10</span><span>}&nbsp;&nbsp;at&nbsp;j10.ads.J10Ad.getMidAndAgentAsString(J10Ad.java:</span><span class="number">207</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>[</span><span class="number">12</span><span>:</span><span class="number">31</span><span>:</span><span class="number">47.372</span><span>]&nbsp;{http--</span><span class="number">8080</span><span>-</span><span class="number">10</span><span>}&nbsp;&nbsp;at&nbsp;_jsp._ads._3040._before__jsp._jspService(_before__jsp.java:</span><span class="number">198</span><span>)&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
[12:31:47.372] {http--8080-10} java.lang.OutOfMemoryError: Java <span class="hilite1"><font style="background-color: #ffff00">heap</font></span> <span class="hilite2"><font style="background-color: #55ff55">space</font></span>
[12:31:47.372] {http--8080-10}  at java.util.Properties$LineReader.&lt;init&gt;(Properties.java:389)
[12:31:47.372] {http--8080-10}  at java.util.Properties.load(Properties.java:325)
[12:31:47.372] {http--8080-10}  at amun.util.PropertiesUtil.property(PropertiesUtil.java:40)
[12:31:47.372] {http--8080-10}  at j10.ads.J10Ad.getMidAndAgentAsString(J10Ad.java:207)
[12:31:47.372] {http--8080-10}  at _jsp._ads._3040._before__jsp._jspService(_before__jsp.java:198)</pre>
<p>&nbsp;立马打开PropertiesUtil.property()方法，仔细一看果然是代码出现了资源泄露的问题。修改它后重启，仅花了十分钟左右。</p>
<p>&nbsp;</p>
<p>第二次时又发生错误，我如法炮法，找到另一个内存溢出的问题。</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: medium; font-family: 黑体"><font size="3">三、什么是资源泄露？</font></span></strong></p>
<p>&nbsp;</p>
<p>这个资源一般界定为一种可用I/O句柄、物理连接句柄之类的&ldquo;必须显示声明释放的句柄&rdquo;我称他为资源。如上面所述的一个资源泄露的例子就是代码中忘了关掉这类句柄导致的资源泄露，来，实战一下：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="comment"><font color="#008200">//&nbsp;........ </font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Property&nbsp;prop&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;file&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>&nbsp;staitc&nbsp;</span><span class="keyword">void</span><span>&nbsp;config(String&nbsp;path){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.file&nbsp;=&nbsp;path; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;property(String&nbsp;key){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(&nbsp;file&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//........ </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;input&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileInputStream(file); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//这里每次重新创建一次，目的本来是为了达到动态生效的。 </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prop&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Properties(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prop.load(input); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;prop.getProperty(key); &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
// ........
private static Property prop = null;
private static String file = null;
    

public staitc void config(String path){
        this.file = path;


}


public static String property(String key){
        if ( file == null )
                return null;
        //........
        FileInputStream input = new FileInputStream(file);
        //这里每次重新创建一次，目的本来是为了达到动态生效的。
     prop = new Properties();
        prop.load(input);
        return prop.getProperty(key);
}</pre>
<p>&nbsp;嚯嚯，这里的input就是一个已打开的文件I/O句柄，这类具有物理连接性质的&ldquo;资源&rdquo;，Java是不会回收的，如果没有做input.close()操作，jvm会认为这个资源是一直被使用的，所以，当我们的访问量很大到累积到一定程度时，就出错了。我当时改写成这样的了：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;property(String&nbsp;key)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(&nbsp;file&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(&nbsp;prop&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;input&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileInputStream(file); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prop&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Properties(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prop.load(fis); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;STRONG&gt;input.close();&lt;/STRONG&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(e.getMessage()); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;prop.getProperty(key); &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
public static String property(String key) {
	if ( file == null )
		return null;	

	try {
		if ( prop == null ){
			FileInputStream input = new FileInputStream(file);
			prop = new Properties();
			prop.load(fis);
			<strong>input.close();</strong>
		}
	} catch (Exception e) {
		logger.error(e.getMessage());
		e.printStackTrace();
	}
	return prop.getProperty(key);
}
</pre>
<p>&nbsp;进行了input.close()的操作，这样，jvm就会回收了。</p>
<p>&nbsp;</p>
<p><span style="font-size: medium; font-family: 黑体"><strong><font size="3">四、什么是内存泄露</font></strong></span></p>
<p>&nbsp;</p>
<p>直接说例子了，象这次出现的一个内存泄露的情况是一个这样的代码。jsp会调用一个bean AreaIP里的方法getXXIP()，这个类大致是这样的：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;List&lt;String&gt;&nbsp;guangZhou&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList&lt;String&gt;(); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;List&lt;String&gt;&nbsp;getGuangZhouIP(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;[]&nbsp;gzArray=&nbsp;{&nbsp;</span><span class="string"><font color="#0000ff">&quot;one&nbsp;ip&quot;</font></span><span>,</span><span class="string"><font color="#0000ff">&quot;two&nbsp;ip&quot;</font></span><span>&nbsp;};&nbsp;</span><span class="comment"><font color="#008200">//省略，原例子有80多个，他的原目的是便于手动增删； </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(String&nbsp;gz&nbsp;:&nbsp;gzArray&nbsp;) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;guangZhou.add(gz); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;guangZhou; &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
private static List&lt;String&gt; guangZhou = new ArrayList&lt;String&gt;();

public static List&lt;String&gt; getGuangZhouIP(){
        String [] gzArray= { &quot;one ip&quot;,&quot;two ip&quot; }; //省略，原例子有80多个，他的原目的是便于手动增删；
      for(String gz : gzArray )
              guangZhou.add(gz);
        return guangZhou;
}</pre>
<p>其实这个guangZhou本身是放在stack（栈）里的，但是前段大量的访问调用后，这个错误的代码就在jsp里被当作<span class="hilite1"><font style="background-color: #ffff00">heap</font></span> <span class="hilite2"><font style="background-color: #55ff55">space</font></span>报出来了。jsp里的代码是这个样子的：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>List&lt;String&gt;&nbsp;example&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList&lt;String&gt;(); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>example.addAll(AreaIP.getGuangZhouIP());&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
List&lt;String&gt; example = new ArrayList&lt;String&gt;();

example.addAll(AreaIP.getGuangZhouIP());</pre>
<p>&nbsp;为什么会报<span class="hilite1"><font style="background-color: #ffff00">heap</font></span>错误，让各位朋友自己去思考一下，当作互动吧。呵呵</p>
<p>修改以后的代码是这样的：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://wap.javaeye.com/blog/197354#"><img alt="复制代码" src="http://wap.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">if</span><span>&nbsp;(&nbsp;guangZhou.size()&lt;</span><span class="number">1</span><span>&nbsp;){ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;[]&nbsp;gz&nbsp;&nbsp;=&nbsp;{};</span><span class="comment"><font color="#008200">//此处省略 </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(&nbsp;String&nbsp;g&nbsp;:&nbsp;gz&nbsp;) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;guangZhou.add(g); &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">
if ( guangZhou.size()&lt;1 ){
        String [] gz  = {};//此处省略
      for ( String g : gz )
                guangZhou.add(g);
}</pre>
<p><span style="font-size: medium; font-family: 黑体"><strong><font size="3">&nbsp;五、结论</font></strong></span></p>
<p>其实从以上例子各位可能看出来了，点出这个错误后，大家都会哦的一声，估计没有人不懂的，你看我发出帖子，就有人回帖说这个是新手级错误了。不知道你们一个团队带了几个人？在一个团队中，难道你真的没有碰到过令你哭笑不得的新手级错误？恐怕有经验的人都经历过。</p>
<p>&nbsp;</p>
<p>所以解决OutOfMemoryError中<span class="hilite1"><font style="background-color: #ffff00">heap</font></span> <span class="hilite2"><font style="background-color: #55ff55">space</font></span>错误，不是象网上搜出的几篇文章说的改一下jvm参数就行的，一定是你的程序当中有环节存在故障，象别人说的&ldquo;新手级错误&rdquo;，希望工作当中能避免！</p>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=892</link>
			<title><![CDATA[转自 华·折腾 ]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[五味]]></category>
			<pubDate>Fri,26 Sep 2008 09:26:16 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=892</guid>
		<description><![CDATA[2005年中国十大恶心言论候选 [转自 华·折腾 ]<br/>1.石油电信电力等行业中几乎没有垄断，它是国家的，它是人民的。所以，它所获得的盈利都是为人民谋利益的。”&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－12月22日国资委主任李荣融在国新办记者会上表示 <br/>　　<br/>2. “中国教育改革是成功的！一个承担着教育规模为世界之最的教育，实现了“两个跨越”：使85%以上的人接受了义务教育，使20%的人接受高等教育”&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－12月22日教育部新闻发言人王旭明与网民交流 　　<br/> <br/>3.“药品不能当馒头卖！药价不贵，不同意降价”&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;－－东盛制药集团总裁陶朝辉在“中国医药风云榜”颁奖典礼上抛出“馒头论” 　　<br/> <br/>4.“房产就该暴利！将暴利进行到底”&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;－－11月中旬，北京华远地产董事长任志强在“2005首届中国地产品牌价值评估与品牌评选活动”论坛上发言 　　<br/> <br/>5.“矿难与矿工素质不高有关”&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－11月30日黑龙江七台河矿难矿方领导接受采访表示 　　<br/> <br/>6.“出现‘警匪勾结’这种情况的重要原因是警察待遇过低”&nbsp;&nbsp;&nbsp;&nbsp; －－成都火车站派出所副所长付小华接受采访时表示 　　<br/> <br/>7.“起征点太高就剥夺了低收入者作为纳税人的荣誉”&nbsp;&nbsp;&nbsp;&nbsp; －－全国人大农业与农村委员会委员任正隆 　　<br/> <br/>8.“8亿多农民和下岗工人是中国巨大的财富，没有他们的辛苦哪有少数人的享乐，他们的存——经济学萧灼基 　　<br/> <br/>20.把当年侵略中国的八国联军的八个国家找过来，这八个国家，每一个国家建一所学院，就建在圆明园的遗址上面，形成一所联合大学！就叫做圆明园大学或叫八国联合大学。简称八国联大。 <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=891</link>
			<title><![CDATA[Hibernate学习笔记]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Tue,23 Sep 2008 15:41:03 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=891</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;前段时间,学习了一下Hibernate,在这里推荐一本很容易上手的书&lt;&lt;夏昕.深入浅出Hibernate&gt;&gt;,这本书虽然我只看了前两章,但至少,一开始,我是根据这两章的介绍开始入手的.<br/>一.学习之前的准备<br/>1.安装ant<br/>&nbsp;&nbsp;&nbsp;&nbsp;ant我老早前就装过了,好像也不难,网上资料也特别多.关键是最后环境变量的设置,设个ANT_HOME=ANT的安装目录,我的机器填的是&#34;d:\ant1.6.1&#34;,再把&#34;d:\ant1.6.1\bin&#34;加到path里.<br/>2.下载hibernate<br/>&nbsp;&nbsp;&nbsp;&nbsp;到官方网站去下载.<br/>3.下载Middlegen-Hibernate-r5<br/>&nbsp;&nbsp;&nbsp;&nbsp;也到官方网站上去下载<br/>4.下载hibernate-extensions<br/>&nbsp;&nbsp;&nbsp;&nbsp;个人感觉要不要这个无所谓,因为我在后来的使用过程中遇到了很多问题,发现Middlegen-Hibernate-r5也可以实现htm2<a href="http://www.yexu8.com" target="_blank">java</a>这个功能.<br/>5.建个简单的数据库及表<br/>二.开始使用Middlegen-Hibernate-r5<br/>1.配置数据库<br/>&nbsp;&nbsp;&nbsp;&nbsp;确定你用的是什么数据库,我用的mysql,所以首先要去更改数据库配置,在Middlegen-Hibernate-r5安装目录下,有config/database目录,里面放了许多类型数据库的xml文件,我找到mysql.xml,然后用记事本或者其他编辑器打开.有些值你可以不去理会,但以下四项必须要重新填:<br/>&nbsp;&nbsp;&nbsp;&nbsp;database.driver.file,这个是指向mysql驱动的地方,有两种方法修改.一个是不修改路径,只修改mysql驱动包的文件名,然后把驱动拷贝到Middlegen-Hibernate-r5/lib下面.还有就是直接修改路径和包名,用绝对路径也无所谓.我采用了第一种方法,最后这一行被我改成&lt;property name=&#34;database.driver.file&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value=&#34;${lib.dir}/mysql-connector-<a href="http://www.yexu8.com" target="_blank">java</a>-3.0.0-beta-bin.jar&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; database.url,这个是写明要连接的数据库.我填的是 &lt;property name=&#34;database.url&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value=&#34;jdbc:mysql://localhost/hibernate&#34;/&gt;hibernate是我建的数据库名.<br/>&nbsp;&nbsp;&nbsp;&nbsp; database.userid,database.password,这两项自然是写明登录数据库的用户名和密码了.<br/>2.修改build.xml文件<br/>指定数据库配置文件 <br/>&lt;!DOCTYPE project [<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!ENTITY database SYSTEM &#34;file:./config/database/mysql.xml&#34;&gt;<br/>]&gt;<br/><br/>原来是hsqldb.xml,因为我用的是mysql,而且上一步骤也介绍了如何修改xml文件,所以改成mysql.xml<br/><br/>修改Application Name <br/>&nbsp;&nbsp; &lt;property name=&#34;name&#34; value=&#34;HibernateSample&#34;/&gt;,原来是aireline,这个是Middlegen-Hibernate-r5默认的.<br/><br/>输出目录 <br/>&nbsp;&nbsp; &lt;property name=&#34;build.gen-src.dir&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value=&#34;${basedir}/temp&#34;/&gt;,在这里设置,最终生成的文件放在哪个目录里,我在Middlegen-Hibernate-r5下建了个temp,所以这样设置.<br/><br/>对应代码的Package Name <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;hibernate<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destination=&#34;${build.gen-src.dir}&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;package=&#34;org.redsaga.quickstart&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;genXDocletTags=&#34;true&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;genIntergratedCompositeKeys=&#34;false&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.yexu8.com" target="_blank">java</a>TypeMapper=&#34;middlegen.plugins.hibernate.HibernateJavaTypeMapper&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;这里设置Package Name的名字,因为我上一步中设置了输入文件的位置.像我这样设置后,生成的文件将会放在Middlegen-Hibernate-r5/temp/org/redsaga.quickstart,并且在之后操作中生成的xml及<a href="http://www.yexu8.com" target="_blank">java</a>文件的包名都会是这里设置的.<br/><br/>三.根据数据库表结构生成xml文件<br/><br/>1.运行Middlegen-Hibernate图形界面<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;前提是你必须已成功配置ant环境,进入Middlegen-Hibernate目录,按我的情况是进入DOS命令界面,<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cd d:\Middlegen-Hibernate<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ant (默认会运行build.xml),然后图形界面就出来了,重叠显示数据库内所有的表,如果有特别要求的,可以设置相关参数,我没管,就直接点击菜单&#34;Generator&#34;(好像只有这么一个菜单项,没怎么注意),然后就看到在Middlegen-Hibernate-r5/temp/org/redsaga.quickstart目录里放着生成的xml文件.<br/><br/>四.根据生成的xml文件生成<a href="http://www.yexu8.com" target="_blank">java</a>文件<br/><br/>进入DOS命令界面<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; cd d:\Middlegen-Hibernate<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; ant hbm2<a href="http://www.yexu8.com" target="_blank">java</a>,会将刚才生成的xml文件继续生成<a href="http://www.yexu8.com" target="_blank">java</a>文件.<br/><br/>三.遇到的问题及解决方法<br/>今天想用Hibernate,然后自动生成数据库的映射文件,结果碰到了好多问题.<br/>1.到了执行hbm2<a href="http://www.yexu8.com" target="_blank">java</a>命令,首先是报找不到类的错误,我看了一下build.xml里所指向的包路径,应该是好的啊,找了半天,才发现在D:\hibernate-extensions-2.1\tools\bin目录下有个setenv.bat是专门用来设置包路径的,并且在hbm2<a href="http://www.yexu8.com" target="_blank">java</a>执行之前会Call这个批处理文件,所以按照hibernate安装目录下的lib目录里的文件名的实际情况,修改这个setenv.bat文件.好,终于不报找不到类的错误.<br/>2.又报content is not allowed in prolog的错误,在google里面搜索,发现是因为用UltraEdit的原因.说是在用UltraEdit 编写hibernate的映射文件时，发现UltraEdit会自动向UTF8编码的文件的最开头，加入一个特殊字符。这在UltraEdit中是看不到的，在别的编辑器中可以看到。当使用dom4j解析文件时，出现content is not allowed in prolog错误。虽然有人说用dom4j版本1.6以上的版本就没问题,但我的dom4j确实是1.6版本以后,但依然出问题.有人说UltraEdit11.0以上版本可以另存为&#34;UTF8 - NO BOM&#34;,我就把我的UltraEdit升级到11.10a+,把所有XML文件(包括用Middlegen-Hibernate-r5生成的xml文件)都用UltraEdit另存为UTF8 - NO BOM格式的.好,这个问题解决了.<br/>3.不是说到这儿就顺利完成了,又报了个空指针的错误,这可让我愁坏,只好又在baidu里搜索,发现有个人也遇到这样的错误,说是在build.xml文件target里加个配置文件,重新建一下这个配置文件就好了,但是我这样做了还是不对,最后发现是自己没有把配置文件写对,真是好事多磨啊.现在把解决方法详细说明一下.在Middlegen-Hibernate-r5下的build.xml里修改关于hbm2<a href="http://www.yexu8.com" target="_blank">java</a>的target项,加个config项.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;hbm2<a href="http://www.yexu8.com" target="_blank">java</a> output=&#34;${build.gen-src.dir}&#34; classpathref=&#34;classpath.path&#34; config=&#34;config.xml&#34; &gt;,然后再Middlegen-Hibernate-r5目录下(也就是跟build.xml同目录)建个config.xml文件,文件内容如下:&lt;?xml version=&#34;1.0&#34;?&gt;<br/>&nbsp;&nbsp; &lt;codegen&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;generate renderer=&#34;net.sf.hibernate.tool.hbm2<a href="http://www.yexu8.com" target="_blank">java</a>.BasicRenderer&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name=&#34;generate-concrete-empty-classes&#34;&gt;false&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/generate&gt;<br/>&nbsp;&nbsp; &lt;/codegen&gt;<br/> <br/>最后,进入Dos命令行方式,进入Middlegen-Hibernate-r5目录,敲入ant hbm2<a href="http://www.yexu8.com" target="_blank">java</a>,终于执行通过,并且在指定目录下建了个<a href="http://www.yexu8.com" target="_blank">java</a>文件.<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=890</link>
			<title><![CDATA[第一次让middlegen-Hibernate运行的详细操作步骤]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Tue,23 Sep 2008 15:37:45 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=890</guid>
		<description><![CDATA[<div><strong>注：先在DOS</strong><strong>下切换到该目录，更简单的方式，就是在下面建立一个如名为&ldquo;RunCMD.bat</strong><strong>&rdquo;的批处理文件，直接点击就可以启动DOS</strong><strong>，并且目录为当前目录。</strong></div>
<div><strong>1</strong><strong>、</strong>ant用的是1.7，Hiddlegen的版本是Hiddlegen-Hibernate-r5(This is release 5 of Middlegen (2.1 beta) with Hibernate plugin (r5).)</div>
<div>下载地址分别是：<a href="http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip" target="_blank"><font color="#336699">http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip</font></a>、</div>
<div><a href="http://download.csdn.net/filedown/aHR0cDovL2RsMS5jc2RuLm5ldC9kb3duMy8yMDA3MDUwNS8wNTA5MzczODM5MC56aXA=!176162" target="_blank"><font color="#336699">http://download.csdn.net/filedown/aHR0cDovL2RsMS5jc2RuLm5ldC9kb3duMy8yMDA3MDUwNS8wNTA5MzczODM5MC56aXA=!176162</font></a></div>
<div><strong>2</strong><strong>、</strong>运行ant的时候提示需要C:\Program Files\Java\jre1.6.0_02\lib\tools.jar文件，我的JAVA安装路径为：</div>
<div>jre:C:\Program Files\Java\jre1.6.0_02</div>
<div>jdk:C:\Program Files\Java\jdk1.6.0_02</div>
<div>设置好了path,classpath及JAVA_HOME,现在的tools.jar在jdk里面，我已经在路径里面配置配置好了，但是运行ant的时候，总是提示要到上面提到的那个路径去寻找tools.jar，</div>
<div>最后拷贝过去，该问题解决，但不知为什么。<br />
注：这里要把对应的MYSQL驱动JAR放在Middlegen-Hibernate-r5的lib目录下，把名字复制一下，然后到Middlegen-Hibernate-r5/config/database/mysql.xml里面的<span lang="EN-US"><o:p></o:p></span><span lang="EN-US"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 414.75pt; height: 167.25pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;</span> database.driver.file属性改在如下：&nbsp;</div>
<div>
<div>&nbsp;</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/fenglibing/abfed3460598451c94c1b258098991a0.png" /></div>
</div>
<div><strong>3</strong><strong>、</strong>先到mysql数据库里面先创建数据库airline（这个是middlegen的自带实例，有创建表的SQL语句），以利用后面创建表。</div>
<div><strong>4</strong><strong>、</strong></div>
<div>1）、指定数据库</div>
<div>将build.xml中的关于指定数据库的由</div>
<div>&lt;!DOCTYPE project [</div>
<div><span>&nbsp;&nbsp;&nbsp; &lt;!ENTITY database SYSTEM &quot;file:./config/database/mysql.xml&quot;&gt;</span></div>
<div>]&gt;</div>
<div>改为：</div>
<div>&lt;!DOCTYPE project [</div>
<div><span>&nbsp;&nbsp;&nbsp; &lt;!ENTITY database SYSTEM &quot;./config/database/mysql.xml&quot;&gt;</span></div>
<div>]&gt;</div>
<div><strong>去掉&ldquo;file:</strong><strong>&rdquo;</strong>，并更改为对应的数据库，否则运行ant的时候出错，会提示该错误。</div>
<div>2）、更改生成的&ldquo;.hbm.xml&rdquo;配置文件的保存位置：</div>
<div>&nbsp;&nbsp;&nbsp; 打开build.xml，打到最后几行，如下图，将蓝色部份更更为你自己的部分，&nbsp;</div>
<div>
<div>&nbsp;</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/fenglibing/a9bb2c94105a40b4b44e1c4e228eaceb.png" /></div>
<div>&nbsp;其中的msg为我的命名，你可以更改自己的名称。</div>
</div>
<div><strong>5</strong><strong>、</strong>配置config\database\mysql.xml，配置其中的驱动文件&ldquo;database.driver.file&rdquo;、用户ID&ldquo;database.userid&rdquo;、用户密码&ldquo;database.password&rdquo;，保存关闭。</div>
<div>&nbsp;</div>
<div><strong>6</strong><strong>、</strong>运行ant create-tables.(create-tables定义于build.xml中)</div>
<div><strong>7</strong><strong>、</strong>运行ant.（不用带参，会自动寻找build.xml）</div>
<div><strong>8</strong><strong>、</strong>弹出Hiddlegen-Hibernate界面，</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/fenglibing/309f98679a1946a6a8471e3ba66ae9ed.png" /></div>
<div>可以在这里对表的关系、字段类型等进行更改。</div>
<div><strong>9</strong><strong>、</strong>点击左上角的generate按钮，此时可以在build\gen-src\airline\hibernate\下面看到刚刚生成好的*.hbm.xml配置文件。</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/fenglibing/c53ad8122b5e498398bcbdcf935f7ddd.png" /></div>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=888</link>
			<title><![CDATA[真理是不存在的 上帝是存在的]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[五味]]></category>
			<pubDate>Mon,22 Sep 2008 16:14:45 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=888</guid>
		<description><![CDATA[1&nbsp;&nbsp; 上帝等一切神灵都是自由的 他们能改变一切所谓的规律 所谓的逻辑前提<br/><br/>真理是不自由的 承认了A是正确的 那A永远都是正确的<br/><br/><br/>2 只有真理存在 理性推理才可能有意义 因为我们即使可能还没找到终极真理 但至少能保证我们现在所想所说的有被终极真理所推导出来的可能<br/><br/>因为我们相信 所有的真正的知识可以共存于一个相互推导的体系中<br/><br/><br/>3 所以 上帝与真理是相悖的<br/><br/><br/>4 如果我承认了上帝 我说&#34;真理是不存在的&#34; 我就否认了我的理性 <br/>如果只是停留在头脑中承认上帝 那我就是胡思乱想 <br/>如果我嘴巴上承认了上帝 那我就是在胡言乱语<br/><br/><br/>5 所以<br/><br/>请真理怀疑论者不要再出来丢人了<br/><br/>你们自己想想陶醉一下是可以的<br/> <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yexu8.com/article.asp?id=887</link>
			<title><![CDATA[关闭显示器的批处理代码]]></title>
			<author>blurxx@yahoo.cn(blurxx)</author>
			<category><![CDATA[电脑常识]]></category>
			<pubDate>Mon,22 Sep 2008 08:38:33 +0800</pubDate>
			<guid>http://www.yexu8.com/default.asp?id=887</guid>
		<description><![CDATA[PowerCfg 命令<br/><br/>这个命令行工具允许管理员控制系统上的电源设置。<br/><br/>开始是 看了 verybat.cn 的文章，但是用了 <br/>PowerCfg /change 家用/办公桌 /monitor-timeout-ac 1<br/><br/>没起作用<br/><br/>应该 将具有指定名称的电源方案设为使用中。<br/><br/>PowerCfg /l&nbsp;&nbsp;注：列出现有电源方案的名称。<br/><br/>PowerCfg /s 家用/办公桌 注：将 家用/办公桌&nbsp;&nbsp;电源方案设为使用中<br/><br/>PowerCfg /CHANGE 家用/办公桌&nbsp;&nbsp;/monitor-timeout-dc 1 改变 家用/办公桌 电源方案的 执行时间 <br/><br/> ok&nbsp;&nbsp;不要动 鼠标、键盘 一分钟 后 显示器 自动断电&nbsp;&nbsp;<br/>]]></description>
		</item>
		
</channel>
</rss>
