﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-天行健</title><link>http://www.blogjava.net/bnlovebn/</link><description>《周易》曰：&lt;br&gt;
天行健，君子以自强不息(乾卦)&lt;br&gt;
地势坤，君子以厚德载物(坤卦)
</description><language>zh-cn</language><lastBuildDate>Thu, 08 Jan 2009 08:51:10 GMT</lastBuildDate><pubDate>Thu, 08 Jan 2009 08:51:10 GMT</pubDate><ttl>60</ttl><item><title>JavaScript写的日期时间控件，很好用，Cosplay了</title><link>http://www.blogjava.net/bnlovebn/archive/2008/12/21/247574.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Sat, 20 Dec 2008 18:56:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/12/21/247574.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/247574.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/12/21/247574.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/247574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/247574.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.0&nbsp;Transitional//EN"&gt;&lt;html&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/bnlovebn/archive/2008/12/21/247574.html'>阅读全文</a><img src ="http://www.blogjava.net/bnlovebn/aggbug/247574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-12-21 02:56 <a href="http://www.blogjava.net/bnlovebn/archive/2008/12/21/247574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实时获得服务器上时间</title><link>http://www.blogjava.net/bnlovebn/archive/2008/09/26/231224.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Fri, 26 Sep 2008 00:42:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/09/26/231224.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/231224.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/09/26/231224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/231224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/231224.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_56_386_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_386_Open_Text.style.display='none'; Codehighlighter1_56_386_Closed_Image.style.display='inline'; Codehighlighter1_56_386_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_56_386_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_56_386_Closed_Text.style.display='none'; Codehighlighter1_56_386_Open_Image.style.display='inline'; Codehighlighter1_56_386_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="spnTime"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">language</span><span style="color: #0000ff">="javascript"</span><span style="color: #0000ff">&gt;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_56_386_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_56_386_Open_Text"><span style="background-color: #f5f5f5; color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #0000ff">var</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;http&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">new</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;XMLHttpRequest;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />http.open(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">HEAD</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">,&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">.</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">,&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">false</span><span style="background-color: #f5f5f5; color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />http.send(</span><span style="background-color: #f5f5f5; color: #0000ff">null</span><span style="background-color: #f5f5f5; color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #0000ff">var</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;curDate&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">new</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;Date;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #0000ff">var</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;offsetTime&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;curDate&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">-</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;Date.parse(http.getResponseHeader(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">Date</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />setInterval(</span><span style="background-color: #f5f5f5; color: #0000ff">function</span><span style="background-color: #f5f5f5; color: #000000">()<br />
<img id="Codehighlighter1_254_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_377_Open_Text.style.display='none'; Codehighlighter1_254_377_Closed_Image.style.display='inline'; Codehighlighter1_254_377_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_254_377_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_254_377_Closed_Text.style.display='none'; Codehighlighter1_254_377_Open_Image.style.display='inline'; Codehighlighter1_254_377_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_254_377_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_254_377_Open_Text"><span style="background-color: #f5f5f5; color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;curDate.setTime(</span><span style="background-color: #f5f5f5; color: #0000ff">new</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;Date&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">-</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;offsetTime);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">spnTime</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">).innerHTML&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;curDate.toLocaleString();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="background-color: #f5f5f5; color: #000000">,&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">1000</span><span style="background-color: #f5f5f5; color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span></div>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/231224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-09-26 08:42 <a href="http://www.blogjava.net/bnlovebn/archive/2008/09/26/231224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分色菜单CSS使用</title><link>http://www.blogjava.net/bnlovebn/archive/2008/09/23/230616.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Tue, 23 Sep 2008 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/09/23/230616.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/230616.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/09/23/230616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/230616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/230616.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;把下列代码加入到head区内&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_31_320_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_320_Open_Text.style.display='none'; Codehighlighter1_31_320_Closed_Image.style.display='inline'; Codehighlighter1_31_320_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_31_320_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_31_320_Closed_Text.style.display='none'; Codehighlighter1_31_320_Open_Image.style.display='inline'; Codehighlighter1_31_320_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">style</span><span style="color: #0000ff">&gt;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_31_320_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_31_320_Open_Text"><span style="background-color: #f5f5f5; color: #800000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_46_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_134_Open_Text.style.display='none'; Codehighlighter1_46_134_Closed_Image.style.display='inline'; Codehighlighter1_46_134_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_46_134_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_46_134_Closed_Text.style.display='none'; Codehighlighter1_46_134_Open_Image.style.display='inline'; Codehighlighter1_46_134_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />#tablist&nbsp;a</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_46_134_Closed_Text">{<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />}</span><span id="Codehighlighter1_46_134_Open_Text"><span style="background-color: #f5f5f5; color: #000000">{</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />text-decoration</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;none</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />padding</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;2px&nbsp;0.2em</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />border</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;1px&nbsp;solid&nbsp;#778</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />background</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;white</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #000000">}</span></span><span style="background-color: #f5f5f5; color: #800000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_174_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_174_189_Open_Text.style.display='none'; Codehighlighter1_174_189_Closed_Image.style.display='inline'; Codehighlighter1_174_189_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_174_189_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_174_189_Closed_Text.style.display='none'; Codehighlighter1_174_189_Open_Image.style.display='inline'; Codehighlighter1_174_189_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />#tablist&nbsp;&nbsp;a:link,&nbsp;#tablist&nbsp;&nbsp;a:visited</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_174_189_Closed_Text">{<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />}</span><span id="Codehighlighter1_174_189_Open_Text"><span style="background-color: #f5f5f5; color: #000000">{</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />color</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;navy</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #000000">}</span></span><span style="background-color: #f5f5f5; color: #800000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_209_270_Open_Image" onclick="this.style.display='none'; Codehighlighter1_209_270_Open_Text.style.display='none'; Codehighlighter1_209_270_Closed_Image.style.display='inline'; Codehighlighter1_209_270_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_209_270_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_209_270_Closed_Text.style.display='none'; Codehighlighter1_209_270_Open_Image.style.display='inline'; Codehighlighter1_209_270_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />#tablist&nbsp;&nbsp;a:hover</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_209_270_Closed_Text">{<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />}</span><span id="Codehighlighter1_209_270_Open_Text"><span style="background-color: #f5f5f5; color: #000000">{</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />color</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;black</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />background</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;lightyellow</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />border-color</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;navy</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #000000">}</span></span><span style="background-color: #f5f5f5; color: #800000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_292_319_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_319_Open_Text.style.display='none'; Codehighlighter1_292_319_Closed_Image.style.display='inline'; Codehighlighter1_292_319_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_292_319_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_292_319_Closed_Text.style.display='none'; Codehighlighter1_292_319_Open_Image.style.display='inline'; Codehighlighter1_292_319_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />#tablist&nbsp;&nbsp;a.current</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_292_319_Closed_Text">{<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />}</span><span id="Codehighlighter1_292_319_Open_Text"><span style="background-color: #f5f5f5; color: #000000">{</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />background</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #0000ff">&nbsp;lightyellow</span><span style="background-color: #f5f5f5; color: #000000">;</span><span style="background-color: #f5f5f5; color: #ff0000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="background-color: #f5f5f5; color: #000000">}</span></span><span style="background-color: #f5f5f5; color: #800000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">style</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;把下列代码加入到body区内&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">label&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="tablist"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="http://www.yahoo.com"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Yahoo</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="http://www.google.com"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Google</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="http://www.sina.com"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">退出</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">label</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/230616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-09-23 11:53 <a href="http://www.blogjava.net/bnlovebn/archive/2008/09/23/230616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下安装卸载软件</title><link>http://www.blogjava.net/bnlovebn/archive/2008/06/13/207727.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Fri, 13 Jun 2008 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/06/13/207727.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/207727.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/06/13/207727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/207727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/207727.html</trackback:ping><description><![CDATA[1、源代码包的安装 &nbsp; &nbsp; <br />
&nbsp; gzip &nbsp; -d &nbsp; apache_1.3.20.tar.gz &nbsp; （解压） &nbsp; &nbsp; <br />
&nbsp; tar &nbsp; xvf &nbsp; apache_1.3.20.tar &nbsp; （解包） &nbsp; &nbsp; <br />
&nbsp; cd &nbsp; apache_1.3.20 &nbsp; &nbsp; <br />
&nbsp; ./configure &nbsp; （配置） &nbsp; ----./configure &nbsp; --help（查看configure选项） &nbsp; &nbsp; <br />
&nbsp; make &nbsp; （编译） &nbsp; &nbsp; <br />
&nbsp; make &nbsp; install &nbsp; （安装） &nbsp; &nbsp; <br />
&nbsp; make &nbsp; clean &nbsp; （卸载） &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 注：典型的源代码包可以这样安装，但不都是这样，如webmin &nbsp; &nbsp; <br />
&nbsp; 要执行其目录下./setup.sh进入交互式配置安装 &nbsp; &nbsp; <br />
&nbsp; 卸载用uninstall程序 &nbsp; &nbsp; <br />
&nbsp; 具体如果不清楚看要安装的包下的README文件 &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 2、RPM包的安装 &nbsp; &nbsp; <br />
&nbsp; RPM软件包的一个例子： &nbsp; &nbsp; <br />
&nbsp; foo-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; 其中包括软件包的名称(foo)，版本号(1.0)，发行号(1)，和硬件平台(i386)。 &nbsp; &nbsp; <br />
&nbsp; （1）安装 &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -ivh &nbsp; foo-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; &nbsp; <br />
&nbsp; ####################### &nbsp; &nbsp; <br />
&nbsp; A. &nbsp; 软件包已被安装 &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -ivh &nbsp; foo-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; package &nbsp; foo-1.0-1 &nbsp; is &nbsp; already &nbsp; installed &nbsp; &nbsp; <br />
&nbsp; error: &nbsp; foo-1.0-1.i386.rpm &nbsp; cannot &nbsp; be &nbsp; installed &nbsp; &nbsp; <br />
&nbsp; 如果你仍旧要安装该软件包，你可以在命令行上使用--replacepkgs &nbsp; 选项，这将忽略该错误信息。 &nbsp; &nbsp; <br />
&nbsp; B. &nbsp; 文件冲突 &nbsp; &nbsp; <br />
&nbsp; 如果要安装的软件包中有一个文件已在安装其它软件包时安装，会出现以下错误信息： &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -ivh &nbsp; foo-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; /usr/bin/foo &nbsp; conflicts &nbsp; with &nbsp; file &nbsp; from &nbsp; bar-1.0-1 &nbsp; &nbsp; <br />
&nbsp; error: &nbsp; foo-1.0-1.i386.rpm &nbsp; cannot &nbsp; be &nbsp; installed &nbsp; &nbsp; <br />
&nbsp; 要想让RPM &nbsp; 忽略该错误信息, &nbsp; 请使用--replacefiles &nbsp; 命令行选项 &nbsp; &nbsp; <br />
&nbsp; C.未解决依赖关系 &nbsp; &nbsp; <br />
&nbsp; RPM软件包可能依赖于其它软件包, &nbsp; 在安装了特定的软件包之后才能安装该软件包。 &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -ivh &nbsp; bar-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; failed &nbsp; dependencies: &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; is &nbsp; needed &nbsp; by &nbsp; bar-1.0-1 &nbsp; &nbsp; <br />
&nbsp; 你必须安装完所依赖的软件包，才能解决这个问题。如果想强制安装 &nbsp; (但是，这样安装后的软件包未必能正常运行)，请使用-nodeps &nbsp; 命令行选项。 &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; （2） &nbsp; 卸载 &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -e &nbsp; foo &nbsp; &nbsp; <br />
&nbsp; 注意：这里使用软件包的名字foo，而不是软件包文件的名字&#8220;foo-1.0-1.i386.rpm&#8221;. &nbsp; &nbsp; <br />
&nbsp; 如果其它软件包依赖于你要卸载的软件包，卸载时则会产生错误信息。如： &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -e &nbsp; foo &nbsp; &nbsp; <br />
&nbsp; removing &nbsp; these &nbsp; packages &nbsp; would &nbsp; break &nbsp; dependencies: &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; is &nbsp; needed &nbsp; by &nbsp; bar-1.0-1 &nbsp; &nbsp; <br />
&nbsp; 要想RPM忽略该错误信息继续卸载的话 &nbsp; (但是，依赖于该软件包的程序可能无法运行), &nbsp; 请使用-nodeps &nbsp; 命令行选项。 &nbsp; &nbsp; <br />
&nbsp; （3）升级 &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -Uvh &nbsp; foo-2.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; &nbsp; <br />
&nbsp; ############################### &nbsp; &nbsp; <br />
&nbsp; 当使用旧版本的软件包来升级新版本的软件时，会产生以下错误信息： &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -Uvh &nbsp; foo-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; foo &nbsp; package &nbsp; foo-2.0-1 &nbsp; (which &nbsp; is &nbsp; newer) &nbsp; is &nbsp; already &nbsp; installed &nbsp; &nbsp; <br />
&nbsp; error: &nbsp; foo-1.0-1.i386.rpm &nbsp; cannot &nbsp; be &nbsp; installed &nbsp; &nbsp; <br />
&nbsp; 要使RPM &nbsp; 坚持这样&#8220;升级&#8221;，可使用--oldpackage &nbsp; 命令行参数。 &nbsp; &nbsp; <br />
&nbsp; （4）查询 &nbsp; &nbsp; <br />
&nbsp; # &nbsp; rpm &nbsp; -q &nbsp; foo &nbsp; &nbsp; <br />
&nbsp; foo-2.0-1 &nbsp; &nbsp; <br />
&nbsp; 软件包指定选项： &nbsp; &nbsp; <br />
&nbsp; -a &nbsp; 查询所有已安装的软件包. &nbsp; &nbsp; <br />
&nbsp; -f &nbsp; &lt;file&gt; &nbsp; 将查询包含有文件&lt;file&gt;的软件包 &nbsp; &nbsp; <br />
&nbsp; -p &nbsp; &lt;packagefile&gt; &nbsp; &nbsp; <br />
&nbsp; 查询软件包文件名为&lt;packagefile&gt;的软件包 &nbsp; &nbsp; <br />
&nbsp; 信息选择选项： &nbsp; &nbsp; <br />
&nbsp; -i &nbsp; 显示软件包信息，如描述, &nbsp; 发行号, &nbsp; 尺寸, &nbsp; 构建日期, &nbsp; 安装日期, &nbsp; 平台, &nbsp; 以及其它各类信息。 &nbsp; &nbsp; <br />
&nbsp; -l &nbsp; 显示软件包中的文件列表。 &nbsp; &nbsp; <br />
&nbsp; -s &nbsp; 显示软件包中所有文件的状态。 &nbsp; &nbsp; <br />
&nbsp; -d &nbsp; 显示被标注为文档的文件列表(man &nbsp; 手册, &nbsp; info &nbsp; 手册, &nbsp; README's, &nbsp; etc). &nbsp; &nbsp; <br />
&nbsp; -c &nbsp; 显示被标注为配置文件的文件列表。这些是要在安装完毕以后加以定制的文件(sendmail.cf, &nbsp; passwd, &nbsp; inittab, &nbsp; etc)。 &nbsp; &nbsp; <br />
&nbsp; 对于那些要显示文件列表的文件,可以增加-v &nbsp; 命令行选项以获得如同 &nbsp; ls &nbsp; -l &nbsp; 格式的输出。 &nbsp; &nbsp; <br />
&nbsp; （5）验证 &nbsp; &nbsp; <br />
&nbsp; 验证软件包是通过比较软件包中安装的文件和软件包中的原始文件信息来进行的。除了其它一些东西，验证主要是比较文件的尺寸, &nbsp; MD5 &nbsp; 校验码, &nbsp; 文件权限, &nbsp; 类型, &nbsp; 属主和用户组等。 &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -V命令用来验证一个软件包，如 &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -V &nbsp; foo &nbsp; &nbsp; <br />
&nbsp; 验证包含特定文件的软件包: &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -Vf &nbsp; /bin/vi &nbsp; &nbsp; <br />
&nbsp; 验证所有已安装的软件包: &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -Va &nbsp; &nbsp; <br />
&nbsp; 根据一个RPM来验证某个软件包: &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -Vp &nbsp; foo-1.0-1.i386.rpm &nbsp; &nbsp; <br />
&nbsp; 如果你担心RPM数据库已被破坏，就可以使用这种方式。如果一切校验均正常将不会产生任何输出。如果有不一致的地方，就会显示出来。 &nbsp; &nbsp; <br />
&nbsp; 输出格式是8位长字符串，c &nbsp; 用以指配置文件，接着是文件名. &nbsp; 8位字符的每一个用以表示文件与RPM数据库中一种属性的比较结果。&#8220;.&#8221; &nbsp; (点)表示测试通过。 &nbsp; &nbsp; <br />
&nbsp; 以下字符表示某种测试的失败： &nbsp; &nbsp; <br />
&nbsp; 5 &nbsp; MD5 &nbsp; 校验码 &nbsp; &nbsp; <br />
&nbsp; S &nbsp; 文件尺寸 &nbsp; &nbsp; <br />
&nbsp; L &nbsp; 符号连接 &nbsp; &nbsp; <br />
&nbsp; T &nbsp; 文件修改日期 &nbsp; &nbsp; <br />
&nbsp; D &nbsp; 设备 &nbsp; &nbsp; <br />
&nbsp; U &nbsp; 用户 &nbsp; &nbsp; <br />
&nbsp; G &nbsp; 用户组 &nbsp; &nbsp; <br />
&nbsp; M &nbsp; 模式e &nbsp; (包括权限和文件类型) &nbsp; &nbsp; <br />
&nbsp; 如果有信息输出，应当认真加以考虑，是删除，重新安装，还是修正出现的问题。 &nbsp; &nbsp; <br />
&nbsp; （6）RPM应用的几个例子 &nbsp; &nbsp; <br />
&nbsp; A. &nbsp; 如你误删了一些文件, &nbsp; 但是不能肯定到底删除了哪些文件。如果你想验证一下整个系统看看都丢失了哪些文件的话，可以键入： &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; &#8211;Va &nbsp; &nbsp; <br />
&nbsp; B.若是一些文件丢失了或已被损坏, &nbsp; 就可以重新安装或先卸载再安装该软件包。如果碰到了一个自己不认识的文件，要想查处它属于哪个软件包，可以输入以下命令： &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -qf &nbsp; /usr/X11R6/bin/xjewel &nbsp; &nbsp; <br />
&nbsp; 而输出的结果会是： &nbsp; &nbsp; <br />
&nbsp; xjewel-1.6-1 &nbsp; &nbsp; <br />
&nbsp; C. &nbsp; 如果发生综合以上两个例子的情况，如文/usr/bin/paste出了问题。你想验证一下拥有该文件的软件包，可又不知道软件包的名字，这时可以简单的键入： &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -Vf &nbsp; /usr/bin/paste &nbsp; &nbsp; <br />
&nbsp; 这样相应的软件包就会被验证。 &nbsp; &nbsp; <br />
&nbsp; D. &nbsp; 如果你想了解一个正在使用的程序的详细信息，可以键入如下命令来获得拥有该程序的软件包中的文档信息： &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -qdf &nbsp; /usr/bin/ispell &nbsp; &nbsp; <br />
&nbsp; 输出结果为： &nbsp; &nbsp; <br />
&nbsp; /usr/man/man4/ispell.4 &nbsp; &nbsp; <br />
&nbsp; /usr/man/man4/english.4 &nbsp; &nbsp; <br />
&nbsp; &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; E. &nbsp; 如果你发现了一个新的koules &nbsp; RPM，但是不知道它是什么东西，可以键入如下命令： &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -qip &nbsp; koules-1.2-2.i386.rpm &nbsp; &nbsp; <br />
&nbsp; F. &nbsp; 现在你想了解koules &nbsp; RPM &nbsp; 所安装的文件。可以键入： &nbsp; &nbsp; <br />
&nbsp; rpm &nbsp; -qlp &nbsp; koules-1.2-2.i386.rpm &nbsp; &nbsp; <br />
&nbsp; 图形管理工具：kpackage &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 3、shell或java脚本安装 &nbsp; &nbsp; <br />
&nbsp; 基于图形界面的安装，一般基于SHELL或Java语言编写，主要应用于一些办公软件和制图软件及安装程序，如staroffice、oracle的安装，很容易，和windows一样&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; <br />
<img src ="http://www.blogjava.net/bnlovebn/aggbug/207727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-06-13 17:47 <a href="http://www.blogjava.net/bnlovebn/archive/2008/06/13/207727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2+spring2时应注意action的单实例问题</title><link>http://www.blogjava.net/bnlovebn/archive/2008/06/04/205829.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Wed, 04 Jun 2008 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/06/04/205829.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/205829.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/06/04/205829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/205829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/205829.html</trackback:ping><description><![CDATA[Struts2+spring2时应注意action的单实例问题<br />
注意要设置，action bean 的 scope 的值。因为spring的bean默认为单实例，故一定要设scope的值但不能为singleton。
<img src ="http://www.blogjava.net/bnlovebn/aggbug/205829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-06-04 15:25 <a href="http://www.blogjava.net/bnlovebn/archive/2008/06/04/205829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring2.0的scope</title><link>http://www.blogjava.net/bnlovebn/archive/2008/06/04/205825.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Wed, 04 Jun 2008 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/06/04/205825.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/205825.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/06/04/205825.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/205825.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/205825.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">如何使用spring的作用域：</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/&gt;</p>
<p style="text-indent: 2em">这里的scope就是用来配置spring bean的作用域，它标识bean的作用域。</p>
<p style="text-indent: 2em">在spring2.0之前bean只有2种作用域即：singleton(单例)、non-singleton（也称prototype）, Spring2.0以后，增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此，默认情况下Spring2.0现在有五种类型的Bean。当然，Spring2.0对Bean的类型的设计进行了重构，并设计出灵活的Bean类型支持，理论上可以有无数多种类型的Bean，用户可以根据自己的需要，增加新的Bean类型，满足实际应用需求。</p>
<p style="text-indent: 2em">1、singleton作用域</p>
<p style="text-indent: 2em">当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例，并且所有对bean的请求，只要id与该bean定义相匹配，则只会返回bean的同一实例。换言之，当把一个bean定义设置为singleton作用域时，Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存（singleton cache）中，并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例，这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的，单例设计模式表示一个ClassLoader中只有一个class存在，而这里的singleton则表示一个容器对应一个bean，也就是说当一个bean被标识为singleton时候，spring的IOC容器中只会存在一个该bean。</p>
<p style="text-indent: 2em">配置实例：</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/&gt; </p>
<p style="text-indent: 2em">或者</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/&gt;</p>
<p style="text-indent: 2em">2、prototype</p>
<p style="text-indent: 2em">prototype作用域部署的bean，每一次请求（将其注入到另一个bean中，或者以程序的方式调用容器的</p>
<p style="text-indent: 2em">getBean()</p>
<p style="text-indent: 2em">方法）都会产生一个新的bean实例，相当与一个new的操作，对于prototype作用域的bean，有一点非常重要，那就是Spring不能对一个prototype bean的整个生命周期负责，容器在初始化、配置、装饰或者是装配完一个prototype实例后，将它交给客户端，随后就对该prototype实例不闻不问了。不管何种作用域，容器都会调用所有对象的初始化生命周期回调方法，而对prototype而言，任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源，都是客户端代码的职责。（让Spring容器释放被singleton作用域bean占用资源的一种可行方式是，通过使用bean的后置处理器，该处理器持有要被清除的bean的引用。）</p>
<p style="text-indent: 2em">配置实例：</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/&gt;</p>
<p style="text-indent: 2em">或者</p>
<p style="text-indent: 2em">&lt;beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/&gt;</p>
<p style="text-indent: 2em">3、request </p>
<p style="text-indent: 2em">request表示该针对每一次HTTP请求都会产生一个新的bean，同时该bean仅在当前HTTP request内有效，配置实例：</p>
<p style="text-indent: 2em">request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置：</p>
<p style="text-indent: 2em">如果你使用的是Servlet 2.4及以上的web容器，那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可：</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.springframework.web.context.request.RequestContextListener</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />，如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />..<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">requestContextFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.springframework.web.filter.RequestContextFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">requestContextFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">接着既可以配置bean的作用域了：</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/&gt;</p>
<p style="text-indent: 2em">4、session</p>
<p style="text-indent: 2em">session作用域表示该针对每一次HTTP请求都会产生一个新的bean，同时该bean仅在当前HTTP session内有效，配置实例：</p>
<p style="text-indent: 2em">配置实例：</p>
<p style="text-indent: 2em">和request配置实例的前提一样，配置好web启动文件就可以如下配置：</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/&gt;</p>
<p style="text-indent: 2em">5、global session</p>
<p style="text-indent: 2em">global session作用域类似于标准的HTTP Session作用域，不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念，它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean，那么web会自动当成session类型来使用。</p>
<p style="text-indent: 2em">配置实例：</p>
<p style="text-indent: 2em">和request配置实例的前提一样，配置好web启动文件就可以如下配置：</p>
<p style="text-indent: 2em">&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/&gt;</p>
<p style="text-indent: 2em">6、自定义bean装配作用域</p>
<p style="text-indent: 2em">在spring2.0中作用域是可以任意扩展的，你可以自定义作用域，甚至你也可以重新定义已有的作用域（但是你不能覆盖singleton和prototype），spring的作用域由接口org.springframework.beans.factory.config.Scope来定义，自定义自己的作用域只要实现该接口即可，下面给个实例：</p>
<p style="text-indent: 2em">我们建立一个线程的scope，该scope在表示一个线程中有效，代码如下：</p>
<p style="text-indent: 2em">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_37_865_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_865_Open_Text.style.display='none'; Codehighlighter1_37_865_Closed_Image.style.display='inline'; Codehighlighter1_37_865_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_37_865_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_37_865_Closed_Text.style.display='none'; Codehighlighter1_37_865_Open_Image.style.display='inline'; Codehighlighter1_37_865_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">publicclass&nbsp;MyScope&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Scope&nbsp;</span><span id="Codehighlighter1_37_865_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_37_865_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_102_203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_203_Open_Text.style.display='none'; Codehighlighter1_102_203_Closed_Image.style.display='inline'; Codehighlighter1_102_203_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_102_203_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_102_203_Closed_Text.style.display='none'; Codehighlighter1_102_203_Open_Image.style.display='inline'; Codehighlighter1_102_203_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;privatefinal&nbsp;ThreadLocal&nbsp;threadScope&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadLocal()&nbsp;</span><span id="Codehighlighter1_102_203_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_102_203_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_147_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_147_195_Open_Text.style.display='none'; Codehighlighter1_147_195_Closed_Image.style.display='inline'; Codehighlighter1_147_195_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_147_195_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_147_195_Closed_Text.style.display='none'; Codehighlighter1_147_195_Open_Image.style.display='inline'; Codehighlighter1_147_195_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Object&nbsp;initialValue()&nbsp;</span><span id="Codehighlighter1_147_195_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_147_195_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnnew&nbsp;HashMap();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_272_521_Open_Image" onclick="this.style.display='none'; Codehighlighter1_272_521_Open_Text.style.display='none'; Codehighlighter1_272_521_Closed_Image.style.display='inline'; Codehighlighter1_272_521_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_272_521_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_272_521_Closed_Text.style.display='none'; Codehighlighter1_272_521_Open_Image.style.display='inline'; Codehighlighter1_272_521_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;get(String&nbsp;name,&nbsp;ObjectFactory&nbsp;objectFactory)&nbsp;</span><span id="Codehighlighter1_272_521_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_272_521_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;scope&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Map)&nbsp;threadScope.get();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;object&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;scope.get(name);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_391_488_Open_Image" onclick="this.style.display='none'; Codehighlighter1_391_488_Open_Text.style.display='none'; Codehighlighter1_391_488_Closed_Image.style.display='inline'; Codehighlighter1_391_488_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_391_488_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_391_488_Closed_Text.style.display='none'; Codehighlighter1_391_488_Open_Image.style.display='inline'; Codehighlighter1_391_488_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(object</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_391_488_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_391_488_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;objectFactory.getObject();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.put(name,&nbsp;object);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;object;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_563_655_Open_Image" onclick="this.style.display='none'; Codehighlighter1_563_655_Open_Text.style.display='none'; Codehighlighter1_563_655_Closed_Image.style.display='inline'; Codehighlighter1_563_655_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_563_655_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_563_655_Closed_Text.style.display='none'; Codehighlighter1_563_655_Open_Image.style.display='inline'; Codehighlighter1_563_655_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;remove(String&nbsp;name)&nbsp;</span><span id="Codehighlighter1_563_655_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_563_655_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;scope&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Map)&nbsp;threadScope.get();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;scope.remove(name);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_733_741_Open_Image" onclick="this.style.display='none'; Codehighlighter1_733_741_Open_Text.style.display='none'; Codehighlighter1_733_741_Closed_Image.style.display='inline'; Codehighlighter1_733_741_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_733_741_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_733_741_Closed_Text.style.display='none'; Codehighlighter1_733_741_Open_Image.style.display='inline'; Codehighlighter1_733_741_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;registerDestructionCallback(String&nbsp;name,&nbsp;Runnable&nbsp;callback)&nbsp;</span><span id="Codehighlighter1_733_741_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_733_741_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_782_852_Open_Image" onclick="this.style.display='none'; Codehighlighter1_782_852_Open_Text.style.display='none'; Codehighlighter1_782_852_Closed_Image.style.display='inline'; Codehighlighter1_782_852_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_782_852_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_782_852_Closed_Text.style.display='none'; Codehighlighter1_782_852_Open_Image.style.display='inline'; Codehighlighter1_782_852_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getConversationId()&nbsp;</span><span id="Codehighlighter1_782_852_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_782_852_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnnull;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/205825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-06-04 15:21 <a href="http://www.blogjava.net/bnlovebn/archive/2008/06/04/205825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.hibernate.exception.JDBCConnectionException: could not execute query</title><link>http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Tue, 03 Jun 2008 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/205470.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/205470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/205470.html</trackback:ping><description><![CDATA[<p>最近的一个项目在<span class="hilite9">Hibernate</span>使用C3P0的连接池，数据库为Mysql。开发测试没有问题，在运行中每个一段长的空闲时间就出现异常:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">org.hibernate.exception.JDBCConnectionException:&nbsp;could&nbsp;not&nbsp;execute&nbsp;query&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />at&nbsp;org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:</span><span style="color: #000000">74</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />at&nbsp;org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:</span><span style="color: #000000">43</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Caused&nbsp;by:&nbsp;com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:&nbsp;No&nbsp;operations&nbsp;allowed&nbsp;after&nbsp;connection&nbsp;closed.Connection&nbsp;was&nbsp;implicitly&nbsp;closed&nbsp;due&nbsp;to&nbsp;underlying&nbsp;exception</span><span style="color: #000000">/</span><span style="color: #000000">error:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;BEGIN&nbsp;NESTED&nbsp;EXCEPTION&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />com.mysql.jdbc.CommunicationsException&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />MESSAGE:&nbsp;Communications&nbsp;link&nbsp;failure&nbsp;due&nbsp;to&nbsp;underlying&nbsp;exception:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;BEGIN&nbsp;NESTED&nbsp;EXCEPTION&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.net.SocketException&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />MESSAGE:&nbsp;Broken&nbsp;pipe&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />STACKTRACE:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.net.SocketException:&nbsp;Broken&nbsp;pipe&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />at&nbsp;java.net.SocketOutputStream.socketWrite0(Native&nbsp;Method)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;END&nbsp;NESTED&nbsp;EXCEPTION&nbsp;</span><span style="color: #000000">**</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
<p>查看了Mysql的文档，以及Connector/J的文档以及在线说明发现，出现这种异常的原因是：</p>
<p>Mysql服务器默认的&#8220;wait_timeout&#8221;是8小时，也就是说一个connection空闲超过8个小时，Mysql将自动断开该connection。这就是问题的所在，在C3P0 pools中的connections如果空闲超过8小时，Mysql将其断开，而C3P0并不知道该connection已经失效，如果这时有Client请求connection，C3P0将该失效的Connection提供给Client，将会造成上面的异常。</p>
<p>解决的方法有3种：</p>
<ol>
    <li>增加wait_timeout的时间。
    <li>减少Connection pools中connection的lifetime。
    <li>测试Connection pools中connection的有效性。 </li>
