ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品人久久电影,亚洲午夜精品久久久久久久久久久久 ,91这里只有精品http://www.aygfsteel.com/fourlee/我就是我åQŒæˆ‘不是我,我还是我zh-cnTue, 10 Jun 2025 06:36:15 GMTTue, 10 Jun 2025 06:36:15 GMT60Struts 2 (1) - setuphttp://www.aygfsteel.com/fourlee/archive/2008/05/21/201792.html李四飞刀李四飞刀Tue, 20 May 2008 17:27:00 GMThttp://www.aygfsteel.com/fourlee/archive/2008/05/21/201792.htmlhttp://www.aygfsteel.com/fourlee/comments/201792.htmlhttp://www.aygfsteel.com/fourlee/archive/2008/05/21/201792.html#Feedback0http://www.aygfsteel.com/fourlee/comments/commentRss/201792.htmlhttp://www.aygfsteel.com/fourlee/services/trackbacks/201792.html开发环境:(x¨¬)eclipse 3.3 jeeç‰?/p>
  1. 下蝲
  2. 新徏web project
  3. 复制*.jaræ–‡äšg到l(f¨¡)ib目录
  4. 修改web.xmlæ–‡äšg
  5. 新徏òq¶ç¼–辑struts.xmlæ–‡äšg
  6. HelloAction

下蝲

Struts2的下载地址是:(x¨¬) http://struts.apache.org/download.cgi

åˆ°çŽ°åœ¨äØ“(f¨´)止:(x¨¬)最新版本是2.0.11.1。把下蝲后的文äšg解压¾~©åˆ°ä¸€ä¸ªç›®å½•中。在解压¾~©åŽçš„apps目录中,有个struts2-blank-2.0.11.war。这是搭å»ÞZ¸€ä¸ªæ–°çš„struts2™å¹ç›®çš„很好的参考。本文就参考这个ã€?/p>

新徏web工程

新徏一个web project。这里假设project 名称为struts2

复制*.jaræ–‡äšg

臛_°‘需è¦?个jaræ–‡äšgã€?/p>

struts2.jpg

修改web.xmlæ–‡äšg

在web.xmlæ–‡äšg中加入下面的内容。(在web-app节点中)(j¨ª)

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

新徏òq¶ç¼–辑struts.xmlæ–‡äšg

struts.xmlæ–‡äšg的骨架是下面˜q™æ ·çš„:(x¨¬)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
    <package name="struts" extends="struts-default">

        <!--action is here-->

    </package>
</struts>

åˆ°çŽ°åœ¨äØ“(f¨´)止,struts环境已经搭徏好了(ji¨£n)。下面可以编写一个HelloAction来运行测试一下环境ã€?/p>

HelloAction

Action的一般流½E‹æ˜¯˜q™æ ·çš?/p>

  1. input.jspæ–‡äšg
  2. 配置a(ch¨£n)ctionã€?/li>
  3. 执行HelloAction
  4. 辑ֈ°result.jspæ–‡äšg


李四飞刀 2008-05-21 01:27 发表评论
]]>
½W?6 天:(x¨¬) 解答 -- 16˜q›åˆ¶çš„趣事, 问题 -- 转型http://www.aygfsteel.com/fourlee/archive/2008/05/17/201128.html李四飞刀李四飞刀Sat, 17 May 2008 09:52:00 GMThttp://www.aygfsteel.com/fourlee/archive/2008/05/17/201128.htmlhttp://www.aygfsteel.com/fourlee/comments/201128.htmlhttp://www.aygfsteel.com/fourlee/archive/2008/05/17/201128.html#Feedback2http://www.aygfsteel.com/fourlee/comments/commentRss/201128.htmlhttp://www.aygfsteel.com/fourlee/services/trackbacks/201128.html½W?5 天的问题

下面的程序是对两个十六进åˆÓž¼ˆhexåQ‰å­—面常量进行相加,然后打印出十六进制的¾l“果。这个程序会(x¨¬)打印å‡ÞZ»€ä¹ˆå‘¢åQ?/p>

public class JoyOfHex {
    public static void main(String[] args) {
        System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));
    }
}

½W?5 天问题的解答

看è“v来很明显åQŒè¯¥½E‹åºåº”该打印å‡?cafebabe。毕竟,˜q™ç¡®å®žå°±æ˜¯åå…­è¿›åˆ¶æ•°å­?0000000016与cafebabe16的和。该½E‹åºä½¿ç”¨çš„æ˜¯long型运½Ž—,它可以支æŒ?6位十六进制数åQŒå› æ­¤è¿½Ž—溢出是不可能的ã€?/p>

遗憾的告诉你åQŒç»“果是cafebabeåQŒåƈ没有ä»ÖM½•前导çš?。这个输å‡?gu¨®)™¡¨½Cºçš„æ˜¯æ­£¼‹®ç»“果的ä½?2位,但是不知何故åQŒç¬¬33位丢å¤×ƒº†(ji¨£n)ã€?/p>

原因

十进制字面常量具有一个很好的属性,åÏx(ch¨®ng)‰€æœ‰çš„十进制字面常量都是正的,而十六进制或是八˜q›åˆ¶å­—面帔R‡òq¶ä¸å…·å¤‡˜q™ä¸ªå±žæ€§ã€?/p>

要想书写一个负的十˜q›åˆ¶å¸”R‡åQŒå¯ä»¥ä‹É用一元取反操作符åQ?åQ‰è¿žæŽ¥ä¸€ä¸ªå˜q›åˆ¶å­—面帔R‡ã€‚以˜q™ç§æ–¹å¼åQŒä½ å¯ä»¥ç”¨å˜q›åˆ¶æ¥ä¹¦å†™ä“Q何int或long型的数å€û|¼Œä¸ç®¡å®ƒæ˜¯æ­£çš„˜q˜æ˜¯è´Ÿçš„åQŒåƈ且负的十˜q›åˆ¶å¸¸æ•°å¯ä»¥å¾ˆæ˜Ž¼‹®åœ°ç”¨ä¸€ä¸ªå‡åïL(f¨¥ng)¬¦åäh¥æ ‡è¯†ã€?/p>

