﻿<?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/fourlee/</link><description>我就是我，我不是我，我还是我</description><language>zh-cn</language><lastBuildDate>Fri, 01 May 2026 10:26:05 GMT</lastBuildDate><pubDate>Fri, 01 May 2026 10:26:05 GMT</pubDate><ttl>60</ttl><item><title>Struts 2 (1) - setup</title><link>http://www.blogjava.net/fourlee/archive/2008/05/21/201792.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Tue, 20 May 2008 17:27:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/21/201792.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/201792.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/21/201792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/201792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/201792.html</trackback:ping><description><![CDATA[
<p>开发环境：eclipse 3.3 jee版</p>
<ol>
<li>下载</li>
<li>新建web project</li>
<li>复制*.jar文件到lib目录</li>
<li>修改web.xml文件</li>
<li>新建并编辑struts.xml文件</li>
<li>HelloAction</li>
</ol>
<p><strong>下载</strong></p>
<p>Struts2的下载地址是： <a href="http://struts.apache.org/download.cgi">http://struts.apache.org/download.cgi</a></p>
<p>到现在为止：最新版本是2.0.11.1。把下载后的文件解压缩到一个目录中。在解压缩后的apps目录中，有个struts2-blank-2.0.11.war。这是搭建一个新的struts2项目的很好的参考。本文就参考这个。</p>
<p><strong>新建web工程</strong></p>
<p>新建一个web project。这里假设project 名称为struts2</p>
<p><strong>复制*.jar文件</strong></p>
<p>至少需要5个jar文件。</p>
<p><a href="http:/struts2.jpg" rel="lightbox" title="struts2.jpg"><img src="http:/struts2_tn.jpg" title="struts2.jpg" height="86" width="176" alt="struts2.jpg" border="0" id="urn:zoundry:jid:struts2.jpg"/></a></p>
<p><strong>修改web.xml文件</strong></p>
<p>在web.xml文件中加入下面的内容。（在web-app节点中）<br/></p>
<pre xml:space="preserve">
<code class="xml">    <span class="tag">&lt;<span class="title">filter</span><span class="tag_internal">&gt;</span></span>
        <span class="tag">&lt;<span class="title">filter-name</span><span class="tag_internal">&gt;</span></span>struts2<span class="tag">&lt;/<span class="title">filter-name</span><span class="tag_internal">&gt;</span></span>
        <span class="tag">&lt;<span class="title">filter-class</span><span class="tag_internal">&gt;</span></span>org.apache.struts2.dispatcher.FilterDispatcher<span class="tag">&lt;/<span class="title">filter-class</span><span class="tag_internal">&gt;</span></span>
    <span class="tag">&lt;/<span class="title">filter</span><span class="tag_internal">&gt;</span></span>
    <span class="tag">&lt;<span class="title">filter-mapping</span><span class="tag_internal">&gt;</span></span>
        <span class="tag">&lt;<span class="title">filter-name</span><span class="tag_internal">&gt;</span></span>struts2<span class="tag">&lt;/<span class="title">filter-name</span><span class="tag_internal">&gt;</span></span>
        <span class="tag">&lt;<span class="title">url-pattern</span><span class="tag_internal">&gt;</span></span>/*<span class="tag">&lt;/<span class="title">url-pattern</span><span class="tag_internal">&gt;</span></span>
    <span class="tag">&lt;/<span class="title">filter-mapping</span><span class="tag_internal">&gt;</span></span>
</code>
</pre>
<p><strong>新建并编辑struts.xml文件</strong></p>
<p>struts.xml文件的骨架是下面这样的：</p>
<pre xml:space="preserve">
<code class="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" &gt;
&lt;struts&gt;
    &lt;package name="struts" extends="struts-default"&gt;

        &lt;!--action is here--&gt;

    &lt;/package&gt;
&lt;/struts&gt;
</code>
</pre>
<p>到现在为止，struts环境已经搭建好了。下面可以编写一个HelloAction来运行测试一下环境。</p>
<p><strong>HelloAction</strong></p>
<p>Action的一般流程是这样的</p>
<ol>
<li>input.jsp文件</li>
<li>配置action。</li>
<li>执行HelloAction</li>
<li>达到result.jsp文件</li>
</ol>
<img src ="http://www.blogjava.net/fourlee/aggbug/201792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-21 01:27 <a href="http://www.blogjava.net/fourlee/archive/2008/05/21/201792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第 6 天： 解答 -- 16进制的趣事， 问题 -- 转型</title><link>http://www.blogjava.net/fourlee/archive/2008/05/17/201128.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Sat, 17 May 2008 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/17/201128.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/201128.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/17/201128.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/201128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/201128.html</trackback:ping><description><![CDATA[
<h2>第 5 天的问题</h2>
<p>下面的程序是对两个十六进制（hex）字面常量进行相加，然后打印出十六进制的结果。这个程序会打印出什么呢？</p>
<pre xml:space="preserve">
<code class="java"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">JoyOfHex</span> {</span>
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args) {
        System.out.println(Long.toHexString(<span class="number">0x100000000L</span> + <span class="number">0xcafebabe</span>));
    }
}</code>
</pre>
<h2>第 5 天问题的解答</h2>
<p>看起来很明显，该程序应该打印出1cafebabe。毕竟，这确实就是十六进制数字10000000016与cafebabe16的和。该程序使用的是long型运算，它可以支持16位十六进制数，因此运算溢出是不可能的。</p>
<p>遗憾的告诉你，结果是cafebabe，并没有任何前导的1。这个输出表示的是正确结果的低32位，但是不知何故，第33位丢失了。</p>
<h3>原因</h3>
<p>十进制字面常量具有一个很好的属性，即所有的十进制字面常量都是正的，而十六进制或是八进制字面常量并不具备这个属性。</p>
<p>要想书写一个负的十进制常量，可以使用一元取反操作符（-）连接一个十进制字面常量。以这种方式，你可以用十进制来书写任何int或long型的数值，不管它是正的还是负的，并且负的十进制常数可以很明确地用一个减号符号来标识。</p>
<p>但是十六进制和八进制字面常量并不是这么回事，它们可以具有正的以及负的数值。如果十六进制和八进制字面常量的最高位被置位了，那么它们就是负数。在这个程序中，数字0xcafebabe是一个int常量，它的最高位被置位了，所以它是一个负数。它等于十进制数值-889275714。</p>
<p>该程序执行的这个加法是一种"混合类型的计算（mixed-type computation）。左操作数是 long 类型的，而右操作数是 int 类型的。为了执行该计算，Java将int类型的数值用拓宽原始类型转换提升为一个long类型，然后对两个long类型数值相加。因为int是一个有符号的整数类型，所以这个转换执行的是符合扩展，它将负的int类型的数值提升为一个在数值上相等的long类型数值。</p>
<h3>解决办法</h3>
<pre xml:space="preserve">
<code>System.out.println(Long.toHexString(0x100000000L + 0xcafebabe<strong>L</strong>));</code>
</pre>
<p>这个加法的右操作数0xcafebabe被提升为了long类型的数值0xffffffffcafebabeL。这个数值之后被加到了左操作数0x100000000L上。当作为int类型来被审视时，经过符号扩展之后的右操作数的高32位是-1，而左操作数的高32位是1，将这两个数值相加就得到了0，这也就解释了为什么在程序输出中前导1丢失了。</p>
<h2>第 5 天问题的总结</h2>
<p>这个题给我们的教训是：<strong>混合类型的计算可能会产生混淆，尤其是十六进制和八进制字面常量无需显式的减号符号就可以表示负的数值。为了避免这种窘境，通常最好是避免混合类型的计算</strong>。</p>
<p>对于语言的设计者们来说，应该考虑支持无符号的整数类型，从而根除符号扩展的可能性。可能会有这样的争辩：负的十六进制和八进制字面常量应该被禁用，但是这可能会挫伤程序员，他们经常使用十六进制字面常量来表示那些符号没有任何重要含义的数值。</p>
<hr id="hr"/>
<h2>今天的问题</h2>
<p>转型被用来将一个数值从一种类型转换到另一种类型。下面的程序连续使用了三个转型。那么它到底会打印出什么呢？</p>
<pre xml:space="preserve">
<code class="java"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Multicast</span> {</span>
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args) {
        System.out.println((<span class="keyword">int</span>) (<span class="keyword">char</span>) (<span class="keyword">byte</span>) -<span class="number">1</span>);
    }
}
</code>
</pre>
<img src ="http://www.blogjava.net/fourlee/aggbug/201128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-17 17:52 <a href="http://www.blogjava.net/fourlee/archive/2008/05/17/201128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第 5 天： 解答 -- 眼花缭乱， 问题 -- 16进制的趣事</title><link>http://www.blogjava.net/fourlee/archive/2008/05/17/201025.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Fri, 16 May 2008 16:33:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/17/201025.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/201025.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/17/201025.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/201025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/201025.html</trackback:ping><description><![CDATA[
<h2>第 4 天的问题 -- 眼花缭乱</h2>
<p>它又会打印出什么呢？</p>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">Elementary</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args){
        System.out.println(<span class="number">12345</span> + <span class="number">5432</span>l);
    }
}
</code>
</pre>
<h2>第 4 天问题的解答</h2>
<p>这个题看起来似乎太简单了。结果不就是66666吗？</p>
<p>遗憾的告诉你，结果是17777。</p>
<h3>原因</h3>
<p>事物往往有别于它的表象。就以这个问题为例，它并没有打印出我们想要的输出。请仔细观察 + 操作符的两个操作数， 我们是将一个int类型的12345加到了long类型的5432l上。请注意左操作数开头的数字1和右操作数结尾的小写字母l之间的细微差异。 数字1的水平笔划（称为"臂（arm）"）和垂直笔划（称为"茎（stem）"）之间是一个锐角，而与此相对照的是，小写字母l的臂和茎之间是一个直角。</p>
<h3>解决办法</h3>
<pre>
<code class="java">System.out.println(<span class="number">12345</span>+<span class="number">5432</span>L);</code>
</pre>
<p>用大写的L替换小写字母l。</p>
<h2>第 4 天问题的总结</h2>
<p>在你大喊"恶心！"之前，你应该注意到这个问题确实已经引起了混乱，这里确实有一个教训： <strong>在long型字面常量中，一定要用大写的L，千万不要用小写的l</strong>。这样就可以完全掐断这个谜题所产生的混乱的源头。</p>
<p>相类似的，要避免使用单独的一个l字母作为变量名。例如，我们很难通过观察下面的代码段来判断它到底是打印出列表l还是数字1。</p>
<pre>
<code class="java"><span class="comment">//不良代码-使用了l作为变量名</span>
List l = <span class="keyword">new</span> ArrayList&lt;String&gt;();
l.add(<span class="string">"Foo"</span>);
System.out.println(<span class="number">1</span>);</code>
</pre>
<p>也许当初允许用小写的l来编写long型字面常量本身就是一个错误。</p>
<hr id="hr"/>
<h2>今天的问题</h2>
<p>下面的程序是对两个十六进制（hex）字面常量进行相加，然后打印出十六进制的结果。这个程序会打印出什么呢？</p>
<pre>
<code class="java"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">JoyOfHex</span> {</span>
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args) {
        System.out.println(Long.toHexString(<span class="number">0x100000000L</span> + <span class="number">0xcafebabe</span>));
    }
}</code>
</pre>
<img src ="http://www.blogjava.net/fourlee/aggbug/201025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-17 00:33 <a href="http://www.blogjava.net/fourlee/archive/2008/05/17/201025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第 4 天： 解答 -- 长整数， 问题 -- 眼花缭乱</title><link>http://www.blogjava.net/fourlee/archive/2008/05/16/201018.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Fri, 16 May 2008 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/16/201018.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/201018.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/16/201018.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/201018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/201018.html</trackback:ping><description><![CDATA[
<h2>第 3 天的问题</h2>
<p>被除数表示的是一天里的微秒数；而除数表示的是一天里的毫秒数。这个程序会打印出什么呢？</p>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">LongDivision</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]){ 
        <span class="keyword">final</span> <span class="keyword">long</span> MICROS_PER_DAY = <span class="number">24</span> * <span class="number">60</span> * <span class="number">60</span> * <span class="number">1000</span> * <span class="number">1000</span>; 
        <span class="keyword">final</span> <span class="keyword">long</span> MILLIS_PER_DAY = <span class="number">24</span> * <span class="number">60</span> * <span class="number">60</span> * <span class="number">1000</span>; 
        System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY); 
    } 
} 
</code>
</pre>
<h2>第 3 天问题的解答</h2>
<p>这个题看起来相当直观。每天的毫秒数和每天的微秒数都是常量。为清楚起见，它们都被表示成积的形式。你可能想都没想，就脱口而出，结果是1000。 遗憾的是，它打印的是5。这里到底发生了什么呢？</p>
<h3>原因</h3>
<p>问题在于常数MICROS_PER_DAY的计算"确实"溢出了。尽管计算的结果适合放入long中，并且其空间还有富余，但是这个结果并不适合放入int中。 这个计算完全是以int运算来执行的，并且只有在运算完成之后，其结果才被提升到long，而此时已经太迟了：计算已经溢出了， 它返回的是一个小了200倍的数值。从int提升到long是一种拓宽原始类型转换（widening primitive conversion）， 它保留了（不正确的）数值。这个值之后被MILLIS_PER_DAY整除，而MILLIS_PER_DAY的计算是正确的，因为它适合int运算。这样整除的结果就得到了5</p>
<p>那么为什么计算会是以int运算来执行的呢？因为所有乘在一起的因子都是int数值。当你将两个int数值相乘时， 你将得到另一个int数值。<strong>Java不具有目标确定类型的特性，这是一种语言特性，其含义是指存储结果的变量的类型会影响到计算所使用的类型</strong></p>
<h3>解决办法</h3>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">LongDivision</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[ ]){
        <span class="keyword">final</span> <span class="keyword">long</span> MICROS_PER_DAY = <span class="number">24</span><strong>L</strong> * <span class="number">60</span> * <span class="number">60</span> * <span class="number">1000</span> * <span class="number">1000</span>;
        <span class="keyword">final</span> <span class="keyword">long</span> MILLIS_PER_DAY = <span class="number">24</span><strong>L</strong> * <span class="number">60</span> * <span class="number">60</span> * <span class="number">1000</span>;
        System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
    }
}
</code>
</pre>
<p>通过使用long常量来替代int常量作为每一个乘积的第一个因子，我们就可以很容易地订正这个程序。这样做可以强制表达式中所有的后续计算都用long运作来完成。 尽管这么做只在MICROS_PER_DAY表达式中是必需的，但是在两个乘积中都这么做是一种很好的方式。相似地，使用long作为乘积的"第一个"数值也并不总是必需的， 但是这么做也是一种很好的形式。在两个计算中都以long数值开始可以很清楚地表明它们都不会溢出。下面的程序将打印出我们所期望的1000</p>
<h2>第 3 天问题的总结</h2>
<p>这个教训很简单：<strong>当你在操作很大的数字时，千万要提防溢出</strong>--它可是一个缄默杀手。 即使用来保存结果的变量已显得足够大，也并不意味着要产生结果的计算具有正确的类型。当你拿不准时，就使用long运算来执行整个计算。</p>
<p>语言设计者从中可以吸取的教训是：也许降低缄默溢出产生的可能性确实是值得做的一件事。这可以通过对不会产生缄默溢出的运算提供支持来实现。 程序可以抛出一个异常而不是直接溢出，就像Ada所作的那样，或者它们可以在需要的时候自动地切换到一个更大的内部表示上以防止溢出，就像Lisp所作的那样。 这两种方式都可能会遭受与其相关的性能方面的损失。 降低缄默溢出的另一种方式是支持目标确定类型，但是这么做会显著地增加类型系统的复杂度</p>
<hr id="hr"/>
<h2>今天的问题</h2>
<p>它又会打印出什么呢？</p>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">Elementary</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String[] args){
        System.out.println(<span class="number">12345</span>+<span class="number">5432</span>l);
    }
}
</code>
</pre>
<img src ="http://www.blogjava.net/fourlee/aggbug/201018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 23:41 <a href="http://www.blogjava.net/fourlee/archive/2008/05/16/201018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第 3 天： 解答 -- 找零钱， 问题 -- 长整数</title><link>http://www.blogjava.net/fourlee/archive/2008/05/16/201016.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Fri, 16 May 2008 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/16/201016.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/201016.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/16/201016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/201016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/201016.html</trackback:ping><description><![CDATA[
<h2>第 2 天的问题</h2>
<p>请考虑下面这段话所描述的问题：</p>
<p>小明在超市购买了一个价值￥1.10的东西，但是他钱包中只有两元一张的钞票。如果他用一张两元的钞票支付，那么应该找给他多少零钱呢？</p>
<p>下面是一个试图解决上述问题的程序，它会打印出什么呢？</p>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">Change</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]){
        System.out.println(<span class="number">2.00</span> - <span class="number">1.10</span>);
    }
}
</code>
</pre>
<h2>第 2 天问题的解答</h2>
<p>你可能会说，这不是很简单嘛！输出0.90。但实际的输出确实：0.8999999999999999。</p>
<h3>原因</h3>
<p>一、程序如何才能知道你想要打印小数点后两位小数呢？</p>
<p>JDK API文档中关于Double.toString的部分指出：</p>
<blockquote>
<p>Double.toString的返回值，是足以将double类型的值与最靠近它的临近值区分出来的最短的小数，它在小数点之前和之后都至少有一位。</p>
</blockquote>
<p>因此，看起来，该程序应该打印0.9是合理的。</p>
<p>二、并不是所有的小数都可以用二进制浮点数来精确表示的。</p>
<p>问题在于1.1这个数字不能被精确表示成为一个double，因此它被表示成为最接近它的double值。 该程序从2中减去的就是这个值。 遗憾的是，这个计算的结果并不是最接近0.9的double值。 表示结果的double值的最短表示就是你所看到的打印出来的那个可恶的数字。</p>
<h2>第 2 天问题的解决办法</h2>
<h3>方法一</h3>
<pre>
<code class="java">
<span class="comment">//拙劣的解决方案--仍旧是使用二进制浮点数</span>
System.out.printf(<span class="string">"%.2f%n"</span>,<span class="number">2.00</span> - <span class="number">1.10</span>);</code>
</pre>
<p>这条语句打印的是正确的结果，但是这并不表示它就是对底层问题的通用解决方案。它使用的仍旧是二进制浮点数的double运算。 浮点运算在一个范围很广的值域上提供了很好的近似，但是它通常不能产生精确的结果。 <strong>二进制浮点对于货币计算是非常不适合的</strong>，因为它不可能将0.1--或者10的其它任何次负幂--精确表示为一个长度有限的二进制小数</p>
<h3>方法二</h3>
<pre>
<code class="java">System.out.println((<span class="number">200</span> - <span class="number">110</span>) + <span class="string">"分"</span>);</code>
</pre>
<p>这是在Java中一种简单的解决方法。在Java标准库中，有一个类似的范例Date类，Date类的对于时间的内部表示就是一个以毫秒为单位的long整数。 对于像货币这样的数值，可以用int或long来表示。如果你采纳了解决方法，<strong>请确保该整数类型大到足够表示在程序中你将要用到的所有值</strong>。</p>
<h3>方法三</h3>
<pre>
<code class="java">
<span class="keyword">import</span> java.math.BigDecimal;

<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">Change1</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]){
        System.out.println(<span class="keyword">new</span> BigDecimal(<span class="string">"2.00"</span>).subtract(<span class="keyword">new</span> BigDecimal(<span class="string">"1.10"</span>)));
    }
}
</code>
</pre>
<p>解决该问题的另一种方式是使用执行精确小数运算的BigDecimal。 <strong>这里要告诫你一点： 一定要用BigDecimal(String)构造器，而千万不要用BigDecimal(double)。 后一个构造器将用它的参数的"精确"值来创建一个实例：new BigDecimal(1.1)将返回一个表示1.100000000000000055511151231257827021181583404541015625 的BigDecimal。</strong>
        </p>
<p>这个版本并不是十分地完美，因为Java并没有为BigDecimal提供任何语言上的支持。原因：</p>
<ul>
<li>使用BigDecimal的计算很有可能比那些使用原始类型的计算要慢一些，对某些大量使用小数计算的程序来说，这可能会成为问题，而对大多数程序来说，这显得一点也不重要。</li>
<li>Java不允许运算符重载。使得代码不够直观。</li>
</ul>
<h2>总结</h2>
<p>在需要精确答案的地方，要避免使用float和double。</p>
<p>对于货币计算，要使用int、long或BigDecimal。</p>
<p>对于语言设计者来说，应该考虑对小数运算提供语言支持。可以支持下列方式中的一种。</p>
<ul>
<li>提供对操作符重载的有限支持， 以使得运算符可以被塑造为能够对数值引用类型起作用， 例如BigDecimal。</li>
<li>提供原始的小数类型，就像 COBOL 与 PL/I 所作的一样。</li>
</ul>
<hr id="hr"/>
<h2>今天的问题</h2>
<p>被除数表示的是一天里的微秒数；而除数表示的是一天里的毫秒数。这个程序会打印出什么呢？</p>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">LongDivision</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]){ 
        <span class="keyword">final</span> <span class="keyword">long</span> MICROS_PER_DAY = <span class="number">24</span> * <span class="number">60</span> * <span class="number">60</span> * <span class="number">1000</span> * <span class="number">1000</span>; 
        <span class="keyword">final</span> <span class="keyword">long</span> MILLIS_PER_DAY = <span class="number">24</span> * <span class="number">60</span> * <span class="number">60</span> * <span class="number">1000</span>; 
        System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY); 
    } 
} 
</code>
</pre>
<img src ="http://www.blogjava.net/fourlee/aggbug/201016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 22:50 <a href="http://www.blogjava.net/fourlee/archive/2008/05/16/201016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第 2 天： 解答 -- 判断是否为奇数， 问题 -- 找零钱</title><link>http://www.blogjava.net/fourlee/archive/2008/05/16/200996.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Fri, 16 May 2008 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/16/200996.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/200996.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/16/200996.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/200996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/200996.html</trackback:ping><description><![CDATA[
<h2>第 1 天的问题</h2>
<p>下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转吗？</p>
<pre>
<code class="java">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> odd(<span class="keyword">int</span> number) {
        <span class="keyword">return</span> number % <span class="number">2</span> == <span class="number">1</span>;
    }
</code>
</pre>
<h2>第 1 天问题的解答</h2>
<p>有1/4的情况下，答案是错误的。比如：odd(-3) 表达式得到的结果就是 fasle。对于所有的负奇数，上面的方法都会得到错误的结果。</p>
<h3>原因</h3>
<p>问题的原因在于求余操作符(%)，在Java中该操作符被定义为</p>
<blockquote>
<p>对于所有的 int 数值 a 和所有的非零 int 数值 b，都满足下面的恒等式
<br/>
(a / b) * b + (a % b) == a</p>
</blockquote>
<p>换句话说，(a % b) = a - (a / b) * b</p>
<p>由数学推理运算可知，a % b 的符号有操作数a决定（要么为0，要么和a一致）。也就是说， -5 % 3 =&gt; -2， -5 % -3 =&gt; -2。</p>
<p>因此，对于所有的负奇数n， n % 2 =&gt; -1。问题中的方法自然有问题啦。</p>
<h3>解决办法</h3>
<p>要判断一个整数是否为奇数的解决办法有两种。</p>
<pre>
<code class="java">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> odd(<span class="keyword">int</span> number) {
        <span class="keyword">return</span> number % <span class="number">2</span> != <span class="number">0</span>;
    }
</code>
</pre>
<pre>
<code class="java">    <span class="javadoc">/**
     * 这种方法的性能更好。
     */</span>
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> odd(<span class="keyword">int</span> number) {
        <span class="keyword">return</span> (number &amp; <span class="number">1</span>) != <span class="number">0</span>;
    }
