<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>蓝语</title>
	<atom:link href="http://www.bluesaying.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bluesaying.com</link>
	<description>落Nicety的博客</description>
	<pubDate>Mon, 27 Oct 2008 07:03:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>正确显示taxtarea中的文本</title>
		<link>http://www.bluesaying.com/2008/10/27/9/</link>
		<comments>http://www.bluesaying.com/2008/10/27/9/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 06:53:16 +0000</pubDate>
		<dc:creator>落 Nicety</dc:creator>
		
		<category><![CDATA[基础]]></category>

		<category><![CDATA[html/css]]></category>

		<guid isPermaLink="false">http://www.bluesaying.com/?p=9</guid>
		<description><![CDATA[在taxtarea中输入的文本。如果含有回车或空格。在界面上显示的时候则不哪么正常。回车消失了，空格变短了。
如何解决这个问题呢。有2种方法。
1.使用&#60;pre&#62;标签
w3c对pre元素是这样定义的：pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。
更详细的内容请参考 http://www.w3school.com.cn/tags/tag_pre.asp
也就是说包含在pre标签中的回车和空格会正常的显示出来。包括你在页面代码中输入的。所以如果使用pre元素你需要这样写：
&#60;pre&#62;要输出的文本&#60;/pre&#62;
，而不是这样：
 &#60;pre&#62;
要输出的文本
&#60;/pre&#62;
后一种写法 文本前的空白也会被显示的。除非你真的希望这样:)
2.对文本内容进行替换。
回车和空格不能正确显示，究其原因是他们各自的表示方式不同。在textarea里面输入的回车是字符&#8221;\r&#8221;，html中的回车(换行)是&#8221;&#60;br/&#62;&#8221;。
textarea中输入的空格是空白&#8221; &#8220;，而html中的一个空格是&#8221;&#38;nbsp;&#8221;。理所当然不能正确显示。好了现在知道了原因就有了第二种解决方案了。
只要我们将输入的文本中相应的&#8221;元素&#8221;替换成html认识的就ok了。因此下面一行代码即可解决问题：
&#8220;要输出的文本&#8220;.replaceAll(&#8220; &#8220;,&#8220;&#38;nbsp;&#8220;).replaceAll(&#8220;\r&#8220;,&#8220;&#60;br/&#62;&#8220;);
等等。这里还有一点小问题。把一个空格替换成一个&#8221;&#38;nbsp;&#8221;空格看上去仍然要少些。如果你喜欢可以替换成2个。
最后，除了回车和空格以外还有很多空白字符如tab等，如果你喜欢可以一并处理了^_^
最后的最后，如果本来的文本是很长的一行，使用pre标签后就不会自动换行。结果页面出现横向滚动条。不知道有没有好的解决方法？
而将第二种方法处理过的文本放在&#60;p&#62;标签中显示，就可以显示正常。

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();

]]></description>
			<content:encoded><![CDATA[<p>在taxtarea中输入的文本。如果含有回车或空格。在界面上显示的时候则不哪么正常。回车消失了，空格变短了。<br />
如何解决这个问题呢。有2种方法。<br />
1.使用&lt;pre&gt;标签<br />
w3c对pre元素是这样定义的：pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。<br />
更详细的内容请参考 <a title="http://www.w3school.com.cn/tags/tag_pre.asp" href="http://www.w3school.com.cn/tags/tag_pre.asp" target="_blank">http://www.w3school.com.cn/tags/tag_pre.asp</a><br />
也就是说包含在pre标签中的回车和空格会正常的显示出来。包括你在页面代码中输入的。所以如果使用pre元素你需要这样写：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pre</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">要输出的文本</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">pre</span><span style="color: #0000ff;">&gt;</span></div>
<p>，而不是这样：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000;"> </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pre</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
要输出的文本<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">pre</span><span style="color: #0000ff;">&gt;</span></div>
<p>后一种写法 文本前的空白也会被显示的。除非你真的希望这样:)<br />
2.对文本内容进行替换。<br />
回车和空格不能正确显示，究其原因是他们各自的表示方式不同。在textarea里面输入的回车是字符&#8221;\r&#8221;，html中的回车(换行)是&#8221;&lt;br/&gt;&#8221;。<br />
textarea中输入的空格是空白&#8221; &#8220;，而html中的一个空格是&#8221;&amp;nbsp;&#8221;。理所当然不能正确显示。好了现在知道了原因就有了第二种解决方案了。<br />
只要我们将输入的文本中相应的&#8221;元素&#8221;替换成html认识的就ok了。因此下面一行代码即可解决问题：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000;">&#8220;</span><span style="color: #000000;">要输出的文本</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">.replaceAll(</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;"> </span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">&amp;nbsp;</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">).replaceAll(</span><span style="color: #000000;">&#8220;\</span><span style="color: #000000;">r</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">br</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">);</span></div>
<p>等等。这里还有一点小问题。把一个空格替换成一个&#8221;&amp;nbsp;&#8221;空格看上去仍然要少些。如果你喜欢可以替换成2个。</p>
<p>最后，除了回车和空格以外还有很多空白字符如tab等，如果你喜欢可以一并处理了^_^</p>
<p>最后的最后，如果本来的文本是很长的一行，使用pre标签后就不会自动换行。结果页面出现横向滚动条。不知道有没有好的解决方法？<br />
而将第二种方法处理过的文本放在&lt;p&gt;标签中显示，就可以显示正常。<br />
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script><br />
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluesaying.com/2008/10/27/9/feed/</wfw:commentRss>
		</item>
		<item>
		<title>测试你按下的是那个键</title>
		<link>http://www.bluesaying.com/2008/05/25/8/</link>
		<comments>http://www.bluesaying.com/2008/05/25/8/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:33:05 +0000</pubDate>
		<dc:creator>落 Nicety</dc:creator>
		
		<category><![CDATA[html/css]]></category>

		<guid isPermaLink="false">http://www.bluesaying.com/?p=8</guid>
		<description><![CDATA[做web开发的时候，有时候需要根据键盘进行一些操作，例如按下Enter的时候提交表单，禁止用户输入某些特殊字符，设置快捷键等等。这时候需要找出用户按下的是那些按键，每次都找对照表太麻烦了.so..写了这么个小程序来测试按键。^_^
其中的charCode是根据ascii表转换的，不一定准确。




keyCode :




charCode  :




shift-key :




ctrl-key :




alt-key :





下面是ascii编码表：

源代码：
&#60;script type=&#8221;text/javascript&#8221;&#62;
function showKey(e){
e
= e &#124;&#124; window.event;
document.getElementById(
&#8220;keyCode&#8220;).value = e.keyCode;
document.getElementById(
&#8220;charCode&#8220;).value = String.fromCharCode(e.keyCode);
document.getElementById(
&#8220;shiftKey&#8220;).value = e.shiftKey;
document.getElementById(
&#8220;ctrlKey&#8220;).value = e.ctrlKey;
document.getElementById(
&#8220;altKey&#8220;).value = e.altKey;
}
$(document).ready(
function(){
document.onkeydown
= showKey;
});
&#60;/script&#62;
&#60;br /&#62;
&#60;table&#62;
&#60;tbody&#62;
&#60;tr&#62;
&#60;td&#62;keyCode : &#60;/td&#62;
&#60;td&#62;&#60;input id=&#8221;keyCode&#8221; type=&#8221;text&#8221; /&#62; &#60;/td&#62;
&#60;/tr&#62;
&#60;tr&#62;
&#60;td&#62;charCode  : &#60;/td&#62;
&#60;td&#62;&#60;input id=&#8221;charCode&#8221; type=&#8221;text&#8221; /&#62; &#60;/td&#62;
&#60;/tr&#62;
&#60;tr&#62;
&#60;td&#62;shift-key : &#60;/td&#62;
&#60;td&#62;&#60;input id=&#8221;shiftKey&#8221; type=&#8221;text&#8221; /&#62; &#60;/td&#62;
&#60;/tr&#62;
&#60;tr&#62;
&#60;td&#62;ctrl-key : &#60;/td&#62;
&#60;td&#62;&#60;input id=&#8221;ctrlKey&#8221; type=&#8221;text&#8221; /&#62; &#60;/td&#62;
&#60;/tr&#62;
&#60;tr&#62;
&#60;td&#62;alt-key : &#60;/td&#62;
&#60;td&#62;&#60;input id=&#8221;altKey&#8221; type=&#8221;text&#8221; /&#62; &#60;/td&#62;
&#60;/tr&#62;
&#60;/tbody&#62;
&#60;/table&#62;
其中我使用了jquery来初始化document的onkeydown事件。如果你不使用jquery可以用下面这段代码
window.onload [...]]]></description>
			<content:encoded><![CDATA[<p>做web开发的时候，有时候需要根据键盘进行一些操作，例如按下Enter的时候提交表单，禁止用户输入某些特殊字符，设置快捷键等等。这时候需要找出用户按下的是那些按键，每次都找对照表太麻烦了.so..写了这么个小程序来测试按键。^_^</p>
<p>其中的charCode是根据ascii表转换的，不一定准确。</p>
<p><script type="text/javascript"><!--
function showKey(e){
e = e || window.event;
document.getElementById("keyCode").value = e.keyCode;
document.getElementById("charCode").value = String.fromCharCode(e.keyCode);
document.getElementById("shiftKey").value = e.shiftKey;
document.getElementById("ctrlKey").value = e.ctrlKey;
document.getElementById("altKey").value = e.altKey;
}
window.onload = function(){
document.onkeydown= showKey;
};
// --></script></p>
<table border="0">
<tbody>
<tr>
<td>keyCode :</td>
<td>
<input id="keyCode" type="text" /></td>
</tr>
<tr>
<td>charCode  :</td>
<td>
<input id="charCode" type="text" /></td>
</tr>
<tr>
<td>shift-key :</td>
<td>
<input id="shiftKey" type="text" /></td>
</tr>
<tr>
<td>ctrl-key :</td>
<td>
<input id="ctrlKey" type="text" /></td>
</tr>
<tr>
<td>alt-key :</td>
<td>
<input id="altKey" type="text" /></td>
</tr>
</tbody>
</table>
<p>下面是ascii编码表：</p>
<p><img id="ViewPicture1_GalleryImage" style="border-color: Black; border-width: 0px; height:  437px; width: 640px;" src="http://p.blog.csdn.net/images/p_blog_csdn_net/nicety129/363555/o_ascii.gif" alt="ascii编码表" /></p>
<p>源代码：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">=&#8221;text/javascript&#8221;</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;"></p>
<p></span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;"> showKey(e){</p>
<p>e</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> e </span><span style="background-color: #f5f5f5; color: #000000;">||</span><span style="background-color: #f5f5f5; color: #000000;"> window.event;</p>
<p>document.getElementById(</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">keyCode</span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">).value </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> e.keyCode;</p>
<p>document.getElementById(</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">charCode</span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">).value </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> String.fromCharCode(e.keyCode);</p>
<p>document.getElementById(</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">shiftKey</span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">).value </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> e.shiftKey;</p>
<p>document.getElementById(</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">ctrlKey</span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">).value </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> e.ctrlKey;</p>
<p>document.getElementById(</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">altKey</span><span style="background-color: #f5f5f5; color: #000000;">&#8220;</span><span style="background-color: #f5f5f5; color: #000000;">).value </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> e.altKey;</p>
<p>}</p>
<p>$(document).ready(</p>
<p></span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;">(){</p>
<p>document.onkeydown</p>
<p></span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> showKey;</p>
<p>});</p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">br </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">table</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tbody</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">keyCode : </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">input </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">=&#8221;keyCode&#8221;</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">=&#8221;text&#8221;</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"> </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">charCode  : </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">input </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">=&#8221;charCode&#8221;</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">=&#8221;text&#8221;</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"> </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">shift-key : </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">input </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">=&#8221;shiftKey&#8221;</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">=&#8221;text&#8221;</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"> </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">ctrl-key : </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">input </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">=&#8221;ctrlKey&#8221;</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">=&#8221;text&#8221;</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"> </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">alt-key : </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">input </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">=&#8221;altKey&#8221;</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">=&#8221;text&#8221;</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"> </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tbody</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"></p>
<p></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">table</span><span style="color: #0000ff;">&gt;</span></div>
<p>其中我使用了jquery来初始化document的onkeydown事件。如果你不使用jquery可以用下面这段代码</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000;">window.onload </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){</p>
<p>document.onkeydown</p>
<p></span><span style="color: #000000;">=</span><span style="color: #000000;"> showKey;</p>
<p>};</p>
<p></span></div>
<p>代替</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000;">$(document).ready(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){</p>
<p>document.onkeydown</p>
<p></span><span style="color: #000000;">=</span><span style="color: #000000;"> showKey;</p>
<p>});</p>
<p></span></div>
<p><a href="http://p.blog.csdn.net/images/p_blog_csdn_net/nicety129/363555/o_ascii.gif" target="_blank"> </a><br />
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script><br />
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluesaying.com/2008/05/25/8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>sun.io.MalformedInputException异常处理</title>
		<link>http://www.bluesaying.com/2008/05/25/7/</link>
		<comments>http://www.bluesaying.com/2008/05/25/7/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:27:10 +0000</pubDate>
		<dc:creator>落 Nicety</dc:creator>
		
		<category><![CDATA[xml]]></category>

		<category><![CDATA[中间件]]></category>

		<category><![CDATA[基础]]></category>

		<guid isPermaLink="false">http://www.bluesaying.com/?p=7</guid>
		<description><![CDATA[文件编码导致的sun.io.MalformedInputException异常
如果你没有使用ibm的jdk，却依然遇到了这个问题。
如果你的异常是在解析xml的时候出现的，如果你的异常是某些地方有某些地方没有。
例如tomcat里面没有，weblogic上有。抑或这个domain有那个domain却没有。而确实是同一个应用。
哪么你遇到的可能和笔者要讲的是同一个问题。
你的xml文件本身是UTF-8编码(注意是文件是UTF-8编码，不是xml文件里面指定的文件内容是UTF-8编码)？
你的xml文件里面含有中文？
你使用UltraEdit编辑xml文件？
删掉中文，问题依旧？
那么可以肯定你的问题就是笔者要讲的问题
首先给出解决方案：
方案一：
1.xml用记事本打开，删除里面的中文。
2.在windows 本地新建一个txt文件，用记事本(注意不能用UltraEdit)打开。
3.将xml里面的内容复制到新建的txt文件中。
4.将txt文件重名为xml文件的名称。覆盖原来的xml文件
5.看看问题是不是解决了，咔咔 神奇吧。
方案二：(适用于使用eclipse ide的程序员们，其他的能更改文件编码的程序也行，不过没测试过)
1.将xml文件的内容剪切出来，保存在别处，什么文件都行，最后是txt中。留下一个空的xml文件
2.将空的xml文件的编码修改成GBK。注意是文件的编码，不是xml的那个声明。当然这里已经删了。
3.这时候是否看到文件的头部有乱码? 删之!
4.将原来文件的内容烤回来
5.ok问题解决，这种方法不用删除中文。
问题的根源：
估计有些人已经明白是什么原因了。呵呵，那就是xml文件那个BOM的头导致的这个问题！
哦？还有没明白的？下面详细说明下：
xml文件分为两种，一种是有BOM信息的，它表示文件是xml格式
另外还有没有BOM信息的xml文件。
就是这个特殊的BOM信息导致了解析xml出错。
那跟UltraEdit有什么关系？UltraEdit在编辑xml文件的时候会自动加上这个可恶的BOM信息。

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();

]]></description>
			<content:encoded><![CDATA[<p>文件编码导致的sun.io.MalformedInputException异常<br />
如果你没有使用ibm的jdk，却依然遇到了这个问题。<br />
如果你的异常是在解析xml的时候出现的，如果你的异常是某些地方有某些地方没有。<br />
例如tomcat里面没有，weblogic上有。抑或这个domain有那个domain却没有。而确实是同一个应用。<br />
哪么你遇到的可能和笔者要讲的是同一个问题。</p>
<p>你的xml文件本身是UTF-8编码(注意是文件是UTF-8编码，不是xml文件里面指定的文件内容是UTF-8编码)？<br />
你的xml文件里面含有中文？<br />
你使用UltraEdit编辑xml文件？<br />
删掉中文，问题依旧？</p>
<p>那么可以肯定你的问题就是笔者要讲的问题</p>
<p>首先给出解决方案：<br />
方案一：<br />
1.xml用记事本打开，删除里面的中文。<br />
2.在windows 本地新建一个txt文件，用记事本(注意不能用UltraEdit)打开。<br />
3.将xml里面的内容复制到新建的txt文件中。<br />
4.将txt文件重名为xml文件的名称。覆盖原来的xml文件<br />
5.看看问题是不是解决了，咔咔 神奇吧。</p>
<p>方案二：(适用于使用eclipse ide的程序员们，其他的能更改文件编码的程序也行，不过没测试过)<br />
1.将xml文件的内容剪切出来，保存在别处，什么文件都行，最后是txt中。留下一个空的xml文件<br />
2.将空的xml文件的编码修改成GBK。注意是文件的编码，不是xml的那个声明。当然这里已经删了。<br />
3.这时候是否看到文件的头部有乱码? 删之!<br />
4.将原来文件的内容烤回来<br />
5.ok问题解决，这种方法不用删除中文。</p>
<p>问题的根源：<br />
估计有些人已经明白是什么原因了。呵呵，那就是xml文件那个BOM的头导致的这个问题！<br />
哦？还有没明白的？下面详细说明下：<br />
xml文件分为两种，一种是有BOM信息的，它表示文件是xml格式<br />
另外还有没有BOM信息的xml文件。<br />
就是这个特殊的BOM信息导致了解析xml出错。<br />
那跟UltraEdit有什么关系？UltraEdit在编辑xml文件的时候会自动加上这个可恶的BOM信息。<br />
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script><br />
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluesaying.com/2008/05/25/7/feed/</wfw:commentRss>
		</item>
		<item>
		<title>详细的log4j配置说明</title>
		<link>http://www.bluesaying.com/2008/05/25/6/</link>
		<comments>http://www.bluesaying.com/2008/05/25/6/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:23:12 +0000</pubDate>
		<dc:creator>落 Nicety</dc:creator>
		
		<category><![CDATA[基础]]></category>

		<category><![CDATA[log4j]]></category>

		<guid isPermaLink="false">http://www.bluesaying.com/?p=6</guid>
		<description><![CDATA[详细的log4j配置说明
一直没有认真研究过log4j的配置，这几天比较闲，认真的看了看。现在总结下。
Log4j有三个主要的组件：Loggers(记录器)，Appenders(输出源)和Layouts(布局)。
log4j的配置文件也可以是多种格式的，但主要是xml文件和properties文件
1.配置根logger:
语法：log4j.rootLogger =[level],appenderName1,appenderName2,&#8230;
level ：OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL的其中一个。
appenderName：日志输入的目的地，可以有多个地方
根logger是一定存在的，根logger指定了默认的日志配置。
2.配置日志输入的目的地(appender)
语法：log4j.appender.appenderName = fully.qualified.name.of.appender.class
fully.qualified.name.of.appender.class 可以是以下的几种:
(1).org.apache.log4j.ConsoleAppender（控制台）
(2).org.apache.log4j.FileAppender（文件）
(3).org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）
(4).org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）
(5).org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）
其中每一个又有不同的配置选项:
(1).org.apache.log4j.ConsoleAppender（控制台）的选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err：默认情况下是：System.out,指定输出控制台
(2).org.apache.log4j.FileAppender的选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。
(3).org.apache.log4j.DailyRollingFileAppender的选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。
DatePattern=&#8217;.'yyyy-ww:每周滚动一次文件，即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下：
1)&#8217;.'yyyy-MM: 每月
2)&#8217;.'yyyy-ww: 每周
3)&#8217;.'yyyy-MM-dd: 每天
4)&#8217;.'yyyy-MM-dd-a: 每天两次
5)&#8217;.'yyyy-MM-dd-HH: 每小时
6)&#8217;.'yyyy-MM-dd-HH-mm: 每分钟
(4).org.apache.log4j.RollingFileAppender
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
3.配置日志输入的格式
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
这里需要说明的就是日志信息格式中几个符号所代表的含义：
-: 信息输出时左对齐；
%p: 输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,
%d: 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目，通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个&#8221;%&#8221;字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符，Windows平台为&#8221;rn&#8221;，Unix平台为&#8221;n&#8221;输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：
1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。
2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，&#8221;-&#8221;号指定左对齐。
3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边交远销出的字符截掉。
下面是一个详细的配置样例
og4j.rootLogger=DEBUG,CONSOLE,A1,im
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
###################
# Console Appender(输出到控制台)
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#####################
# File Appender [...]]]></description>
			<content:encoded><![CDATA[<p>详细的log4j配置说明</p>
<p>一直没有认真研究过log4j的配置，这几天比较闲，认真的看了看。现在总结下。<br />
Log4j有三个主要的组件：Loggers(记录器)，Appenders(输出源)和Layouts(布局)。<br />
log4j的配置文件也可以是多种格式的，但主要是xml文件和properties文件<br />
1.配置根logger:<br />
语法：log4j.rootLogger =[level],appenderName1,appenderName2,&#8230;<br />
level ：OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL的其中一个。<br />
appenderName：日志输入的目的地，可以有多个地方<br />
根logger是一定存在的，根logger指定了默认的日志配置。<br />
2.配置日志输入的目的地(appender)<br />
语法：log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />
fully.qualified.name.of.appender.class 可以是以下的几种:<br />
(1).org.apache.log4j.ConsoleAppender（控制台）<br />
(2).org.apache.log4j.FileAppender（文件）<br />
(3).org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br />
(4).org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）<br />
(5).org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br />
其中每一个又有不同的配置选项:<br />
(1).org.apache.log4j.ConsoleAppender（控制台）的选项<br />
Threshold=WARN:指定日志消息的输出最低层次。<br />
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
Target=System.err：默认情况下是：System.out,指定输出控制台<br />
(2).org.apache.log4j.FileAppender的选项<br />
Threshold=WARN:指定日志消息的输出最低层次。<br />
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
File=mylog.txt:指定消息输出到mylog.txt文件。<br />
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />
(3).org.apache.log4j.DailyRollingFileAppender的选项<br />
Threshold=WARN:指定日志消息的输出最低层次。<br />
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
File=mylog.txt:指定消息输出到mylog.txt文件。<br />
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />
DatePattern=&#8217;.'yyyy-ww:每周滚动一次文件，即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下：<br />
1)&#8217;.'yyyy-MM: 每月<br />
2)&#8217;.'yyyy-ww: 每周<br />
3)&#8217;.'yyyy-MM-dd: 每天<br />
4)&#8217;.'yyyy-MM-dd-a: 每天两次<br />
5)&#8217;.'yyyy-MM-dd-HH: 每小时<br />
6)&#8217;.'yyyy-MM-dd-HH-mm: 每分钟<br />
(4).org.apache.log4j.RollingFileAppender<br />
Threshold=WARN:指定日志消息的输出最低层次。<br />
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
File=mylog.txt:指定消息输出到mylog.txt文件。<br />
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。<br />
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。</p>
<p>3.配置日志输入的格式<br />
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n<br />
这里需要说明的就是日志信息格式中几个符号所代表的含义：<br />
-: 信息输出时左对齐；<br />
%p: 输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,<br />
%d: 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921<br />
%r: 输出自应用启动到输出该log信息耗费的毫秒数<br />
%c: 输出日志信息所属的类目，通常就是所在类的全名<br />
%t: 输出产生该日志事件的线程名<br />
%l: 输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)<br />
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。<br />
%%: 输出一个&#8221;%&#8221;字符<br />
%F: 输出日志消息产生时所在的文件名称<br />
%L: 输出代码中的行号<br />
%m: 输出代码中指定的消息,产生的日志具体信息<br />
%n: 输出一个回车换行符，Windows平台为&#8221;rn&#8221;，Unix平台为&#8221;n&#8221;输出日志信息换行<br />
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：<br />
1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。<br />
2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，&#8221;-&#8221;号指定左对齐。<br />
3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。<br />
4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边交远销出的字符截掉。<br />
下面是一个详细的配置样例</p>
<p>og4j.rootLogger=DEBUG,CONSOLE,A1,im<br />
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE<br />
log4j.addivity.org.apache=true<br />
###################<br />
# Console Appender(输出到控制台)<br />
###################<br />
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<br />
log4j.appender.Threshold=DEBUG<br />
log4j.appender.CONSOLE.Target=System.out<br />
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n</p>
<p>#####################<br />
# File Appender 输出到文件<br />
#####################<br />
log4j.appender.FILE=org.apache.log4j.FileAppender<br />
log4j.appender.FILE.File=file.log<br />
log4j.appender.FILE.Append=false<br />
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
# Use this layout for LogFactor 5 analysis</p>
<p>########################<br />
# Rolling File<br />
########################<br />
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender<br />
log4j.appender.ROLLING_FILE.Threshold=ERROR<br />
log4j.appender.ROLLING_FILE.File=rolling.log<br />
log4j.appender.ROLLING_FILE.Append=true<br />
log4j.appender.ROLLING_FILE.MaxFileSize=10KB<br />
log4j.appender.ROLLING_FILE.MaxBackupIndex=1<br />
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p>####################<br />
# Socket Appender<br />
####################<br />
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender<br />
log4j.appender.SOCKET.RemoteHost=localhost<br />
log4j.appender.SOCKET.Port=5001<br />
log4j.appender.SOCKET.LocationInfo=true<br />
# Set up for Log Facter 5<br />
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.SOCET.layout.ConversionPattern=[start]%d[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n</p>
<p>########################<br />
# Log Factor 5 Appender<br />
########################<br />
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender<br />
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000</p>
<p>########################<br />
# SMTP Appender 发送邮件<br />
#######################<br />
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<br />
log4j.appender.MAIL.Threshold=FATAL<br />
log4j.appender.MAIL.BufferSize=10<br />
log4j.appender.MAIL.From=chenyl@hollycrm.com<br />
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com<br />
log4j.appender.MAIL.Subject=Log4J Message<br />
log4j.appender.MAIL.To=chenyl@hollycrm.com<br />
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p>########################<br />
# JDBC Appender 输出到数据库<br />
#######################<br />
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender<br />
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test<br />
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver<br />
log4j.appender.DATABASE.user=root<br />
log4j.appender.DATABASE.password=<br />
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (&#8217;[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n&#8217;)<br />
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p>log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender<br />
log4j.appender.A1.File=SampleMessages.log4j<br />
log4j.appender.A1.DatePattern=yyyyMMdd-HH&#8217;.log4j&#8217;<br />
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout</p>
<p>###################<br />
#自定义Appender<br />
###################<br />
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<br />
log4j.appender.im.host = mail.cybercorlin.net<br />
log4j.appender.im.username = username<br />
log4j.appender.im.password = password<br />
log4j.appender.im.recipient = corlin@cybercorlin.net<br />
log4j.appender.im.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p>参考：http://www.builder.com.cn/2008/0517/866964.shtml<br />
<script type="text/javascript"><!--
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
// --></script><br />
<script type="text/javascript"><!--
var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
// --></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluesaying.com/2008/05/25/6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>hibernate 映射 clob字段</title>
		<link>http://www.bluesaying.com/2008/03/05/4/</link>
		<comments>http://www.bluesaying.com/2008/03/05/4/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 15:05:33 +0000</pubDate>
		<dc:creator>落 Nicety</dc:creator>
		
		<category><![CDATA[hibernate]]></category>

		<category><![CDATA[spring]]></category>

		<category><![CDATA[基础]]></category>

		<category><![CDATA[oracle clob]]></category>

		<guid isPermaLink="false">http://www.bluesaying.com/?p=4</guid>
		<description><![CDATA[项目中用到 长文本作为内容
pojo中使用 string 类型 数据库 oracle9i 用的的clob字段
pojo:
private String content;
public void setContent(String content){
this.content = content;
}
hibernate配置
&#60;property name=&#8221;content&#8221; column=&#8221;C_Content&#8221; type=&#8221;text&#8221; length=&#8221;10000&#8243;&#62;&#60;/property&#62;
发现当content 字段的内容在 1000~2000 字符长度中间的时候出现
sql错误
而文本长度小于1000 长于2000 都没有问题。
问题：hibernate配置中length=&#8221;10000&#8243;属性是做什么用的？我尝试过 将他配置成1000，5000，1w或者不配置 最后执行的结果都一样
查资料 google baidu。。。
一般认为 length指定的是text的最大长度，这里显然不是
又有认为 是将java中string 值当作clob处理的最小长度，也就是当string长度小于这个值的时候 当string处理，当string大于这个长度的时候当text(clob)处理。但是我将length设置为1000时，输入1k+文本 依然有sql错误。超过2000却没有问题。
so..这两个都不是答案.
又有人说，介个是jdbc的 bug 换成10g的就米有问题了。遂尝试..未果，问题依旧。
finally..这个length属性到底干嘛用 没搞清楚.. 抑或 不该这么配置？
继续寻找，找到另外一种解决办法。可以通过spring来解决这个问题
hibernate配置
&#60;property name=&#8221;content&#8221; column=&#8221;C_Content&#8221; length=&#8221;10000&#8243;
type=&#8221;org.springframework.orm.hibernate3.support.ClobStringType&#8221;&#62;
&#60;/property&#62;
spring配置
&#60;bean id=&#8221;oracleLobHandler&#8221;
class=&#8221;org.springframework.jdbc.support.lob.OracleLobHandler&#8221;&#62;
&#60;property name=&#8221;nativeJdbcExtractor&#8221;&#62;
&#60;ref local=&#8221;nativeJdbcExtractor&#8221;/&#62;
&#60;/property&#62;
&#60;/bean&#62;
&#60;bean id=&#8221;nativeJdbcExtractor&#8221;
class=&#8221;org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor&#8221;&#62;
&#60;/bean&#62;
上面2个bean是关键
然后在sessionFactory的bean中加入
&#60;bean id=&#8221;sessionFactory&#8221;
class=&#8221;org.springframework.orm.hibernate3.LocalSessionFactoryBean&#8221;&#62;
&#60;property name=&#8221;lobHandler&#8221;&#62;
&#60;ref bean=&#8221;oracleLobHandler&#8221; /&#62;
&#60;/property&#62;
。。。其他
&#60;/bean&#62;
 
问题解决，但是length=&#8221;10000&#8243; 属性依然无用，可正常插入 任意长度的字符串
但是这样的话 数据库就不能跨平台了..so 期待跨数据库平台的 方案~~
 


]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">项目中用到 长文本作为内容<span lang="EN-US"></p>
<p>pojo</span>中使用<span lang="EN-US"> string </span>类型 数据库<span lang="EN-US"> oracle9i </span>用的的<span lang="EN-US">clob</span>字段<span lang="EN-US"></p>
<p>pojo:</span></span></p>
<p style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"><span style="font-size: medium;"><span style="color: blue;">private</span><span style="color: black;"> String content;</p>
<p></span><span style="color: blue;">public</span> <span style="color: blue;">void</span><span style="color: black;"> setContent(String content){</p>
<p></span><span style="color: blue;">this</span><span style="color: black;">.content = content;</p>
<p>}</span></span></p>
<div><span style="font-size: medium;">hibernate配置</span></div>
<div style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="font-size: medium;"><span style="color: blue;">&lt;</span><span style="color: maroon;">property </span><span style="color: red;">name</span><span style="color: blue;">=&#8221;content&#8221;</span><span style="color: red;"> column</span><span style="color: blue;">=&#8221;C_Content&#8221;</span><span style="color: red;"> type</span><span style="color: blue;">=&#8221;text&#8221;</span><span style="color: red;"> length</span><span style="color: blue;">=&#8221;10000&#8243;&gt;&lt;/</span><span style="color: maroon;">property</span><span style="color: blue;">&gt;</span></span></div>
<div><span style="font-size: medium;">发现当content 字段的内容在 1000~2000 字符长度中间的时候出现</span></div>
<div><span style="font-size: medium;">sql错误</span></div>
<div><span style="font-size: medium;">而文本长度小于1000 长于2000 都没有问题。</span></div>
<p align="left"><span style="font-size: medium;">问题：hibernate配置中length=&#8221;10000&#8243;属性是做什么用的？我尝试过 将他配置成1000，5000，1w或者不配置 最后执行的结果都一样</span></p>
<div><span style="font-size: medium;">查资料 google baidu。。。</span></div>
<div><span style="font-size: medium;">一般认为 length指定的是text的最大长度，这里显然不是</span></div>
<p align="left"><span style="font-size: medium;">又有认为 是将java中string 值当作clob处理的最小长度，也就是当string长度小于这个值的时候 当string处理，当string大于这个长度的时候当text(clob)处理。但是我将length设置为1000时，输入1k+文本 依然有sql错误。超过2000却没有问题。</span></p>
<div><span style="font-size: medium;">so..这两个都不是答案.</span></div>
<div><span style="font-size: medium;">又有人说，介个是jdbc的 bug 换成10g的就米有问题了。遂尝试..未果，问题依旧。</span></div>
<div><span style="font-size: medium;">finally..这个length属性到底干嘛用 没搞清楚.. 抑或 不该这么配置？</span></div>
<div><span style="font-size: medium;">继续寻找，找到另外一种解决办法。可以通过spring来解决这个问题</span></div>
<div><span style="font-size: medium;">hibernate配置</span></div>
<div style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="font-size: medium;"><span style="color: blue;">&lt;</span><span style="color: maroon;">property </span><span style="color: red;">name</span><span style="color: blue;">=&#8221;content&#8221;</span><span style="color: red;"> column</span><span style="color: blue;">=&#8221;C_Content&#8221;</span><span style="color: red;"> length</span><span style="color: blue;">=&#8221;10000&#8243;</span></span></div>
<div style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; text-indent: 21pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="font-size: medium;"><span style="color: red;">type</span><span style="color: blue;">=&#8221;org.springframework.orm.hibernate3.support.ClobStringType&#8221;</span><span style="color: blue;">&gt;</span></span></div>
<div style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="font-size: medium;"><span style="color: blue;">&lt;/</span><span style="color: maroon;">property</span><span style="color: blue;">&gt;</span></span></div>
<div><span style="font-size: medium;">spring配置</span></div>
<div style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="font-size: medium;"><span style="color: blue;">&lt;</span><span style="color: maroon;">bean </span><span style="color: red;">id</span><span style="color: blue;">=&#8221;oracleLobHandler&#8221;</span></p>
<p><span style="color: red;">class</span><span style="color: blue;">=&#8221;org.springframework.jdbc.support.lob.OracleLobHandler&#8221;&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;</span><span style="color: maroon;">property </span><span style="color: red;">name</span><span style="color: blue;">=&#8221;nativeJdbcExtractor&#8221;&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;</span><span style="color: maroon;">ref </span><span style="color: red;">local</span><span style="color: blue;">=&#8221;nativeJdbcExtractor&#8221;/&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;/</span><span style="color: maroon;">property</span><span style="color: blue;">&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;/</span><span style="color: maroon;">bean</span><span style="color: blue;">&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;</span><span style="color: maroon;">bean </span><span style="color: red;">id</span><span style="color: blue;">=&#8221;nativeJdbcExtractor&#8221;</span></p>
<p><span style="color: red;">class</span><span style="color: blue;">=&#8221;org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor&#8221;&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;/</span><span style="color: maroon;">bean</span><span style="color: blue;">&gt;</span></span></div>
<div><span style="font-size: medium;">上面2个bean是关键</span></div>
<div><span style="font-size: medium;">然后在sessionFactory的bean中加入</span></div>
<p style="background: #eeeeee none repeat scroll 0% 50%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"><span style="font-size: medium;"><span style="color: blue;">&lt;</span><span style="color: maroon;">bean </span><span style="color: red;">id</span><span style="color: blue;">=&#8221;sessionFactory&#8221;</span><span style="color: red;"></p>
<p>class</span><span style="color: blue;">=&#8221;org.springframework.orm.hibernate3.LocalSessionFactoryBean&#8221;&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;</span><span style="color: maroon;">property </span><span style="color: red;">name</span><span style="color: blue;">=&#8221;lobHandler&#8221;&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;</span><span style="color: maroon;">ref </span><span style="color: red;">bean</span><span style="color: blue;">=&#8221;oracleLobHandler&#8221;</span> <span style="color: blue;">/&gt;</span><span style="color: black;"></p>
<p></span><span style="color: blue;">&lt;/</span><span style="color: maroon;">property</span><span style="color: blue;">&gt;</span><span style="color: black;"></p>
<p></span><span style="color: black;">。。。其他</p>
<p></span><span style="color: blue;">&lt;/</span><span style="color: maroon;">bean</span><span style="color: blue;">&gt;</span></span></p>
<div><span style="font-size: medium;"> </span></div>
<div><span style="font-size: medium;">问题解决，但是length=&#8221;10000&#8243; 属性依然无用，可正常插入 任意长度的字符串</span></div>
<div><span style="font-size: medium;">但是这样的话 数据库就不能跨平台了..so 期待跨数据库平台的 方案~~</span></div>
<div><span style="font-size: medium;"> </span></div>
<p><script type="text/javascript"><!--
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
// --></script><br />
<script type="text/javascript"><!--
var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
// --></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluesaying.com/2008/03/05/4/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