但是十六˜q›åˆ¶å’Œå…«˜q›åˆ¶å­—面帔R‡òq¶ä¸æ˜¯è¿™ä¹ˆå›žäº‹ï¼Œå®ƒä»¬å¯ä»¥å…ähœ‰æ­£çš„以及(qi¨¢ng)负的数倹{€‚如果十六进制和八进制字面常量的最高ä(sh¨´)½è¢«ç½®ä½äº†(ji¨£n)åQŒé‚£ä¹ˆå®ƒä»¬å°±æ˜¯è´Ÿæ•°ã€‚在˜q™ä¸ª½E‹åºä¸­ï¼Œæ•°å­—0xcafebabe是一个int帔R‡åQŒå®ƒçš„æœ€é«˜ä(sh¨´)½è¢«ç½®ä½äº†(ji¨£n)åQŒæ‰€ä»¥å®ƒæ˜¯ä¸€ä¸ªè´Ÿæ•°ã€‚它½{‰äºŽåè¿›åˆ¶æ•°å€?889275714ã€?/p>

该程序执行的˜q™ä¸ªåŠ æ³•æ˜¯ä¸€¿U?混合¾cÕdž‹çš„计½Ž—(mixed-type computationåQ‰ã€‚左操作数是 long ¾cÕdž‹çš„,而右操作数是 int ¾cÕdž‹çš„ã€‚äØ“(f¨´)äº?ji¨£n)执行该计算åQŒJavaž®†int¾cÕdž‹çš„æ•°å€¼ç”¨æ‹“宽原始¾cÕdž‹è½¬æ¢æå‡ä¸ÞZ¸€ä¸ªlong¾cÕdž‹åQŒç„¶åŽå¯¹ä¸¤ä¸ªlong¾cÕdž‹æ•°å€¼ç›¸åŠ ã€‚å› ä¸ºint是一个有½W¦å·çš„æ•´æ•°ç±»åž‹ï¼Œæ‰€ä»¥è¿™ä¸ªè{换执行的是符合扩展,它将负的int¾cÕdž‹çš„æ•°å€¼æå‡äØ“(f¨´)一个在数å€ég¸Šç›¸ç­‰çš„long¾cÕdž‹æ•°å€¹{€?/p>

解决办法

System.out.println(Long.toHexString(0x100000000L + 0xcafebabeL));

˜q™ä¸ªåŠ æ³•çš„å³æ“ä½œæ•?xcafebabeè¢«æå‡äØ“(f¨´)äº?ji¨£n)long¾cÕdž‹çš„æ•°å€?xffffffffcafebabeL。这个数å€ég¹‹åŽè¢«åŠ åˆ°äº?ji¨£n)左操作æ?x100000000Lä¸Šã€‚å½“ä½œäØ“(f¨´)int¾cÕdž‹æ¥è¢«å®¡è§†æ—Óž¼Œ¾lè¿‡½W¦å·æ‰©å±•之后的右操作数的é«?2位是-1åQŒè€Œå·¦æ“ä½œæ•°çš„é«?2位是1åQŒå°†˜q™ä¸¤ä¸ªæ•°å€¼ç›¸åŠ å°±å¾—åˆ°äº?åQŒè¿™ä¹Ÿå°±è§£é‡Šäº?ji¨£n)äØ?f¨´)什么在½E‹åºè¾“出中前å¯?丢失äº?ji¨£n)ã€?/p>

½W?5 天问题的æ€È»“

˜q™ä¸ªé¢˜ç»™æˆ‘们的教训是åQ?strong>混合¾cÕdž‹çš„计½Ž—可能会(x¨¬)产生æ·äh·†åQŒå°¤å…¶æ˜¯åå…­˜q›åˆ¶å’Œå…«˜q›åˆ¶å­—面帔R‡æ— éœ€æ˜‘Ö¼çš„减åïL(f¨¥ng)¬¦å·å°±å¯ä»¥è¡¨ç¤ºè´Ÿçš„æ•°å€¹{€‚䨓(f¨´)äº?ji¨£n)避免这¿Uçª˜å¢ƒï¼Œé€šå¸¸æœ€å¥½æ˜¯é¿å…æ··åˆ¾cÕdž‹çš„计½Ž?/strong>ã€?/p>

对于语言的设计者们来说åQŒåº”该考虑支持无符åïL(f¨¥ng)š„æ•´æ•°¾cÕdž‹åQŒä»Žè€Œæ ¹é™¤ç¬¦åäh‰©å±•的可能性。可能会(x¨¬)有这æ ïL(f¨¥ng)š„争辩åQšè´Ÿçš„十六进制和八进制字面常量应该被¼›ç”¨åQŒä½†æ˜¯è¿™å¯èƒ½ä¼?x¨¬)挫伤程序员åQŒä»–ä»¬ç»å¸æ€‹É用十六进制字面常量来表示那些½W¦å·æ²¡æœ‰ä»ÖM½•重要含义的数倹{€?/p>


今天的问�/h2>

转型被用来将一个数å€ég»Žä¸€¿Uç±»åž‹è{换到另一¿Uç±»åž‹ã€‚下面的½E‹åº˜qžç®‹(hu¨¤)使用äº?ji¨£n)三个è{型。那么它到底ä¼?x¨¬)打印出什么呢åQ?/p>

public class Multicast {
    public static void main(String[] args) {
        System.out.println((int) (char) (byte) -1);
    }
}



]]>½W?5 天:(x¨¬) 解答 -- çœÆDб¾~­äØ•åQ?问题 -- 16˜q›åˆ¶çš„è¶£äº?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/fourlee/archive/2008/05/17/201025.html</guid><wfw:comment>http://www.aygfsteel.com/fourlee/comments/201025.html</wfw:comment><comments>http://www.aygfsteel.com/fourlee/archive/2008/05/17/201025.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/fourlee/comments/commentRss/201025.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/fourlee/services/trackbacks/201025.html</trackback:ping><description><![CDATA[ <h2>½W?4 天的问题 -- çœÆDб¾~­äØ•</h2> <p>它又ä¼?x¨¬)打印出什么呢åQ?/p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">class</span> <span id="wmqeeuq" class="title">Elementary</span>{ <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">void</span> main(String[] args){ System.out.println(<span id="wmqeeuq" class="number">12345</span> + <span id="wmqeeuq" class="number">5432</span>l); } } </code> </pre> <h2>½W?4 天问题的解答</h2> <p>˜q™ä¸ªé¢˜çœ‹èµäh¥ä¼ég¹Žå¤ªç®€å•了(ji¨£n)。结果不ž®±æ˜¯66666吗?</p> <p>遗憾的告诉你åQŒç»“果是17777ã€?/p> <h3>原因</h3> <p>事物往往有别于它的表象。就以这个问题ä(sh¨´)Ø“(f¨´)ä¾‹ï¼Œå®ƒåÆˆæ²¡æœ‰æ‰“å°å‡ºæˆ‘ä»¬æƒ³è¦çš„è¾“å‡ºã€‚è¯·ä»”ç»†è§‚å¯Ÿ + 操作½W¦çš„两个操作敎ͼŒ 我们是将一个int¾cÕdž‹çš?2345加到äº?ji¨£n)long¾cÕdž‹çš?432l上。请注意左操作数开头的数字1和右操作数结ž®„¡š„ž®å†™å­—母l之间的细微差异ã€?æ•°å­—1的水òq³ç¬”划(¿UîCØ“(f¨´)"臂(armåQ?åQ‰å’Œåž‚ç›´½W”划åQˆç§°ä¸?茎(stemåQ?åQ‰ä¹‹é—´æ˜¯ä¸€ä¸ªé”è§’,而与此相对照的是åQŒå°å†™å­—母l的臂和茎之间是一个直角ã€?/p> <h3>解决办法</h3> <pre> <code class="java">System.out.println(<span id="wmqeeuq" class="number">12345</span>+<span id="wmqeeuq" class="number">5432</span>L);</code> </pre> <p>用大写的L替换ž®å†™å­—母lã€?/p> <h2>½W?4 天问题的æ€È»“</h2> <p>在你大喊"恶心(j¨©)åQ?之前åQŒä½ åº”该注意到这个问题确实已¾lå¼•起了(ji¨£n)æ··äØ•åQŒè¿™é‡Œç¡®å®žæœ‰ä¸€ä¸ªæ•™è®­ï¼š(x¨¬) <strong>在long型字面常量中åQŒä¸€å®šè¦ç”¨å¤§å†™çš„LåQŒåƒä¸‡ä¸è¦ç”¨ž®å†™çš„l</strong>。这样就可以完全掐断˜q™ä¸ªè°œé¢˜æ‰€äº§ç”Ÿçš„æØœä¹Þqš„æºå¤´ã€?/p> <p>相类似的åQŒè¦é¿å…ä½¿ç”¨å•独的一个lå­—æ¯ä½œäØ“(f¨´)变量名。例如,我们很难通过观察下面的代码段来判断它到底是打印出列表l˜q˜æ˜¯æ•°å­—1ã€?/p> <pre> <code class="java"><span id="wmqeeuq" class="comment">//不良代码-使用äº?ji¨£n)lä½œäØ“(f¨´)变量å?/span> List l = <span id="wmqeeuq" class="keyword">new</span> ArrayList<String>(); l.add(<span id="wmqeeuq" class="string">"Foo"</span>); System.out.println(<span id="wmqeeuq" class="number">1</span>);</code> </pre> <p>也许当初允许用小写的l来编写long型字面常量本íw«å°±æ˜¯ä¸€ä¸ªé”™è¯¯ã€?/p> <hr id="hr"/> <h2>今天的问é¢?/h2> <p>下面的程序是对两个十六进åˆÓž¼ˆhexåQ‰å­—面常量进行相加,然后打印出十六进制的¾l“果。这个程序会(x¨¬)打印å‡ÞZ»€ä¹ˆå‘¢åQ?/p> <pre> <code class="java"><span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="class"><span id="wmqeeuq" class="keyword">class</span> <span id="wmqeeuq" class="title">JoyOfHex</span> {</span> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">void</span> main(String[] args) { System.out.println(Long.toHexString(<span id="wmqeeuq" class="number">0x100000000L</span> + <span id="wmqeeuq" class="number">0xcafebabe</span>)); } }</code> </pre> <img src ="http://www.aygfsteel.com/fourlee/aggbug/201025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/fourlee/" target="_blank">李四飞刀</a> 2008-05-17 00:33 <a href="http://www.aygfsteel.com/fourlee/archive/2008/05/17/201025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>½W?4 天:(x¨¬) 解答 -- 长整敎ͼŒ 问题 -- çœÆDб¾~­äØ•http://www.aygfsteel.com/fourlee/archive/2008/05/16/201018.html李四飞刀李四飞刀Fri, 16 May 2008 15:41:00 GMThttp://www.aygfsteel.com/fourlee/archive/2008/05/16/201018.htmlhttp://www.aygfsteel.com/fourlee/comments/201018.htmlhttp://www.aygfsteel.com/fourlee/archive/2008/05/16/201018.html#Feedback1http://www.aygfsteel.com/fourlee/comments/commentRss/201018.htmlhttp://www.aygfsteel.com/fourlee/services/trackbacks/201018.html½W?3 天的问题