</code>
</pre>
<h2>总结</h2>
<p>
          <strong>无论你何时使用到了取余操作符，都要考虑到操作数和结果的符号。</strong>
        </p>
<p>该操作符的行为在其操作数非负时是一目了然的，但是当一个或两个操作数都是负数时，它的行为就不那么显而易见了。</p>
<hr id="hr"/>
<h2>今天的问题</h2>
<p>请考虑下面这段话所描述的问题：</p>
<p>小明在超市购买了一个价值￥1.10的东西，但是他钱包中只有两元一张的钞票。如果他用一张两元的钞票支付，那么应该找给他多少零钱呢？</p>
<p>下面是一个试图解决上述问题的程序，它会打印出什么呢？</p>
<pre>
<code class="java">
<span class="keyword">public</span> <span class="keyword">class</span> <span class="title">Change</span>{
    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]){
        System.out.println(<span class="number">2.00</span> - <span class="number">1.10</span>);
    }
}
</code>
</pre>
<img src ="http://www.blogjava.net/fourlee/aggbug/200996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 21:38 <a href="http://www.blogjava.net/fourlee/archive/2008/05/16/200996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第 1 天： 判断是否为奇数</title><link>http://www.blogjava.net/fourlee/archive/2008/05/16/200989.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Fri, 16 May 2008 12:53:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/05/16/200989.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/200989.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/05/16/200989.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/200989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/200989.html</trackback:ping><description><![CDATA[
<p>
          <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转吗？</span>
        </p>