</ol>
<p>当然最好的办法是同时综合使用上述3种方法，下面就DBCP和C3P0分别做一说明，假设wait_timeout为默认的8小时</p>
<p>DBCP增加以下配置信息:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;'SELECT&nbsp;1'&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">validationQuery&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">SELECT&nbsp;1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;'true'&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testWhileIdle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">some&nbsp;positive&nbsp;integer&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">timeBetweenEvictionRunsMillis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3600000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;something&nbsp;smaller&nbsp;than&nbsp;'wait_timeout'&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">minEvictableIdleTimeMillis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">18000000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;you&nbsp;don't&nbsp;mind&nbsp;a&nbsp;hit&nbsp;for&nbsp;every&nbsp;getConnection(),&nbsp;set&nbsp;to&nbsp;"true"&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testOnBorrow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
C3P0增加以下配置信息:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">获取connnection时测试是否有效&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testConnectionOnCheckin&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">自动测试的table名称</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />automaticTestTable</span><span style="color: #000000">=</span><span style="color: #000000">C3P0TestTable<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;something&nbsp;much&nbsp;less&nbsp;than&nbsp;wait_timeout,&nbsp;prevents&nbsp;connections&nbsp;from&nbsp;going&nbsp;stale&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">idleConnectionTestPeriod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">18000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;to&nbsp;something&nbsp;slightly&nbsp;less&nbsp;than&nbsp;wait_timeout,&nbsp;preventing&nbsp;'stale'&nbsp;connections&nbsp;from&nbsp;being&nbsp;handed&nbsp;out&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">maxIdleTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">25000</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;you&nbsp;can&nbsp;take&nbsp;the&nbsp;performance&nbsp;'hit',&nbsp;set&nbsp;to&nbsp;"true"&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">testConnectionOnCheckout&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
更多的配置信息大家可以查看C3P0文档，Connector/J文档，以及DBCP的文档。
<img src ="http://www.blogjava.net/bnlovebn/aggbug/205470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-06-03 08:55 <a href="http://www.blogjava.net/bnlovebn/archive/2008/06/03/205470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中如何使用count(*)取得表中记录总数</title><link>http://www.blogjava.net/bnlovebn/archive/2008/05/29/203841.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Thu, 29 May 2008 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/05/29/203841.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/203841.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/05/29/203841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/203841.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/203841.html</trackback:ping><description><![CDATA[<div>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getCount(String&nbsp;emailGroupId,&nbsp;String&nbsp;emailBatchId)<br />
<img id="Codehighlighter1_100_893_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_893_Open_Text.style.display='none'; Codehighlighter1_100_893_Closed_Image.style.display='inline'; Codehighlighter1_100_893_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_100_893_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_100_893_Closed_Text.style.display='none'; Codehighlighter1_100_893_Open_Image.style.display='inline'; Codehighlighter1_100_893_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;HibernateException&nbsp;</span><span id="Codehighlighter1_100_893_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_100_893_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HibernateUtil.currentSession();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.beginTransaction();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;count(*)&nbsp;from&nbsp;EmailSendInfo&nbsp;where&nbsp;email_group_id&nbsp;=&nbsp;:emailGroupId&nbsp;and&nbsp;batch_id&nbsp;=&nbsp;:batchId</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createQuery(hql);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setString(</span><span style="color: #000000">"</span><span style="color: #000000">emailGroupId</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;emailGroupId);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setString(</span><span style="color: #000000">"</span><span style="color: #000000">batchId</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;emailBatchId);<br />
<img id="Codehighlighter1_497_632_Open_Image" onclick="this.style.display='none'; Codehighlighter1_497_632_Open_Text.style.display='none'; Codehighlighter1_497_632_Closed_Image.style.display='inline'; Codehighlighter1_497_632_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_497_632_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_497_632_Closed_Text.style.display='none'; Codehighlighter1_497_632_Open_Image.style.display='inline'; Codehighlighter1_497_632_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_497_632_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_497_632_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">//*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;for&nbsp;(Iterator&nbsp;it&nbsp;=&nbsp;query.iterate();&nbsp;it.hasNext();)&nbsp;{&nbsp;return<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;((Integer)&nbsp;it.next()).intValue();&nbsp;}<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_646_722_Open_Image" onclick="this.style.display='none'; Codehighlighter1_646_722_Open_Text.style.display='none'; Codehighlighter1_646_722_Closed_Image.style.display='inline'; Codehighlighter1_646_722_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_646_722_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_646_722_Closed_Text.style.display='none'; Codehighlighter1_646_722_Open_Image.style.display='inline'; Codehighlighter1_646_722_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_646_722_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_646_722_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;((Integer)&nbsp;query.iterate().next()).intValue();<br />
<img id="Codehighlighter1_744_800_Open_Image" onclick="this.style.display='none'; Codehighlighter1_744_800_Open_Text.style.display='none'; Codehighlighter1_744_800_Closed_Image.style.display='inline'; Codehighlighter1_744_800_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_744_800_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_744_800_Closed_Text.style.display='none'; Codehighlighter1_744_800_Open_Image.style.display='inline'; Codehighlighter1_744_800_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_744_800_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_744_800_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HibernateException(</span><span style="color: #000000">""</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_810_887_Open_Image" onclick="this.style.display='none'; Codehighlighter1_810_887_Open_Text.style.display='none'; Codehighlighter1_810_887_Closed_Image.style.display='inline'; Codehighlighter1_810_887_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_810_887_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_810_887_Closed_Text.style.display='none'; Codehighlighter1_810_887_Open_Image.style.display='inline'; Codehighlighter1_810_887_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_810_887_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_810_887_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateUtil.closeSession();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<span id="_100_889_Open_Text"><span style="color: #000000"><br />
spring+hibernate<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">第一种方法：</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;String&nbsp;hql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;count(*)&nbsp;from&nbsp;User&nbsp;as&nbsp;user</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;Integer&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Integer)getHibernateTemplate().find(hql).listIterator().next();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;count.intValue();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">第二种方法：</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;String&nbsp;hql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;count(*)&nbsp;from&nbsp;User&nbsp;as&nbsp;user</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;((Integer)getHibernateTemplate().iterate(hql).next()).intValue();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">第三种方法：</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;String&nbsp;hql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;count(*)&nbsp;from&nbsp;User&nbsp;as&nbsp;user</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;Query&nbsp;query&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;getHibernateTemplate().createQuery(&nbsp;getSession(),hql);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;((Integer)query.uniqueResult()).intValue();&nbsp;</span></div>
<br />
</span></span></div>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/203841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-05-29 14:59 <a href="http://www.blogjava.net/bnlovebn/archive/2008/05/29/203841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql中文问题终极解决方案</title><link>http://www.blogjava.net/bnlovebn/archive/2008/05/26/202978.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Mon, 26 May 2008 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/05/26/202978.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/202978.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/05/26/202978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/202978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/202978.html</trackback:ping><description><![CDATA[<p>取出字符中文没有乱码，而写入确是乱码，<br />
在java,jsp,数据库，表格都统一为、utf8或GBK等后，<br />
最后要在，my.ini或my.cnf中加入编码<br />
如：<br />
[mysqld]<br />
default-character-set=utf8<br />
default-storage-engine=INNODB<br />
</p>
<p>[client]</p>
<p>port=3306</p>
<p>[mysql]</p>
<p>default-character-set=utf8<br />
</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/202978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-05-26 17:06 <a href="http://www.blogjava.net/bnlovebn/archive/2008/05/26/202978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下mysql(rpm)安装使用手册[转]</title><link>http://www.blogjava.net/bnlovebn/archive/2008/05/26/202974.html</link><dc:creator>重归本垒（Bing）</dc:creator><author>重归本垒（Bing）</author><pubDate>Mon, 26 May 2008 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/bnlovebn/archive/2008/05/26/202974.html</guid><wfw:comment>http://www.blogjava.net/bnlovebn/comments/202974.html</wfw:comment><comments>http://www.blogjava.net/bnlovebn/archive/2008/05/26/202974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bnlovebn/comments/commentRss/202974.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bnlovebn/services/trackbacks/202974.html</trackback:ping><description><![CDATA[<font size="2"><font size="+0"><span style="color: #0b1150">下载地址为：http://dev.mysql.com/downloads/mysql/5.1.html，打开此网页，下拉网页找到&#8220;</span>Linux x86 generic RPM (statically linked against glibc 2.2.5) downloads<span style="color: #0b1150">&#8221;</span></font></font><span style="color: #0b1150"><font size="2">项，找到&#8220;Server&#8221;和&#8220;Client programs&#8221;项，下载需要的上述两个rpm文件。</font><font size="2"> <br />
2、安装</font><font size="2">MySQL <br />
　　 rpm文件是Red Hat公司开发的软件安装包，rpm可让Linux在安装软件包时免除许多复杂的手续。该命令在安装时常用的参数是 &#8211;ivh ,其中i表示将安装指定的rmp软件包，V表示安装时的详细信息，h表示在安装期间出现&#8220;#&#8221;符号来显示目前的安装过程。这个符号将持续到安装完成后才停止。</font><font size="2"> <br />
　　 1）安装服务器端</font><font size="2"> <br />
　　 在有两个rmp文件的目录下运行如下命令：</font><font size="2"> <br />
　　 [root@test1 local]# rpm -ivh </font></span><font size="2">MySQL-server-5.1.7-0.i386.rpm MySQL-client-5.1.7-0.i386.rpm<span style="font-size: 10.5pt; color: #0b1150"><font size="+0">　　</font></span></font>
<div><font size="2"><font size="+0"><span style="font-size: 10.5pt; color: #0b1150">显示如下信息。 <br />
warning: </span>MySQL-server-5.1.7-0.i386.rpm</font></font><span style="font-size: 10.5pt; color: #0b1150"><br />
<font size="2">signature: NOKEY, key ID 5072e1f5 <br />
</font></span><font size="2"><font size="+0"><span style="font-size: 10.5pt; color: #0b1150">　　 Preparing...　　　　　　　########################################### [100%] <br />
　　 1:MySQL-server　　　　　########################################### [100%] <br />
　　　 。。。。。。（省略显示） <br />
　　 /usr/bin/mysqladmin -u root password 'new-password' <br />
　　 /usr/bin/mysqladmin -u root -h test1 password 'new-password' <br />
　　　 。。。。。。（省略显示） <br />
　　 Starting mysqld daemon with databases from /var/lib/mysql <br />
　　 如出现如上信息，服务端安装完毕。测试是否成功可运行netstat看Mysql端口是否打开，如打开表示服务已经启动，安装成功。Mysql默认的端口是3306。 <br />
　　 [root@test1 local]# netstat -nat <br />
　　 Active Internet connections (servers and established) <br />
　　 Proto Recv-Q Send-Q Local Address　　　　　 Foreign Address　　　　 State　　　 <br />
　　 tcp　　0　　0 0.0.0.0:3306　　　　 0.0.0.0:*　　　　　 LISTEN　　　 <br />
　　 上面显示可以看出MySQL服务已经启动。 <br />
　　 2）安装客户端 <br />
　　 运行如下命令： <br />
　　 [root@test1 local]# rpm -ivh </span>MySQL-client-5.1.7-0.i386.rpm</font></font><span style="font-size: 10.5pt; color: #0b1150"><br />
</span><font size="+0"><span style="font-size: 10.5pt; color: #0b1150"><font size="2">　　 warning: </font></span><font size="2">MySQL-client-5.1.7-0.i386.rpm</font></font><span style="font-size: 10.5pt; color: #0b1150"><font size="2">: V3 DSA signature: NOKEY, key ID 5072e1f5 <br />
</font></span><span style="font-size: 10.5pt; color: #0b1150"><font size="2">　　 Preparing...　　　　########################################### [100%] <br />
　　 1:MySQL-client　 ########################################### [100%] <br />
　　 显示安装完毕。 <br />
　　 用下面的命令连接mysql,测试是否成功。 <br />
　 三、登录MySQL <br />
<br />
　　 登录MySQL的命令是mysql， mysql 的使用语法如下： <br />
　　 mysql [-u username] [-h host] [-p[password]] [dbname] <br />
　　 username 与 password 分别是 MySQL 的用户名与密码，mysql的初始管理帐号是root，没有密码，注意：这个root用户不是Linux的系统用户。MySQL默认用户是root，由于初始没有密码，第一次进时只需键入mysql即可。 <br />
　　 [root@test1 local]# mysql <br />
　　 Welcome to the MySQL monitor.　Commands end with ; or \g. <br />
　　 Your MySQL connection id is 1 to server version: 4.0.16-standard <br />
　　 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br />
　　 mysql&gt; <br />
　　 出现了&#8220;mysql&gt;&#8221;提示符，恭喜你，安装成功！ <br />
　　 增加了密码后的登录格式如下： <br />
　　 mysql -u root -p <br />
　　 Enter password: (输入密码) <br />
　　 其中-u后跟的是用户名，-p要求输入密码，回车后在输入密码处输入密码。 <br />
<br />
　　 注意：这个mysql文件在/usr/bin目录下，与后面讲的启动文件/etc/init.d/mysql不是一个文件。 <br />
<br />
　　 四、MySQL的几个重要目录 <br />
<br />
　　 MySQL安装完成后不象SQL Server默认安装在一个目录，它的数据库文件、配置文件和命令文件分别在不同的目录，了解这些目录非常重要，尤其对于Linux的初学者，因为 Linux本身的目录结构就比较复杂，如果搞不清楚MySQL的安装目录那就无从谈起深入学习。 <br />
<br />
　　 下面就介绍一下这几个目录。 <br />
<br />
　　 1、数据库目录 <br />
　　 /var/lib/mysql/ <br />
<br />
　　 2、配置文件 <br />
　　 /usr/share/mysql（mysql.server命令及配置文件） <br />
<br />
　　 3、相关命令 <br />
　　 /usr/bin(mysqladmin mysqldump等命令) <br />
<br />
　　 4、启动脚本 <br />
　　 /etc/rc.d/init.d/（启动脚本文件mysql的目录） <br />
　 五、修改登录密码 <br />
<br />
　　 MySQL默认没有密码，安装完毕增加密码的重要性是不言而喻的。 <br />
<br />
　　 1、命令 <br />
　　 usr/bin/mysqladmin -u root password 'new-password' <br />
　　 格式：mysqladmin -u用户名 -p旧密码 password 新密码 <br />
<br />
　　 2、例子 <br />
　　 例1：给root加个密码123456。 <br />
　　 键入以下命令 ： <br />
　　 [root@test1 local]# /usr/bin/mysqladmin -u root password 123456 <br />
　　 注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。 <br />
<br />
　　 3、测试是否修改成功 <br />
　　 1）不用密码登录 <br />
　　 [root@test1 local]# mysql <br />
　　 ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO) <br />
　　 显示错误，说明密码已经修改。 <br />
　　 2）用修改后的密码登录 <br />
　　 [root@test1 local]# mysql -u root -p <br />
　　 Enter password: (输入修改后的密码123456) <br />
　　 Welcome to the MySQL monitor.　Commands end with ; or \g. <br />
　　 Your MySQL connection id is 4 to server version: 4.0.16-standard <br />
　　 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br />
　　 mysql&gt; <br />
　　 成功！ <br />
　　 这是通过mysqladmin命令修改口令，也可通过修改库来更改口令。 <br />
<br />
　　 六、启动与停止 <br />
<br />
　　 1、启动 <br />
　　 MySQL安装完成后启动文件mysql在/etc/init.d目录下，在需要启动时运行下面命令即可。 <br />
　　 [root@test1 init.d]# /etc/init.d/mysql start <br />
<br />
　　 2、停止 <br />
　　 /usr/bin/mysqladmin -u root -p shutdown <br />
<br />
　　 3、自动启动 <br />
　　 1）察看mysql是否在自动启动列表中 <br />
　　 [root@test1 local]#　/sbin/chkconfig --list <br />
　　 2）把MySQL添加到你系统的启动服务组里面去 <br />
　　 [root@test1 local]#　/sbin/chkconfig　&#8211;- add　mysql <br />
　　 3）把MySQL从启动服务组里面删除。 <br />
　　 [root@test1 local]#　/sbin/chkconfig　&#8211;-del　mysql <br />
七、更改MySQL目录 <br />
<br />
　　 MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步： <br />
<br />
　　 1、home目录下建立data目录 <br />
　　 cd /home <br />
　　 mkdir data <br />
<br />
　　 2、把MySQL服务进程停掉： <br />
　　 mysqladmin -u root -p shutdown <br />
<br />
　　 3、把/var/lib/mysql整个目录移到/home/data <br />
　　 mv /var/lib/mysql　/home/data/ <br />
　　 这样就把MySQL的数据文件移动到了/home/data/mysql下 <br />
<br />
　　 4、找到my.cnf配置文件 <br />
　　 如果/etc/目录下没有my.cnf配置文件，请到/usr/share/mysql/下找到*.cnf文件，拷贝其中一个到/etc/并改名为my.cnf)中。命令如下： <br />
　　 [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf　/etc/my.cnf <br />
<br />
　　 5、编辑MySQL的配置文件/etc/my.cnf <br />
　　 为保证MySQL能够正常工作，需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为：/home/mysql/mysql.sock 。操作如下： <br />
　　 vi　 my.cnf　　　 (用vi工具编辑my.cnf文件，找到下列数据修改之) <br />
　　 # The MySQL server <br />
　　　 [mysqld] <br />
　　　 port　　　= 3306 <br />
　　　 #socket　 = /var/lib/mysql/mysql.sock（原内容，为了更稳妥用&#8220;#&#8221;注释此行） <br />
　　　 socket　 = /home/data/mysql/mysql.sock　　　（加上此行） <br />
<br />
　　 6、修改MySQL启动脚本/etc/rc.d/init.d/mysql <br />
　　 最后，需要修改MySQL启动脚本/etc/rc.d/init.d/mysql，把其中datadir=/var/lib/mysql一行中，等号右边的路径改成你现在的实际存放路径：home/data/mysql。 <br />
　　 [root@test1 etc]# vi　/etc/rc.d/init.d/mysql <br />
　　 #datadir=/var/lib/mysql　　　　（注释此行） <br />
　　 datadir=/home/data/mysql　　 （加上此行） <br />
<br />
　　 7、重新启动MySQL服务 <br />
　　 /etc/rc.d/init.d/mysql　start <br />
　　 或用reboot命令重启Linux <br />
　　 如果工作正常移动就成功了，否则对照前面的7步再检查一下。 <br />
<br />
　　 八、MySQL的常用操作 <br />
<br />
　　 注意：MySQL中每个命令后都要以分号；结尾。 <br />
<br />
　　 1、显示数据库 <br />
　　 mysql&gt; show databases; <br />
　　 +----------+ <br />
　　 | Database | <br />
　　 +----------+ <br />
　　 | mysql　　| <br />
　　 | test　　 | <br />
　　 +----------+ <br />
　　 2 rows in set (0.04 sec) <br />
　　 Mysql刚安装完有两个数据库：mysql和test。mysql库非常重要，它里面有MySQL的系统信息，我们改密码和新增用户，实际上就是用这个库中的相关表进行操作。 <br />
<br />
　　 2、显示数据库中的表 <br />
　　 mysql&gt; use mysql; （打开库，对每个库进行操作就要打开此库，类似于foxpro ） <br />
　　 Database changed <br />
<br />
　　 mysql&gt; show tables; <br />
　　 +-----------------+ <br />
　　 | Tables_in_mysql | <br />
　　 +-----------------+ <br />
　　 | columns_priv　　| <br />
　　 | db　　　　　　　| <br />
　　 | func　　　　　　| <br />
　　 | host　　　　　　| <br />
　　 | tables_priv　　 | <br />
　　 | user　　　　　　| <br />
　　 +-----------------+ <br />
　　 6 rows in set (0.01 sec) <br />
<br />
　　 3、显示数据表的结构： <br />
　　 describe 表名; <br />
<br />
　　 4、显示表中的记录： <br />
　　 select * from 表名; <br />
　　 例如：显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。 <br />
　　 Select * from user; <br />
<br />
　　 5、建库： <br />
　　 create database 库名; <br />
　　 例如：创建一个名字位aaa的库 <br />
　　 mysql&gt; create databases aaa; <br />
6、建表： <br />
　　 use 库名； <br />
　　 create table 表名 (字段设定列表)； <br />
　　 例如：在刚创建的aaa库中建立表name,表中有id(序号，自动增长)，xm（姓名）,xb（性别）,csny（出身年月）四个字段 <br />
　　 use aaa; <br />
　　 mysql&gt; create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date); <br />
　　 可以用describe命令察看刚建立的表结构。 <br />
　　 mysql&gt; describe name; <br />
<br />
　　 +-------+---------+------+-----+---------+----------------+ <br />
　　 | Field | Type　　| Null | Key | Default | Extra　　　　　| <br />
　　 +-------+---------+------+-----+---------+----------------+ <br />
　　 | id　　| int(3)　|　　　| PRI | NULL　　| auto_increment | <br />
　　 | xm　　| char(8) | YES　|　　 | NULL　　|　　　　　　　　| <br />
　　 | xb　　| char(2) | YES　|　　 | NULL　　|　　　　　　　　| <br />
　　 | csny　| date　　| YES　|　　 | NULL　　|　　　　　　　　| <br />
　　 +-------+---------+------+-----+---------+----------------+ <br />
<br />
　　 7、增加记录 <br />
　　 例如：增加几条相关纪录。 <br />
　　 mysql&gt; insert into name values('','张三','男','1971-10-01'); <br />
　　 mysql&gt; insert into name values('','白云','女','1972-05-20'); <br />
　　 可用select命令来验证结果。 <br />
　　 mysql&gt; select * from name; <br />
　　 +----+------+------+------------+ <br />
　　 | id | xm　 | xb　 | csny　　　 | <br />
　　 +----+------+------+------------+ <br />
　　 |　1 | 张三 | 男　 | 1971-10-01 | <br />
　　 |　2 | 白云 | 女　 | 1972-05-20 | <br />
　　 +----+------+------+------------+ <br />
<br />
　　 8、修改纪录 <br />
　　 例如：将张三的出生年月改为1971-01-10 <br />
　　 mysql&gt; update name set csny='1971-01-10' where xm='张三'; <br />
<br />
　　 9、删除纪录 <br />
　　 例如：删除张三的纪录。 <br />
　　 mysql&gt; delete from name where xm='张三'; <br />
<br />
　　 10、删库和删表 <br />
　　 drop database 库名; <br />
　　 drop table 表名； <br />
<br />
　　 九、增加MySQL用户 <br />
<br />
　　 格式：grant select on 数据库.* to 用户名@登录主机 identified by "密码" <br />
例1、增加一个用户user_1密码为123，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL，然后键入以下命令： <br />
<br />
　　 mysql&gt; grant select,insert,update,delete on *.* to user_1@"%" Identified by "123"; <br />
例1增加的用户是十分危险的，如果知道了user_1的密码，那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了，解决办法见例2。 <br />
<br />
　　例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录，并可以对数据库aaa进行查询、插入、修改、删除的操作（localhost指本地主机，即MySQL数据库所在的那台主机），这样用户即使用知道user_2的密码，他也无法从网上直接访问数据库，只能通过 MYSQL主机来操作aaa库。 <br />
<br />
　　 mysql&gt;grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123"; <br />
<br />
　　 用新增的用户如果登录不了MySQL，在登录时用如下命令： <br />
<br />
　　 mysql -u user_1 -p　-h 192.168.113.50　（-h后跟的是要登录主机的ip地址） <br />
<br />
　　 十、备份与恢复 <br />
<br />
　　 1、备份 <br />
<br />
　　 例如：将上例创建的aaa库备份到文件back_aaa中 <br />
<br />
　　 [root@test1 root]# cd　/home/data/mysql　(进入到库目录，本例库已由val/lib/mysql转到/home/data/mysql，见上述第七部分内容) <br />
　　 [root@test1 mysql]# mysqldump -u root -p --opt aaa &gt; back_aaa <br />
<br />
　　 2、恢复 <br />
<br />
　　 [root@test mysql]# mysql -u root -p ccc &lt; back_aaa </font></span></div>
<img src ="http://www.blogjava.net/bnlovebn/aggbug/202974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bnlovebn/" target="_blank">重归本垒（Bing）</a> 2008-05-26 16:59 <a href="http://www.blogjava.net/bnlovebn/archive/2008/05/26/202974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>