被除数表½Cºçš„æ˜¯ä¸€å¤©é‡Œçš„å¾®¿U’æ•°åQ›è€Œé™¤æ•°è¡¨½Cºçš„æ˜¯ä¸€å¤©é‡Œçš„æ¯«¿U’数。这个程序会(x¨¬)打印å‡ÞZ»€ä¹ˆå‘¢åQ?/p>


public class LongDivision{
    public static void main(String args[]){ 
        final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; 
        final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; 
        System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY); 
    } 
} 

½W?3 天问题的解答

˜q™ä¸ªé¢˜çœ‹èµäh¥ç›¸å½“直观。每天的毫秒数和每天的微¿U’数都是帔R‡ã€‚䨓(f¨´)清楚赯‚§åQŒå®ƒä»¬éƒ½è¢«è¡¨½Cºæˆ¿U¯çš„形式。你可能想都没想åQŒå°±è„±å£è€Œå‡ºåQŒç»“果是1000ã€?遗憾的是åQŒå®ƒæ‰“印的是5。这里到底发生了(ji¨£n)什么呢åQ?/p>

原因

问题在于常数MICROS_PER_DAY的计½Ž?¼‹®å®ž"溢出äº?ji¨£n)。尽½Ž¡è®¡½Ž—çš„¾l“果适合攑օ¥long中,òq¶ä¸”其空间还有富余,但是˜q™ä¸ª¾l“æžœòq¶ä¸é€‚合攑օ¥int中ã€?˜q™ä¸ªè®¡ç®—完全是以int˜qç®—来执行的åQŒåƈ且只有在˜qç®—完成之后åQŒå…¶¾l“果才被提升到l(f¨¡)ongåQŒè€Œæ­¤æ—¶å·²¾lå¤ª˜qŸäº†(ji¨£n)åQšè®¡½Ž—å·²¾læº¢å‡ÞZº†(ji¨£n)åQ?它返回的是一个小äº?00倍的数倹{€‚从int提升到l(f¨¡)ong是一¿Uæ‹“宽原始类型è{换(widening primitive conversionåQ‰ï¼Œ 它保留了(ji¨£n)åQˆä¸æ­£ç¡®çš„)(j¨ª)数倹{€‚这个å€ég¹‹åŽè¢«MILLIS_PER_DAY整除åQŒè€ŒMILLIS_PER_DAY的计½Ž—æ˜¯æ­£ç¡®çš„ï¼Œå› äØ“(f¨´)它适合int˜qç®—。这æ äh•´é™¤çš„¾l“æžœž®±å¾—åˆîCº†(ji¨£n)5