<pre>
<code class="java">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> odd(<span class="keyword">int</span> number) {
        <span class="keyword">return</span> number % <span class="number">2</span> == <span class="number">1</span>;
    }
</code>
</pre>
<img src ="http://www.blogjava.net/fourlee/aggbug/200989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 20:53 <a href="http://www.blogjava.net/fourlee/archive/2008/05/16/200989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP(一)</title><link>http://www.blogjava.net/fourlee/archive/2008/02/04/179305.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Mon, 04 Feb 2008 10:57:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/02/04/179305.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/179305.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/02/04/179305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/179305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/179305.html</trackback:ping><description><![CDATA[<div class="main"> <h2>HTTP</h2> <p>HTTP就是一种请求/响应模式。</p> <h2>HTTP事务</h2> <ol> <li>连接 建立和服务器的连接  <li>查询 请求服务器上的资源  <li>处理 服务器接受和处理请求  <li>响应 服务器将请求的资源发送回客户端  <li>终止 事务完成后，关闭连接，除非客户机与服务器之间立即发生另一事务。 </li></ol> <h2>用telnet程序验证这个过程</h2> <h3>连接</h3> <div class="console_box"> <div class="console" style="height: 32px"> <p>telnet www.baidu.com 80</p></div></div> <p>80是HTTP协议默认的端口。</p> <h3>查询</h3> <div class="console_box"> <div class="console" style="height: 48px"> <p>GET / HTTP/1.0↙<br>↙</p></div></div> <p>↙表示回车。</p> <table width="346" border="0"> <tbody> <tr> <th scope="col" width="181">GET</th> <th scope="col" width="88">/</th> <th scope="col" width="63">HTTP/1.0</th></tr> <tr> <td>查询方法名，有GET和POST<br>GET方法不支持消息体</td> <td>服务器资源</td> <td>HTTP版本</td></tr></tbody></table> <p>在telnet中测试HTTP的POST是很麻烦的事。这里就不讲了，何况GET和POST很类似。</p> <h3>处理</h3> <p>Baidu服务器根据请求，处理请求。如果用的是Servlet，就是执行那个Servlet的doGet方法。</p> <h3>响应</h3> <div class="console_box"> <div class="console" id="html"> <p><br><br>HTTP/1.1 200 OK<br>Date: Sun, 03 Feb 2008 08:08:44 GMT<br>Server: BWS/1.0<br>Content-Length: 3022<br>Content-Type: text/html<br>Cache-Control: private<br>Expires: Sun, 03 Feb 2008 08:08:44 GMT<br>Set-Cookie: BAIDUID=2BB1B837C8EC6794A132C5D8DDD76721:FG=1; expires=Sun, 03-Feb-38 08:08:44 GMT; path=/; domain=.baidu.com<br>P3P: CP=" OTI DSP COR IVA OUR IND COM "</p> <p>&lt;html&gt;&lt;head&gt;&lt;meta http-equiv=Content-Type content="text/html;charset=gb2312"&gt;&lt;title&gt;百度一下，你就知道 &lt;/title&gt;&lt;style&gt;body{margin:4px 0}p{margin:0;padding:0}img{border:0}td,p,#u{font-size:12px}#b,#u,#l td,a{font-family:arial}#kw{font:16px Verdana;height:1.78em;padding-top:2px}#b{height:30px;padding-top:4px}#b,#b a{color:#77c;font-size:12px}#u{padding-right:10px;line-height:19px;text-align:right;margin-bottom:3px !important;margin-bottom:10px}#sb{height:2em;width:5.6em}#km{height:50px}#km a{font-family:宋体}#l{margin-bottom:5px}#m{margin-left:100px;width:22.1em;text-align:center}p,#b,table{width:600px;border:0}#sb,#km,#l,#m{font-size:14px}#m a,#m b{margin-right:1.14em}a{color:#00c}a:active{color:#f60}&lt;/style&gt;&lt;/head&gt;<br>&lt;body&gt;&lt;div id=u&gt;&lt;/div&gt;&lt;center&gt;&lt;a href=http://hi.baidu.com/baidu target=_blank&gt;&lt;img src=http://www.baidu.com/img/logo.gif width=174 height=59 alt="点此进入 百度空间"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table cellpadding=0 cellspacing=0 id=l&gt;&lt;tr&gt;&lt;td align=left&gt;&lt;div id=m&gt;&lt;a onclick=s(this) href=http://news.baidu.com&gt;新&amp;nbsp;闻&lt;/a&gt;&lt;b&gt;网&amp;nbsp;页&lt;/b&gt;&lt;a onclick=s(this) href=http://tieba.baidu.com&gt;贴&amp;nbsp;吧&lt;/a&gt;&lt;a onclick=s(this) href=http://zhidao.baidu.com&gt;知&amp;nbsp;道&lt;/a&gt;&lt;a onclick=s(this) href=http://mp3.baidu.com&gt;MP3&lt;/a&gt;&lt;a onclick=s(this) href=http://image.baidu.com&gt;图&amp;nbsp;片&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br>&lt;table cellpadding=0 cellspacing=0&gt;&lt;tr valign=top&gt;&lt;td width=92&gt;&lt;/td&gt;&lt;td height=62 nowrap&gt;&lt;form name=f action=/s&gt;&lt;input type=text name=wd id=kw size=36 maxlength=100&gt;&lt;script&gt;var w=document.f.wd;w.focus();document.getElementById("u").innerHTML='&lt;a href="http://passport.baidu.com/?login&amp;tpl=mn&amp;u='+escape(location.href)+'"&gt;登录&lt;/a&gt;';function s(o){if(w.value.length&gt;0){var h=o.href;var q=encodeURIComponent(w.value);if(h.indexOf("q=")!=-1){o.href=h.replace(new RegExp("q=[^&amp;$]*"),"q="+q)}else{o.href+="?q="+q}}};(function(){if(new RegExp("q=([^&amp;]+)").test(location.search)){w.value=decodeURIComponent(RegExp.$1)}})()&lt;/script&gt;&lt;input type=hidden name=cl value=3&gt; &lt;input type=submit value=百度一下 id=sb&gt;&lt;br&gt;&lt;br&gt;&lt;/form&gt;&lt;/td&gt;&lt;td width=100&gt;&lt;a href=/search/jiqiao.html&gt;帮助&lt;/a&gt;&lt;br&gt;&lt;a href=/gaoji/advanced.html&gt;高级&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br>&lt;p id=km&gt;&amp;nbsp;&lt;a href=http://hi.baidu.com&gt;空间&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=http://www.baidu.com/more&gt;更多&gt;&gt;&lt;/a&gt;&lt;/p&gt;<br>&lt;p style=height:60px&gt;&lt;/p&gt;<br>&lt;p style=height:30px&gt;&lt;a onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.baidu.com')" href=http://utility.baidu.com/traf/click.php?id=215&amp;url=http://www.baidu.com&gt;把百度设为首页&lt;/a&gt;&lt;/p&gt;&lt;p style=height:14px&gt;&lt;a href=http://jingjia.baidu.com&gt;企业推广&lt;/a&gt; | &lt;a href=http://top.baidu.com&gt;搜索风云榜&lt;/a&gt; | &lt;a href=/home.html&gt;关于百度&lt;/a&gt; | &lt;a href=http://ir.baidu.com&gt;About Baidu&lt;/a&gt;&lt;/p&gt;&lt;p id=b&gt;&amp;copy;2008 Baidu &lt;a href=http://www.baidu.com/duty&gt;使用百度前必读&lt;/a&gt; &lt;a href=http://www.miibeian.gov.cn target=_blank&gt;京ICP证030173号&lt;/a&gt; &lt;a href=http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001092500412&gt;&lt;img src=http://gimg.baidu.com/img/gs.gif&gt;&lt;/a&gt;&lt;/p&gt;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&lt;!--4eca38de351397c2--&gt;</p> <p>失去了跟主机的连接。<br></p></div></div> <h3>终止</h3> <p>用telnet连接web服务器，连接会立马终止。如果用浏览器访问，浏览器会取得与页面有关的所有图像、样式表和脚本文件等，才终止连接。</p> <h2>HTTP查询和响应的消息格式</h2> <p>HTTP查询和响应的消息格式差不多。</p> <table border="0"> <tbody> <tr> <th scope="col">格式</th> <td scope="col" height="105"> <div class="code" style="width: 300px">initliaze line<br>key1:value1<br>key2:value2<br><br>[Optional message body]</div></td></tr> <tr> <th scope="col">查询格式</th> <td scope="col"> <div class="code" style="width: 300px">GET /newaddr?name=jack&amp;email=2 HTTP/1.0<br>accept:*/*<br>accept-language:zh-cn<br>... ...<br><br><br></div></td></tr> <tr> <th scope="col">响应格式<br>(具体见上面)</th> <td scope="col"> <div class="code" style="width: 300px">HTTP/1.1 200 OK<br>Date: Sun, 03 Feb 2008 08:08:44 GMT<br>Server: BWS/1.0<br>... ...<br><br>&lt;html&gt;...&lt;/html&gt;</div></td></tr></tbody></table> <h2>后记</h2> <p>HTTP定义了查询和响应的消息格式。但每个浏览器和服务器在这种格式下，有自己定义的内容。服务器通过浏览器请求的消息，知道浏览器具体是什么型号的，是什么操作系统。这些具体怎么做的，下文分解</p></div><img src ="http://www.blogjava.net/fourlee/aggbug/179305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-02-04 18:57 <a href="http://www.blogjava.net/fourlee/archive/2008/02/04/179305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS实现的控制台效果</title><link>http://www.blogjava.net/fourlee/archive/2008/02/04/179302.html</link><dc:creator>李四飞刀</dc:creator><author>李四飞刀</author><pubDate>Mon, 04 Feb 2008 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/fourlee/archive/2008/02/04/179302.html</guid><wfw:comment>http://www.blogjava.net/fourlee/comments/179302.html</wfw:comment><comments>http://www.blogjava.net/fourlee/archive/2008/02/04/179302.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/fourlee/comments/commentRss/179302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fourlee/services/trackbacks/179302.html</trackback:ping><description><![CDATA[<div class="main"> <h2>摘要</h2> <p>我们在写blog或写文档说明的时候，有时候说明在控制台中怎样使用，在windows xp/2000中就是cmd命令。 为了表达这种在控制台中的操作，我写了个 CSS来呈现效果。</p> <h2>需求和设计要求</h2> <ol> <li>在网页文档中(blog或用户手册)，呈现一个控制台的样式，有边框和标题栏，黑色背景。如下图  <li>这个控制台可以真实的控制台那样可以，在适当的时候，有上下或左右滚动条  <li>控制台里允许加入的元素有&lt;p&gt;块。  <li>为了区分控制台里的输入和输出字符串，分别可以用&lt;kbd&gt;和&lt;samp&gt;括起来，然后设置他们的CSS样式  <li>当前目录提示符，用&lt;span&gt;元素表达。  <li>&lt;kbd&gt;、&lt;samp&gt;和&lt;span&gt;元素只能包含在&lt;p&gt;元素中，不能直接在“控制台”中。 </li></ol> <p><img height="433" alt="控制台效果图" src="http://p.blog.csdn.net/images/p_blog_csdn_net/four_lee/363761/o_console_sample.png" width="670"></p> <h2>实现</h2> <ul> <li>控制台标题用背景图片实现  <li>因为同时有标题和滚动条，所以为了不让滚动条覆盖部分标题，控制台至少要用两个&lt;div&gt;来表达，一个表示控制台边框，一个表示控制台里内容  <li>控制台的宽度是固定的，高度有控制台的内容层表达 </li></ul> <h3>CSS</h3> <div class="code" style="width: 500px">@charset "utf-8";<br><br>/**<br>* Copyright (c) 李四 fourlee@live.cn<br>*/ <br><br>/* 控制台边框层 */<br>.console_box { <br>background: #000000 url(Command_heading.jpg) no-repeat;<br>width: 660px; /* windows 控制台默认宽度 */<br>margin: 0px;<br>padding-top: 23px; /* 控制台标题栏高度 */<br>padding-right: 0px;<br>padding-bottom: 0px;<br>padding-left: 0px;<br>border: 4px outset #FFFFFF;<br>}<br><br>/* 控制台内容层 */<br>.console_box .console {<br>background-color: #000000;<br>font-family: "Courier New", Courier, "宋体", monospace;<br>font-size: 12px;<br>color: #CCCCCC;<br>width: 656px;<br>height: 396px;<br>margin: 0px;<br>padding: 0px;<br>border: 2px inset #666666;<br>overflow: auto; /* 自动加入滚动条 */<br>}<br><br>.console_box .console p {<br>line-height: 120%;<br>margin: 0px;<br>padding-bottom: 1em; /* 段落下面留一空行的高度 */<br>padding-top: 0px;<br>padding-right: 0px;<br>padding-left: 0px;<br>}<br></div> <h3>HTML</h3> <div class="code" style="width: 750px">&lt;div class="console_box"&gt;<br>&lt;div class="console" <strong>style="height:200px;"</strong>&gt;<br>&lt;p&gt;此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容此处显示 class "console_box" 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;p&gt;此处显示 class &amp;quot;console_box&amp;quot; 的内容&lt;/p&gt;<br>&lt;/div&gt;<br>&lt;/div&gt;</div> <p>可以在&lt;div class="console" ...&gt;中设置高度来设置控制台的高度。</p> <h2>后记</h2> <p>一个控制台的效果基本出来了。在IE6和Firefox中测试通过。还有工作可做</p> <ul> <li>为了区分控制台中的输入和输出，建议用&lt;kbd&gt;和&lt;samp&gt;标签，并设置这写标签的CSS样式。  <li>更改标题栏图标和设置一下CSS样式，就可以实现Linux或Mac等操作系统中的控制台效果  <li>还有一些没遇到和想到的问题 </li></ul> <p>这是我第一次用Blog，还不知道上传。这些源代码和图片的，请留下EMail，或等我熟悉了Blog再下载。</p></div><img src ="http://www.blogjava.net/fourlee/aggbug/179302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fourlee/" target="_blank">李四飞刀</a> 2008-02-04 17:45 <a href="http://www.blogjava.net/fourlee/archive/2008/02/04/179302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>