那么ä¸ÞZ»€ä¹ˆè®¡½Ž—会(x¨¬)是以int˜qç®—æ¥æ‰§è¡Œçš„å‘¢ï¼Ÿå› äØ“(f¨´)所有乘在一èµïL(f¨¥ng)š„因子都是int数倹{€‚当你将两个int数值相乘时åQ?你将得到另一个int数倹{€?strong>Java不具有目标确定类型的ç‰ÒŽ(gu¨©)€§ï¼Œ˜q™æ˜¯ä¸€¿Uè¯­­a€ç‰ÒŽ(gu¨©)€§ï¼Œå…¶å«ä¹‰æ˜¯æŒ‡å­˜å‚¨ç»“果的变量的类型会(x¨¬)影响到计½Ž—所使用的类åž?/strong>

解决办法


public class LongDivision{
    public static void main(String args[ ]){
        final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000;
        final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000;
        System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
    }
}

通过使用long帔R‡æ¥æ›¿ä»£int帔R‡ä½œäØ“(f¨´)每一个乘¿U¯çš„½W¬ä¸€ä¸ªå› å­ï¼Œæˆ‘们ž®±å¯ä»¥å¾ˆå®ÒŽ(gu¨©)˜“地订正这个程序。这样做可以强制表达式中所有的后箋(hu¨¤)计算都用long˜qä½œæ¥å®Œæˆã€?ž®½ç®¡˜q™ä¹ˆåšåªåœ¨MICROS_PER_DAY表达式中是必需的,但是在两个乘¿U¯ä¸­éƒ½è¿™ä¹ˆåšæ˜¯ä¸€¿Uå¾ˆå¥½çš„æ–¹å¼ã€‚相似地åQŒä‹É用longä½œäØ“(f¨´)乘积çš?½W¬ä¸€ä¸?æ•°å€ég¹Ÿòq¶ä¸æ€ÀL˜¯å¿…需的, 但是˜q™ä¹ˆåšä¹Ÿæ˜¯ä¸€¿Uå¾ˆå¥½çš„形式。在两个计算中都以long数值开始可以很清楚地表明它们都不会(x¨¬)溢出。下面的½E‹åºž®†æ‰“印出我们所期望çš?000

½W?3 天问题的æ€È»“

˜q™ä¸ªæ•™è®­å¾ˆç®€å•:(x¨¬)当你在操作很大的数字æ—Óž¼Œåƒä¸‡è¦æé˜²æº¢å‡?/strong>--它可是一个缄默杀手ã€?即ä‹É用来保存¾l“果的变量已昑־—­‘›_¤Ÿå¤§ï¼Œä¹Ÿåƈ不意味着要äñ”生结果的计算å…ähœ‰æ­£ç¡®çš„类型。当你拿不准æ—Óž¼Œž®×ƒ‹É用long˜qç®—来执行整个计½Ž—ã€?/p>

语言设计者从中可以吸取的教训是:(x¨¬)也许降低¾~„默溢出产生的可能性确实是值得做的一件事。这可以通过对不ä¼?x¨¬)äñ”生缄默溢出的˜qç®—提供支持来实现ã€?½E‹åºå¯ä»¥æŠ›å‡ºä¸€ä¸ªå¼‚常而不是直接溢出,ž®±åƒAda所作的那样åQŒæˆ–者它们可以在需要的时候自动地切换åˆîC¸€ä¸ªæ›´å¤§çš„内部表示上以防止溢出åQŒå°±åƒLisp所作的那样ã€?˜q™ä¸¤¿Uæ–¹å¼éƒ½å¯èƒ½ä¼?x¨¬)遭受与其相关的性能斚w¢çš„æŸå¤±ã€?降低¾~„默溢出的另一¿Uæ–¹å¼æ˜¯æ”¯æŒç›®æ ‡¼‹®å®š¾cÕdž‹åQŒä½†æ˜¯è¿™ä¹ˆåšä¼?x¨¬)显著地增加¾cÕdž‹¾pȝ»Ÿçš„复杂度


今天的问�/h2>

它又ä¼?x¨¬)打印出什么呢åQ?/p>


public class Elementary{
    public static void main(String[] args){
        System.out.println(12345+5432l);
    }
}



]]>½W?3 天:(x¨¬) 解答 -- æ‰ùN›¶é’±ï¼Œ 问题 -- é•¿æ•´æ•?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/fourlee/archive/2008/05/16/201016.html</guid><wfw:comment>http://www.aygfsteel.com/fourlee/comments/201016.html</wfw:comment><comments>http://www.aygfsteel.com/fourlee/archive/2008/05/16/201016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/fourlee/comments/commentRss/201016.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/fourlee/services/trackbacks/201016.html</trackback:ping><description><![CDATA[ <h2>½W?2 天的问题</h2> <p>误‚€(g¨¨)ƒè™‘下面˜q™æ®µè¯æ‰€æè¿°çš„问题:(x¨¬)</p> <p>ž®æ˜Žåœ¨è¶…å¸?j¨¬ng)è´­ä¹îCº†(ji¨£n)一个ä­h(hu¨¢n)å€û|òE1.10的东西,但是他钱包中只有两元一张的钞票。如果他用一张两元的钞票支付åQŒé‚£ä¹ˆåº”该找¾l™ä»–多少雉™’±å‘¢ï¼Ÿ</p> <p>下面是一个试图解决上˜q°é—®é¢˜çš„½E‹åºåQŒå®ƒä¼?x¨¬)打印出什么呢åQ?/p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">class</span> <span id="wmqeeuq" class="title">Change</span>{ <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">void</span> main(String args[]){ System.out.println(<span id="wmqeeuq" class="number">2.00</span> - <span id="wmqeeuq" class="number">1.10</span>); } } </code> </pre> <h2>½W?2 天问题的解答</h2> <p>你可能会(x¨¬)è¯ß_(d¨¢)¼Œ˜q™ä¸æ˜¯å¾ˆ½Ž€å•嘛åQè¾“å‡?.90。但实际的输出确实:(x¨¬)0.8999999999999999ã€?/p> <h3>原因</h3> <p>一、程序如何才能知道你惌™¦æ‰“印ž®æ•°ç‚¹åŽä¸¤ä½ž®æ•°å‘¢ï¼Ÿ</p> <p>JDK API文档中关于Double.toString的部分指出:(x¨¬)</p> <blockquote> <p>Double.toString的返回å€û|¼Œæ˜¯èƒö以将double¾cÕdž‹çš„å€ég¸Žæœ€é è¿‘它的临近值区分出来的最短的ž®æ•°åQŒå®ƒåœ¨å°æ•°ç‚¹ä¹‹å‰å’Œä¹‹åŽéƒ½è‡›_°‘有一位ã€?/p> </blockquote> <p>å› æ­¤åQŒçœ‹èµäh¥åQŒè¯¥½E‹åºåº”该打印0.9是合理的ã€?/p> <p>äºŒã€åÆˆä¸æ˜¯æ‰€æœ‰çš„ž®æ•°éƒ½å¯ä»¥ç”¨äºŒè¿›åˆ¶æÕQç‚ÒŽ(gu¨©)•°æ¥ç²¾¼‹®è¡¨½Cºçš„ã€?/p> <p>问题在于1.1˜q™ä¸ªæ•°å­—不能被精¼‹®è¡¨½Cºæˆä¸ÞZ¸€ä¸ªdoubleåQŒå› æ­¤å®ƒè¢«è¡¨½Cºæˆä¸ºæœ€æŽ¥è¿‘它的double倹{€?该程序从2中减åŽÈš„ž®±æ˜¯˜q™ä¸ªå€¹{€?遗憾的是åQŒè¿™ä¸ªè®¡½Ž—çš„¾l“æžœòq¶ä¸æ˜¯æœ€æŽ¥è¿‘0.9çš„double倹{€?表示¾l“果的double值的最短表½Cºå°±æ˜¯ä½ æ‰€çœ‹åˆ°çš„æ‰“印出来的那个可恶的数字ã€?/p> <h2>½W?2 天问题的解决办法</h2> <h3>æ–ÒŽ(gu¨©)³•一</h3> <pre> <code class="java"> <span id="wmqeeuq" class="comment">//拙劣的解å†Ïx(ch¨®ng)–¹æ¡?-仍旧是ä‹É用二˜q›åˆ¶‹¹®ç‚¹æ•?/span> System.out.printf(<span id="wmqeeuq" class="string">"%.2f%n"</span>,<span id="wmqeeuq" class="number">2.00</span> - <span id="wmqeeuq" class="number">1.10</span>);</code> </pre> <p>˜q™æ¡è¯­å¥æ‰“印的是正确的结果,但是˜q™åƈ不表½Cºå®ƒ?y¨­u)®±æ˜¯å¯¹åº•层问题的通用解决æ–ÒŽ(gu¨©)¡ˆã€‚它使用的仍旧是二进制æÕQç‚ÒŽ(gu¨©)•°çš„double˜qç®—ã€?‹¹®ç‚¹˜qç®—在一个范围很òq¿çš„值域上提供了(ji¨£n)很好的近ä¼û|¼Œä½†æ˜¯å®ƒé€šå¸¸ä¸èƒ½äº§ç”Ÿ¾_„¡¡®çš„结果ã€?<strong>二进制æÕQ点对于货币计½Ž—是非常不适合çš?/strong>åQŒå› ä¸ºå®ƒä¸å¯èƒ½å°†0.1--或è€?0的其它ä“Q何次负幂--¾_„¡¡®è¡¨ç¤ºä¸ÞZ¸€ä¸ªé•¿åº¦æœ‰é™çš„二进制小æ•?/p> <h3>æ–ÒŽ(gu¨©)³•äº?/h3> <pre> <code class="java">System.out.println((<span id="wmqeeuq" class="number">200</span> - <span id="wmqeeuq" class="number">110</span>) + <span id="wmqeeuq" class="string">"åˆ?</span>);</code> </pre> <p>˜q™æ˜¯åœ¨Java中一¿Uç®€å•的解决æ–ÒŽ(gu¨©)³•。在Java标准库中åQŒæœ‰ä¸€ä¸ªç±»ä¼¼çš„范例Date¾c»ï¼ŒDate¾cȝš„对于旉™—´çš„内部表½Cºå°±æ˜¯ä¸€ä¸ªä»¥æ¯«ç§’为单位的longæ•´æ•°ã€?对于像货币这æ ïL(f¨¥ng)š„æ•°å€û|¼Œå¯ä»¥ç”¨int或long来表½Cºã€‚如果你采纳äº?ji¨£n)è§£å†Ïx(ch¨®ng)–¹æ³•,<strong>è¯ïL(f¨¥ng)¡®ä¿è¯¥æ•´æ•°¾cÕdž‹å¤§åˆ°­‘›_¤Ÿè¡¨ç¤ºåœ¨ç¨‹åºä¸­ä½ å°†è¦ç”¨åˆ°çš„æ‰€æœ‰å€?/strong>ã€?/p> <h3>æ–ÒŽ(gu¨©)³•ä¸?/h3> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">import</span> java.math.BigDecimal; <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">class</span> <span id="wmqeeuq" class="title">Change1</span>{ <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">void</span> main(String args[]){ System.out.println(<span id="wmqeeuq" class="keyword">new</span> BigDecimal(<span id="wmqeeuq" class="string">"2.00"</span>).subtract(<span id="wmqeeuq" class="keyword">new</span> BigDecimal(<span id="wmqeeuq" class="string">"1.10"</span>))); } } </code> </pre> <p>解决该问题的另一¿Uæ–¹å¼æ˜¯ä½¿ç”¨æ‰§è¡Œ¾_„¡¡®ž®æ•°˜qç®—çš„BigDecimalã€?<strong>˜q™é‡Œè¦å‘Šè¯«ä½ ä¸€ç‚¹ï¼š(x¨¬) 一定要用BigDecimal(String)构造器åQŒè€Œåƒä¸‡ä¸è¦ç”¨BigDecimal(double)ã€?后一个构造器ž®†ç”¨å®ƒçš„参数çš?¾_„¡¡®"值来创徏一个实例:(x¨¬)new BigDecimal(1.1)ž®†è¿”回一个表½C?.100000000000000055511151231257827021181583404541015625 çš„BigDecimalã€?/strong> </p> <p>˜q™ä¸ªç‰ˆæœ¬òq¶ä¸æ˜¯ååˆ†åœ°å®Œç¾ŽåQŒå› ä¸ºJavaòq¶æ²¡æœ‰äØ“(f¨´)BigDecimal提供ä»ÖM½•语言上的支持。原因:(x¨¬)</p> <ul> <li>使用BigDecimal的计½Ž—很有可能比那些使用原始¾cÕdž‹çš„计½Ž—要慢一些,å¯ÒŽ(gu¨©)Ÿäº›å¤§é‡ä‹É用小数计½Ž—çš„½E‹åºæ¥è¯´åQŒè¿™å¯èƒ½ä¼?x¨¬)成为问题,而对大多数程序来è¯ß_(d¨¢)¼Œ˜q™æ˜¾å¾—一点也不重要ã€?/li> <li>Java不允许运½Ž—符重蝲。ä‹É得代码不够直观ã€?/li> </ul> <h2>æ€È»“</h2> <p>在需要精¼‹®ç­”案的地方åQŒè¦é¿å…ä½¿ç”¨floatå’Œdoubleã€?/p> <p>对于货币计算åQŒè¦ä½¿ç”¨int、long或BigDecimalã€?/p> <p>对于语言设计者来è¯ß_(d¨¢)¼Œåº”该考虑对小数运½Ž—提供语­a€æ”¯æŒã€‚可以支持下列方式中的一¿Uã€?/p> <ul> <li>提供å¯ÒŽ(gu¨©)“ä½œç¬¦é‡è²çš„æœ‰é™æ”¯æŒï¼Œ 以ä‹É得运½Ž—ç¬¦å¯ä»¥è¢«å¡‘é€ äØ“(f¨´)能够å¯ÒŽ(gu¨©)•°å€¼å¼•用类型è“v作用åQ?例如BigDecimalã€?/li> <li>提供原始的小数类型,ž®±åƒ COBOL ä¸?PL/I 所作的一栗÷€?/li> </ul> <hr id="hr"/> <h2>今天的问é¢?/h2> <p>被除数表½Cºçš„æ˜¯ä¸€å¤©é‡Œçš„å¾®¿U’æ•°åQ›è€Œé™¤æ•°è¡¨½Cºçš„æ˜¯ä¸€å¤©é‡Œçš„æ¯«¿U’数。这个程序会(x¨¬)打印å‡ÞZ»€ä¹ˆå‘¢åQ?/p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">class</span> <span id="wmqeeuq" class="title">LongDivision</span>{ <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">void</span> main(String args[]){ <span id="wmqeeuq" class="keyword">final</span> <span id="wmqeeuq" class="keyword">long</span> MICROS_PER_DAY = <span id="wmqeeuq" class="number">24</span> * <span id="wmqeeuq" class="number">60</span> * <span id="wmqeeuq" class="number">60</span> * <span id="wmqeeuq" class="number">1000</span> * <span id="wmqeeuq" class="number">1000</span>; <span id="wmqeeuq" class="keyword">final</span> <span id="wmqeeuq" class="keyword">long</span> MILLIS_PER_DAY = <span id="wmqeeuq" class="number">24</span> * <span id="wmqeeuq" class="number">60</span> * <span id="wmqeeuq" class="number">60</span> * <span id="wmqeeuq" class="number">1000</span>; System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY); } } </code> </pre> <img src ="http://www.aygfsteel.com/fourlee/aggbug/201016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 22:50 <a href="http://www.aygfsteel.com/fourlee/archive/2008/05/16/201016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>½W?2 天:(x¨¬) 解答 -- 判断是否为奇敎ͼŒ 问题 -- æ‰ùN›¶é’?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/fourlee/archive/2008/05/16/200996.html</guid><wfw:comment>http://www.aygfsteel.com/fourlee/comments/200996.html</wfw:comment><comments>http://www.aygfsteel.com/fourlee/archive/2008/05/16/200996.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/fourlee/comments/commentRss/200996.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/fourlee/services/trackbacks/200996.html</trackback:ping><description><![CDATA[ <h2>½W?1 天的问题</h2> <p>下面的方法意囄¡¡®å®šå®ƒé‚£å”¯ä¸€çš„参数是否是一个奇数。这个方法能够正¼‹®è¿è½¬å—åQ?/p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">boolean</span> odd(<span id="wmqeeuq" class="keyword">int</span> number) { <span id="wmqeeuq" class="keyword">return</span> number % <span id="wmqeeuq" class="number">2</span> == <span id="wmqeeuq" class="number">1</span>; } </code> </pre> <h2>½W?1 天问题的解答</h2> <p>æœ?/4的情况下åQŒç­”案是错误的。比如:(x¨¬)odd(-3) 表达式得到的¾l“æžœž®±æ˜¯ fasle。对于所有的负奇敎ͼŒä¸Šé¢çš„æ–¹æ³•都ä¼?x¨¬)得到错误的¾l“æžœã€?/p> <h3>原因</h3> <p>问题的原因在于求余操作符(%)åQŒåœ¨Java中该操作½W¦è¢«å®šä¹‰ä¸?/p> <blockquote> <p>对于所有的 int æ•°å€?a 和所有的非零 int æ•°å€?båQŒéƒ½æ»¡èƒö下面的恒½{‰å¼ <br/> (a / b) * b + (a % b) == a</p> </blockquote> <p>换句话说åQ?a % b) = a - (a / b) * b</p> <p>由数学推理运½Ž—可知,a % b 的符åähœ‰æ“ä½œæ•°a军_®šåQˆè¦ä¹ˆäØ“(f¨´)0åQŒè¦ä¹ˆå’Œa一è‡ß_(d¨¢)¼‰(j¨ª)。也ž®±æ˜¯è¯ß_(d¨¢)¼Œ -5 % 3 => -2åQ?-5 % -3 => -2ã€?/p> <p>å› æ­¤åQŒå¯¹äºŽæ‰€æœ‰çš„负奇数nåQ?n % 2 => -1。问题ä(sh¨´)¸­çš„æ–¹æ³•自然有问题啦ã€?/p> <h3>解决办法</h3> <p>è¦åˆ¤æ–­ä¸€ä¸ªæ•´æ•°æ˜¯å¦äØ“(f¨´)奇数的解军_Šžæ³•æœ‰ä¸¤ç§ã€?/p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">boolean</span> odd(<span id="wmqeeuq" class="keyword">int</span> number) { <span id="wmqeeuq" class="keyword">return</span> number % <span id="wmqeeuq" class="number">2</span> != <span id="wmqeeuq" class="number">0</span>; } </code> </pre> <pre> <code class="java"> <span id="wmqeeuq" class="javadoc">/** * ˜q™ç§æ–ÒŽ(gu¨©)³•的性能更好ã€? */</span> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">boolean</span> odd(<span id="wmqeeuq" class="keyword">int</span> number) { <span id="wmqeeuq" class="keyword">return</span> (number & <span id="wmqeeuq" class="number">1</span>) != <span id="wmqeeuq" class="number">0</span>; } </code> </pre> <h2>æ€È»“</h2> <p> <strong>无论你何时ä‹É用到äº?ji¨£n)取余操作符åQŒéƒ½è¦è€ƒè™‘到操作数和结果的½W¦å·ã€?/strong> </p> <p>该操作符的行为在其操作数非负时是一目了(ji¨£n)ç„¶çš„åQŒä½†æ˜¯å½“一个或两个操作数都是负数时åQŒå®ƒçš„行为就不那么显而易见了(ji¨£n)ã€?/p> <hr id="hr"/> <h2>今天的问é¢?/h2> <p>误‚€(g¨¨)ƒè™‘下面˜q™æ®µè¯æ‰€æè¿°çš„问题:(x¨¬)</p> <p>ž®æ˜Žåœ¨è¶…å¸?j¨¬ng)è´­ä¹îCº†(ji¨£n)一个ä­h(hu¨¢n)å€û|òE1.10的东西,但是他钱包中只有两元一张的钞票。如果他用一张两元的钞票支付åQŒé‚£ä¹ˆåº”该找¾l™ä»–多少雉™’±å‘¢ï¼Ÿ</p> <p>下面是一个试图解决上˜q°é—®é¢˜çš„½E‹åºåQŒå®ƒä¼?x¨¬)打印出什么呢åQ?/p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">class</span> <span id="wmqeeuq" class="title">Change</span>{ <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">void</span> main(String args[]){ System.out.println(<span id="wmqeeuq" class="number">2.00</span> - <span id="wmqeeuq" class="number">1.10</span>); } } </code> </pre> <img src ="http://www.aygfsteel.com/fourlee/aggbug/200996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 21:38 <a href="http://www.aygfsteel.com/fourlee/archive/2008/05/16/200996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>½W?1 天:(x¨¬) 判断是否为奇æ•?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/fourlee/archive/2008/05/16/200989.html</guid><wfw:comment>http://www.aygfsteel.com/fourlee/comments/200989.html</wfw:comment><comments>http://www.aygfsteel.com/fourlee/archive/2008/05/16/200989.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/fourlee/comments/commentRss/200989.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/fourlee/services/trackbacks/200989.html</trackback:ping><description><![CDATA[ <p> <span style="FONT-SIZE: 12pt; FONT-FAMILY: å®?hu¨¤)ä½? mso-bidi-font-family: å®?hu¨¤)ä½? mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">下面的方法意囄¡¡®å®šå®ƒé‚£å”¯ä¸€çš„参数是否是一个奇数。这个方法能够正¼‹®è¿è½¬å—åQ?/span> </p> <pre> <code class="java"> <span id="wmqeeuq" class="keyword">public</span> <span id="wmqeeuq" class="keyword">static</span> <span id="wmqeeuq" class="keyword">boolean</span> odd(<span id="wmqeeuq" class="keyword">int</span> number) { <span id="wmqeeuq" class="keyword">return</span> number % <span id="wmqeeuq" class="number">2</span> == <span id="wmqeeuq" class="number">1</span>; } </code> </pre> <img src ="http://www.aygfsteel.com/fourlee/aggbug/200989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/fourlee/" target="_blank">李四飞刀</a> 2008-05-16 20:53 <a href="http://www.aygfsteel.com/fourlee/archive/2008/05/16/200989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP(一)http://www.aygfsteel.com/fourlee/archive/2008/02/04/179305.html李四飞刀李四飞刀Mon, 04 Feb 2008 10:57:00 GMThttp://www.aygfsteel.com/fourlee/archive/2008/02/04/179305.htmlhttp://www.aygfsteel.com/fourlee/comments/179305.htmlhttp://www.aygfsteel.com/fourlee/archive/2008/02/04/179305.html#Feedback0http://www.aygfsteel.com/fourlee/comments/commentRss/179305.htmlhttp://www.aygfsteel.com/fourlee/services/trackbacks/179305.html

HTTP

HTTPž®±æ˜¯ä¸€¿Uè¯·æ±?响应模式ã€?/p>

HTTP事务

  1. ˜qžæŽ¥ 建立和服务器的连æŽ?
  2. 查询 è¯äh±‚服务器上的资æº?
  3. 处理 服务器接受和处理è¯äh±‚
  4. 响应 服务器将è¯äh±‚的资源发送回客户ç«?
  5. ¾lˆæ­¢ 事务完成后,关闭˜qžæŽ¥åQŒé™¤éžå®¢æˆähœºä¸ŽæœåŠ¡å™¨ä¹‹é—´ç«‹å³å‘ç”Ÿå¦ä¸€äº‹åŠ¡ã€?

用telnet½E‹åºéªŒè¯˜q™ä¸ª˜q‡ç¨‹

˜qžæŽ¥

telnet www.baidu.com 80

80是HTTP协议默认的端口�/p>

查询

GET / HTTP/1.0�br>�/p>

↙表½Cºå›žè½¦ã€?/p>
GET / HTTP/1.0
查询æ–ÒŽ(gu¨©)³•名,有GETå’ŒPOST
GETæ–ÒŽ(gu¨©)³•不支持消息体
服务器资�/td> HTTP版本

在telnet中测试HTTPçš„POST是很éºÈƒ¦(ch¨³)的事。这里就不讲äº?ji¨£n),何况GETå’ŒPOST很类伹{€?/p>

处理

Baidu服务器根据请求,处理è¯äh±‚。如果用的是ServletåQŒå°±æ˜¯æ‰§è¡Œé‚£ä¸ªServletçš„doGetæ–ÒŽ(gu¨©)³•ã€?/p>

响应



HTTP/1.1 200 OK
Date: Sun, 03 Feb 2008 08:08:44 GMT
Server: BWS/1.0
Content-Length: 3022
Content-Type: text/html
Cache-Control: private
Expires: Sun, 03 Feb 2008 08:08:44 GMT
Set-Cookie: BAIDUID=2BB1B837C8EC6794A132C5D8DDD76721:FG=1; expires=Sun, 03-Feb-38 08:08:44 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "

<html><head><meta http-equiv=Content-Type content="text/html;charset=gb2312"><title>癑ֺ¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“ </title><style>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:å®?hu¨¤)体}#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}</style></head>
<body><div id=u></div><center><a href=http://hi.baidu.com/baidu target=_blank><img src=http://www.baidu.com/img/logo.gif width=174 height=59 alt="ç‚ÒŽ(gu¨©)­¤˜q›å…¥ 癑ֺ¦½Iºé—´"></a><br><br><br><br><table cellpadding=0 cellspacing=0 id=l><tr><td align=left><div id=m><a onclick=s(this) href=http://news.baidu.com>æ–?amp;nbsp;é—?lt;/a><b>¾|?amp;nbsp;™å?lt;/b><a onclick=s(this) href=http://tieba.baidu.com>è´?amp;nbsp;å?lt;/a><a onclick=s(this) href=http://zhidao.baidu.com>çŸ?amp;nbsp;é?lt;/a><a onclick=s(this) href=http://mp3.baidu.com>MP3</a><a onclick=s(this) href=http://image.baidu.com>å›?amp;nbsp;ç‰?lt;/a></div></td></tr></table>
<table cellpadding=0 cellspacing=0><tr valign=top><td width=92></td><td height=62 nowrap><form name=f action=/s><input type=text name=wd id=kw size=36 maxlength=100><script>var w=document.f.wd;w.focus();document.getElementById("u").innerHTML='<a ;function s(o){if(w.value.length>0){var h=o.href;var q=encodeURIComponent(w.value);if(h.indexOf("q=")!=-1){o.href=h.replace(new RegExp("q=[^&$]*"),"q="+q)}else{o.href+="?q="+q}}};(function(){if(new RegExp("q=([^&]+)").test(location.search)){w.value=decodeURIComponent(RegExp.$1)}})()</script><input type=hidden name=cl value=3> <input type=submit value=癑ֺ¦ä¸€ä¸?id=sb><br><br></form></td><td width=100><a href=/search/jiqiao.html>帮助</a><br><a href=/gaoji/advanced.html>高çñ”</a></td></tr></table>
<p id=km>&nbsp;<a href=http://hi.baidu.com>½Iºé—´</a>&nbsp;|&nbsp;<a href=http://www.baidu.com/more>更多>></a></p>
<p style=height:60px></p>
<p style=height:30px><a onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.baidu.com')" href=http://utility.baidu.com/traf/click.php?id=215&url=http://www.baidu.com>把百度设为首™å?lt;/a></p><p style=height:14px><a href=http://jingjia.baidu.com>企业推广</a> | <a href=http://top.baidu.com>搜烦(ch¨³)风云æ¦?lt;/a> | <a href=/home.html>关于癑ֺ¦</a> | <a href=http://ir.baidu.com>About Baidu</a></p><p id=b>&copy;2008 Baidu <a href=http://www.baidu.com/duty>使用癑ֺ¦å‰å¿…è¯?lt;/a> <a href=http://www.miibeian.gov.cn target=_blank>京ICPè¯?30173å?lt;/a> <a href=http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001092500412><img src=http://gimg.baidu.com/img/gs.gif></a></p></center></body></html><!--4eca38de351397c2-->

失去äº?ji¨£n)è·Ÿä¸ÀLœºçš„连接ã€?br>

¾lˆæ­¢

用telnet˜qžæŽ¥web服务器,˜qžæŽ¥ä¼?x¨¬)立马终止。如果用‹¹è§ˆå™¨è®¿é—®ï¼Œ‹¹è§ˆå™¨ä¼š(x¨¬)取得与页面有关的所有图像、样式表和脚本文件等åQŒæ‰¾lˆæ­¢˜qžæŽ¥ã€?/p>

HTTP查询和响应的消息格式

HTTP查询和响应的消息格式差不多�/p>
格式
initliaze line
key1:value1
key2:value2

[Optional message body]
查询格式
GET /newaddr?name=jack&email=2 HTTP/1.0
accept:*/*
accept-language:zh-cn
... ...


响应格式
(具体见上�
HTTP/1.1 200 OK
Date: Sun, 03 Feb 2008 08:08:44 GMT
Server: BWS/1.0
... ...

<html>...</html>

后记

HTTP定义äº?ji¨£n)查询和响应的消息格式。但每个‹¹è§ˆå™¨å’ŒæœåŠ¡å™¨åœ¨˜q™ç§æ ¼å¼ä¸‹ï¼Œæœ‰è‡ªå·±å®šä¹‰çš„内容。服务器通过‹¹è§ˆå™¨è¯·æ±‚的消息åQŒçŸ¥é“浏览器具体是什么型åïL(f¨¥ng)š„åQŒæ˜¯ä»€ä¹ˆæ“ä½œç³»¾lŸã€‚这些具体怎么做的åQŒä¸‹æ–‡åˆ†è§?/p>

]]>
CSS实现的控制台效果http://www.aygfsteel.com/fourlee/archive/2008/02/04/179302.html李四飞刀李四飞刀Mon, 04 Feb 2008 09:45:00 GMThttp://www.aygfsteel.com/fourlee/archive/2008/02/04/179302.htmlhttp://www.aygfsteel.com/fourlee/comments/179302.htmlhttp://www.aygfsteel.com/fourlee/archive/2008/02/04/179302.html#Feedback11http://www.aygfsteel.com/fourlee/comments/commentRss/179302.htmlhttp://www.aygfsteel.com/fourlee/services/trackbacks/179302.html

摘要

我们在写blog或写文档说明的时候,有时候说明在控制åîC¸­æ€Žæ ·ä½¿ç”¨åQŒåœ¨windows xp/2000中就是cmd命ä×o(h¨´)ã€?ä¸ÞZº†(ji¨£n)表达˜q™ç§åœ¨æŽ§åˆ¶å°ä¸­çš„æ“ä½œåQŒæˆ‘写了(ji¨£n)ä¸?CSS来呈现效果ã€?/p>

需求和设计要求

  1. 在网™å‰|–‡æ¡£ä¸­(blog或用æˆäh‰‹å†?åQŒå‘ˆçŽîC¸€ä¸ªæŽ§åˆ¶å°çš„æ ·å¼ï¼Œæœ‰è¾¹æ¡†å’Œæ ‡é¢˜æ ï¼Œé»‘色背景。如下图
  2. ˜q™ä¸ªæŽ§åˆ¶å°å¯ä»¥çœŸå®žçš„æŽ§åˆ¶å°é‚£æ ·å¯ä»¥ï¼Œåœ¨é€‚当的时候,有上下或左右滚动æ?
  3. 控制台里允许加入的元素有<p>块�
  4. ä¸ÞZº†(ji¨£n)区分控制台里的输入和输出字符ä¸ÔŒ¼Œåˆ†åˆ«å¯ä»¥ç”?lt;kbd>å’?lt;samp>括è“v来,然后讄¡½®ä»–们的CSS样式
  5. 当前目录提示½W¦ï¼Œç”?lt;span>元素表达ã€?
  6. <kbd>�lt;samp>�lt;span>元素只能包含�lt;p>元素中,不能直接在“控制台”中�

控制台效果图

实现

  • 控制台标题用背景囄¡‰‡å®žçް
  • 因䨓(f¨´)åŒæ—¶æœ‰æ ‡é¢˜å’Œæ»šåŠ¨æ¡ï¼Œæ‰€ä»¥äØ“(f¨´)äº?ji¨£n)不让滚动条覆盖部分标题åQŒæŽ§åˆ¶å°è‡›_°‘要用两个<div>来表达,一个表½CºæŽ§åˆ¶å°è¾ÒŽ(gu¨©)¡†åQŒä¸€ä¸ªè¡¨½CºæŽ§åˆ¶å°é‡Œå†…å®?
  • 控制台的宽度是固定的åQŒé«˜åº¦æœ‰æŽ§åˆ¶å°çš„内容层表è¾?

CSS

@charset "utf-8";

/**
* Copyright (c) 李四 fourlee@live.cn
*/

/* 控制台边框层 */
.console_box {
background: #000000 url(Command_heading.jpg) no-repeat;
width: 660px; /* windows 控制台默认宽�*/
margin: 0px;
padding-top: 23px; /* 控制台标题栏高度 */
padding-right: 0px;
padding-bottom: 0px;
padding-left: 0px;
border: 4px outset #FFFFFF;
}

/* 控制台内容层 */
.console_box .console {
background-color: #000000;
font-family: "Courier New", Courier, "å®?hu¨¤)ä½?, monospace;
font-size: 12px;
color: #CCCCCC;
width: 656px;
height: 396px;
margin: 0px;
padding: 0px;
border: 2px inset #666666;
overflow: auto; /* 自动加入滚动�*/
}

.console_box .console p {
line-height: 120%;
margin: 0px;
padding-bottom: 1em; /* ŒDµè½ä¸‹é¢ç•™ä¸€½Iø™¡Œçš„高åº?*/
padding-top: 0px;
padding-right: 0px;
padding-left: 0px;
}

HTML

<div class="console_box">
<div class="console" style="height:200px;">
<p>此处昄¡¤º class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®ÒŽ(gu¨©)­¤å¤„显½C?class "console_box" 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
<p>此处昄¡¤º class &quot;console_box&quot; 的内å®?lt;/p>
</div>
</div>

可以åœ?lt;div class="console" ...>中设¾|®é«˜åº¦æ¥è®„¡½®æŽ§åˆ¶å°çš„高度ã€?/p>

后记

一个控制台的效果基本出来了(ji¨£n)。在IE6å’ŒFirefox中测试通过。还有工作可å?/p>

  • ä¸ÞZº†(ji¨£n)区分控制åîC¸­çš„输入和输出åQŒå¾è®®ç”¨<kbd>å’?lt;samp>标签åQŒåƈ讄¡½®˜q™å†™æ ‡ç­¾çš„CSS样式ã€?
  • 更改标题栏图标和讄¡½®ä¸€ä¸‹CSS样式åQŒå°±å¯ä»¥å®žçްLinux或Mac½{‰æ“ä½œç³»¾lŸä¸­çš„æŽ§åˆ¶å°æ•ˆæžœ
  • ˜q˜æœ‰ä¸€äº›æ²¡é‡åˆ°å’Œæƒ³åˆ°çš„问题

˜q™æ˜¯æˆ‘第一‹Æ¡ç”¨BlogåQŒè¿˜?sh¨´)¸çŸ¥é“上传。这些源代码和图片的åQŒè¯·ç•™ä¸‹EMailåQŒæˆ–½{‰æˆ‘熟æ?zh¨¨n)‰äº†(ji¨£n)Blog再下载ã€?/p>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÌìÌ¨ÏØ| ÐÂÉÛÏØ| Äϰ²ÊÐ| ´óÆÒÏØ| ¹óµÂÏØ| ÁÙä¬ÏØ| ÁùÅÌË®ÊÐ| ÃÏÖÝÊÐ| ÏʳÇ| ËÉÅËÏØ| ÄÏ»ãÇø| Ô½Î÷ÏØ| ÂÛ̳| ×¼¸ñ¶ûÆì| ¼ÎÓãÏØ| ÀÖɽÊÐ| ÇìÑôÊÐ| ÓÎÏ·| ¸Á¶ûÏØ| Èʲ¼ÏØ| ¼ªÊ×ÊÐ| óÞÁ¬ÏØ| ɽ¶«Ê¡| 캵ÂÏØ| »ôÁÖ¹ùÀÕÊÐ| È·É½ÏØ| ÒË»ÆÏØ| ÌìÆø| ʱÉÐ| ÄþÔ¶ÏØ| ·½É½ÏØ| »ªÄþÏØ| À¼ÏªÊÐ| ÓÚÌïÏØ| ÐÅÑôÊÐ| ÂåÆÖÏØ| Ïå·ÚÏØ| ºù«µºÊÐ| Ã×Ò×ÏØ| ºÏË®ÏØ| ½­³Ç|