??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产综合第一精品小说,亚洲va在线va天堂成人,亚洲高清一区二区三区http://m.tkk7.com/Ben/category/5900.htmlJava Ben 成长之\zh-cnFri, 02 Mar 2007 06:52:00 GMTFri, 02 Mar 2007 06:52:00 GMT60[转]揭开正则表达式的秘面纱http://m.tkk7.com/Ben/archive/2006/02/22/31923.htmlBenBenWed, 22 Feb 2006 02:47:00 GMThttp://m.tkk7.com/Ben/archive/2006/02/22/31923.htmlhttp://m.tkk7.com/Ben/comments/31923.htmlhttp://m.tkk7.com/Ben/archive/2006/02/22/31923.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/31923.htmlhttp://m.tkk7.com/Ben/services/trackbacks/31923.html[原创文章Q{载请保留或注明出处:http://www.regexlab.com/zh/regref.htm]

引言

    正则表达式(regular expressionQ描qC一U字W串匚w的模式,可以用来Q(1Q检查一个串中是否含有符合某个规则的子串Qƈ且可以得到这个子ԌQ?Q根据匹配规则对字符串进行灵zȝ替换操作?BR>
    正则表达式学习v来其实是很简单的Q不多的几个较ؓ抽象的概念也很容易理解。之所以很多h感觉正则表达式比较复杂,一斚w是因为大多数的文档没有做到由入深地讲解Q概念上没有注意先后序Q给读者的理解带来困难Q另一斚wQ各U引擎自带的文档一般都要介l它Ҏ的功能,然而这部分Ҏ的功能ƈ不是我们首先要理解的?BR>
    文章中的每一个D例,都可以点击进入到试面q行试。闲话少_开始?/P>


1. 正则表达式规?/B>

1.1 普通字W?/B>

    字母、数字、汉字、下划线、以及后边章节中没有Ҏ定义的标点符P都是"普通字W?。表辑ּ中的普通字W,在匹配一个字W串的时候,匚w与之相同的一个字W?BR>
    Q匹配结果是Q成功;匚w到的内容是:"c"Q匹配到的位|是Q开始于2Q结束于3。(注:下标?开始还是从1开始,因当前编E语a的不同而可能不同)

   
Q匹配结果是Q成功;匚w到的内容是:"bcd"Q匹配到的位|是Q开始于1Q结束于4?/P>


1.2 单的转义字符

    一些不便书写的字符Q采用在前面?"\" 的方法。这些字W其实我们都已经熟知了?/P>

表达?/P>

可匹?/P>

\r, \n

代表回R和换行符

\t

制表W?/P>

\\

代表 "\" 本n

    q有其他一些在后边章节中有Ҏ用处的标点符P在前面加 "\" 后,׃表该W号本n。比如:^, $ 都有Ҏ意义Q如果要惛_配字W串?"^" ?"$" 字符Q则表达式就需要写?"\^" ?"\$"?/P>

表达?/P>

可匹?/P>

\^

匚w ^ W号本n

\$

匚w $ W号本n

\.

匚w数点(.Q本w?/P>

    q些转义字符的匹配方法与 "普通字W? 是类似的。也是匹配与之相同的一个字W?BR>
   
Q匹配结果是Q成功;匚w到的内容是:"$d"Q匹配到的位|是Q开始于3Q结束于5?/P>


1.3 能够?'多种字符' 匚w的表辑ּ

    正则表达式中的一些表C方法,可以匚w '多种字符' 其中的Q意一个字W。比如,表达?"\d" 可以匚wL一个数字。虽然可以匹配其中Q意字W,但是只能是一个,不是多个。这好比玩扑克牌时候,大小王可以代替Q意一张牌Q但是只能代替一张牌?/P>

表达?/P>

可匹?/P>

\d

L一个数字,0~9 中的L一?/P>

\w

L一个字母或数字或下划线Q也是 A~Z,a~z,0~9,_ 中Q意一?/P>

\s

包括I格、制表符、换늬{空白字W的其中L一?/P>

.

数点可以匹配除了换行符Q\nQ以外的L一个字W?/P>

    Q匹配的l果是:成功Q匹配到的内ҎQ?12"Q匹配到的位|是Q开始于3Q结束于5?BR>
   
Q匹配的l果是:成功Q匹配到的内ҎQ?aa1"Q匹配到的位|是Q开始于1Q结束于4?/P>


1.4 自定义能够匹?'多种字符' 的表辑ּ

    使用Ҏ?[ ] 包含一pd字符Q能够匹配其中Q意一个字W。用 [^ ] 包含一pd字符Q则能够匚w其中字符之外的Q意一个字W。同L道理Q虽然可以匹配其中Q意一个,但是只能是一个,不是多个?/P>

表达?/P>

可匹?/P>

[ab5@]

匚w "a" ?"b" ?"5" ?"@"

[^abc]

匚w "a","b","c" 之外的Q意一个字W?/P>

[f-k]

匚w "f"~"k" 之间的Q意一个字?/P>

[^A-F0-3]

匚w "A"~"F","0"~"3" 之外的Q意一个字W?/P>

    Q匹配的l果是:成功Q匹配到的内ҎQ?bc"Q匹配到的位|是Q开始于1Q结束于3?BR>
   
Q匹配的l果是:成功Q匹配到的内ҎQ?1"Q匹配到的位|是Q开始于3Q结束于4?/P>


1.5 修饰匚wơ数的特D符?/B>

    前面章节中讲到的表达式,无论是只能匹配一U字W的表达式,q是可以匚w多种字符其中L一个的表达式,都只能匹配一ơ。如果用表辑ּ再加上修饰匹配次数的ҎW号Q那么不用重复书写表辑ּ可以重复匹配?BR>
    使用Ҏ是:"ơ数修饰"攑֜"被修饰的表达?后边。比如:"[bcd][bcd]" 可以写成 "[bcd]{2}"?/P>

表达?/P>

作用

{n}

表达式重复nơ,比如Q?A 相当?"\w\w"Q?A 相当?"aaaaa"

{m,n}

表达式至重复mơ,最多重复nơ,比如Q?A ba"?baa"?baaa"

{m,}

表达式至重复mơ,比如Q?A a12","_456","M12344"...

?

匚w表达?ơ或?ơ,相当?{0,1}Q比如:

+

表达式至出?ơ,相当?{1,}Q比如:

*

表达式不出现或出CQ意次Q相当于 {0,}Q比如:

    Q匹配的l果是:成功Q匹配到的内ҎQ?12.5"Q匹配到的位|是Q开始于10Q结束于14?BR>
   
Q匹配的l果是:成功Q匹配到的内ҎQ?goooooogle"Q匹配到的位|是Q开始于7Q结束于17?/P>


1.6 其他一些代表抽象意义的ҎW号

    一些符号在表达式中代表抽象的特D意义:

表达?/P>

作用

^

与字W串开始的地方匚wQ不匚wM字符

$

与字W串l束的地方匹配,不匹配Q何字W?/P>

\b

匚w一个单词边界,也就是单词和I格之间的位|,不匹配Q何字W?/P>

    q一步的文字说明仍然比较抽象Q因此,举例帮助大家理解?BR>
   
Q匹配结果是Q失败。因?"^" 要求与字W串开始的地方匚wQ因此,只有?"aaa" 位于字符串的开头的时候,"^aaa" 才能匚wQ?A >比如Q?aaa xxx xxx"?BR>
    Q匹配结果是Q失败。因?"$" 要求与字W串l束的地方匹配,因此Q只有当 "aaa" 位于字符串的l尾的时候,"aaa$" 才能匚wQ?A >比如Q?xxx xxx aaa"?BR>
    Q匹配结果是Q成功;匚w到的内容是:"@a"Q匹配到的位|是Q开始于2Q结束于4?BR>    q一步说明:"\b" ?"^" ?"$" cMQ本w不匚wM字符Q但是它要求它在匚wl果中所处位|的左右两边Q其中一Ҏ "\w" 范围Q另一Ҏ ?\w" 的范围?BR>
   
Q匹配结果是Q成功;匚w到的内容是:"end"Q匹配到的位|是Q开始于15Q结束于18?/P>

    一些符号可以媄响表辑ּ内部的子表达式之间的关系Q?/P>

表达?/P>

作用

|

左右两边表达式之?"? 关系Q匹配左Ҏ者右?/P>

( )

(1). 在被修饰匚wơ数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

    Q匹配结果是Q成功;匚w到的内容是:"Tom"Q匹配到的位|是Q开始于4Q结束于7。匹配下一个时Q匹配结果是Q成功;匚w到的内容是:"Jack"Q匹配到的位|时Q开始于15Q结束于19?BR>
   
Q匹配结果是Q成功;匚w到内ҎQ?go go go"Q匹配到的位|是Q开始于6Q结束于14?BR>
   
Q匹配的l果是:成功Q匹配到的内ҎQ?K?0.5"Q匹配到的位|是Q开始于6Q结束于10。单独获取括可围匹配到的内ҎQ?20.5"?/P>


2. 正则表达式中的一些高U规?/B>

2.1 匚wơ数中的贪婪与非贪婪

    在用修饰匹配次数的ҎW号Ӟ有几U表C方法可以同一个表辑ּ能够匚w不同的次敎ͼ比如Q?{m,n}", "{m,}", "?", "*", "+"Q具体匹配的ơ数随被匚w的字W串而定。这U重复匹配不定次数的表达式在匚wq程中,L可能多的匹配。比如,针对文本 "dxxxdxxxd"QD例如下:

表达?/P>

匚wl果

(d)(\w+)

"\w+" 匹配第一?"d" 之后的所有字W?"xxxdxxxd"

(d)(\w+)(d)

"\w+" 匹配第一?"d" 和最后一?"d" 之间的所有字W?"xxxdxxx"。虽?"\w+" 也能够匹配上最后一?"d"Q但是ؓ了整个表达式匹配成功,"\w+" 可以 "让出" 它本来能够匹配的最后一?"d"

    由此可见Q?\w+" 在匹配的时候,L可能多的匹配符合它规则的字W。虽然第二个举例中,它没有匹配最后一?"d"Q但那也是ؓ了让整个表达式能够匹配成功。同理,?"*" ?"{m,n}" 的表辑ּ都是可能地多匹配,?"?" 的表辑ּ在可匚w可不匚w的时候,也是可能的 "要匹?。这 U匹配原则就叫作 "贪婪" 模式 ?/P>

    非贪婪模式:

    在修饰匹配次数的ҎW号后再加上一?"?" P则可以匚wơ数不定的表辑ּ可能少的匹配,使可匚w可不匚w的表辑ּQ尽可能?"不匹?。这U匹配原则叫?"非贪? 模式Q也叫作 "勉强" 模式。如果少匚w׃D整个表达式匹配失败的时候,与贪婪模式类|非贪婪模式会最限度的再匹配一些,以整个表达式匹配成功。D例如下,针对文本 "dxxxdxxxd" 举例Q?/P>

表达?/P>

匚wl果

(d)(\w+?)

"\w+?" 尽可能的匚wW一?"d" 之后的字W,l果是:"\w+?" 只匹配了一?"x"

(d)(\w+?)(d)

Z让整个表辑ּ匚w成功Q?\w+?" 不得不匹?"xxx" 才可以让后边?"d" 匚wQ从而整个表达式匹配成功。因此,l果是:"\w+?" 匚w "xxx"

    更多的情况,举例如下Q?BR>
   
Q匹配的l果是:成功Q匹配到的内Ҏ "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符Ԍ 表达式中?"</td>" 与字符串中最后一?"</td>" 匚w?

   
Q将只得?"<td><p>aa</p></td>"Q?再次匚w下一个时Q可以得到第二个 "<td><p>bb</p></td>"?/P>


2.2 反向引用 \1, \2...

    表达式在匚wӞ表达式引擎会小括号 "( )" 包含的表辑ּ所匚w到的字符串记录下来。在获取匚wl果的时候,括号包含的表达式所匚w到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界Ӟ必须使用括h指定所要的范围。比如前面的 "<td>(.*?)</td>"?BR>
    其实Q?括号包含的表达式所匚w到的字符? 不仅是在匚wl束后才可以使用Q在匚wq程中也可以使用。表辑ּ后边的部分,可以引用前面 "括号内的子匹配已l匹配到的字W串"。引用方法是 "\" 加上一个数字?\1" 引用W?Ҏ号内匚w到的字符Ԍ"\2" 引用W?Ҏ号内匚w到的字符东y…以此类推,如果一Ҏ号内包含另一ҎP则外层的括号先排序号。换句话_哪一对的左括?"(" 在前Q那q一对就先排序号?/P>

    举例如下Q?BR>
   
Q匹配结果是Q成功;匚w到的内容是:" 'Hello' "。再ơ匹配下一个时Q可以匹配到 " "World" "?BR>
   
Q匹配结果是Q成功;匚w到的内容?"ccccc"。再ơ匹配下一个时Q将得到 999999999。这个表辑ּ要求 "\w" 范围的字W至重?ơ,?BR>
   
Q匹配结果是成功。如?"<td>" ?"</td>" 不配对,则会匚wp|Q如果改成其他配对,也可以匹配成功?/P>


2.3 预搜索,不匹配;反向预搜索,不匹?/B>

    前面的章节中Q我讲到了几个代表抽象意义的ҎW号Q?^"Q?$"Q?\b"。它们都有一个共同点Q那是Q它们本w不匚wM字符Q只是对 "字符串的两头" 或?"字符之间的缝? 附加了一个条件。理解到q个概念以后Q本节将l箋介绍另外一U对 "两头" 或?"~隙" 附加条g的,更加灉|的表C方法?/P>

    正向预搜索:"(?=xxxxx)"Q?(?!xxxxx)"

    格式Q?(?=xxxxx)"Q在被匹配的字符串中Q它Ҏ处的 "~隙" 或?"两头" 附加的条件是Q所在缝隙的右侧Q必能够匹配上 xxxxx q部分的表达式。因为它只是在此作ؓq个~隙上附加的条gQ所以它q不影响后边的表辑ּȝ正匹配这个缝隙之后的字符。这q?"\b"Q本w不匚wM字符?\b" 只是所在缝隙之前、之后的字符取来q行了一下判断,不会影响后边的表辑ּ来真正的匚w?BR>
   
Q将只匹?"Windows NT" 中的 "Windows "Q其他的 "Windows " 字样则不被匹配?BR>
   
Q将可以匚w6?f"的前4个,可以匚w9?9"的前7个。这个表辑ּ可以读解成:重复4ơ以上的字母数字Q则匚w其剩下最?位之前的部分。当Ӟq个表达式可以不q样写,在此的目的是作ؓ演示之用?/P>

    格式Q?(?!xxxxx)"Q所在缝隙的右侧Q必M能匹?xxxxx q部分表辑ּ?BR>
   
Q将从头一直匹配到 "stop" 之前的位|,如果字符串中没有 "stop"Q则匚w整个字符丌Ӏ?BR>
   
Q只能匹?"do"。在本条举例中,"do" 后边使用 "(?!\w)" 和?"\b" 效果是一L?/P>

    反向预搜索:"(?<=xxxxx)"Q?(?<!xxxxx)"

    q两U格式的概念和正向预搜烦是类似的Q反向预搜烦要求的条件是Q所在缝隙的 "左侧"Q两U格式分别要求必能够匹配和必须不能够匹配指定表辑ּQ而不是去判断右侧。与 "正向预搜? 一L是:它们都是Ҏ在缝隙的一U附加条Ӟ本n都不匚wM字符?BR>
    举例5Q表辑ּ "(?<=\d{4})\d+(?=\d{4})" 在匹?"1234567890123456" Ӟ匹配除了前4个数字和?个数字之外的中间8个数字。由?JScript.RegExp 不支持反向预搜烦Q因此,本条举例不能够进行演C。很多其他的引擎可以支持反向预搜索,比如QJava 1.4 以上?java.util.regex 包,.NET 中System.Text.RegularExpressions 命名I间Qboost::regex 以及
GRETA 正则表达式库{?/P>


3. 其他通用规则

    q有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解q程中没有提到?/P>

3.1 表达式中Q可以?"\xXX" ?"\uXXXX" 表示一个字W("X" 表示一个十六进制数Q?/P>

形式

字符范围

\xXX

~号?0 ~ 255 范围的字W,比如Q?A \x20" 表示

\uXXXX

M字符可以使用 "\u" 再加上其~号?位十六进制数表示Q比如:

3.2 在表辑ּ "\s"Q?\d"Q?\w"Q?\b" 表示Ҏ意义的同Ӟ对应的大写字母表C相反的意义

表达?/P>

可匹?/P>

\S

\D

匚w所有的非数字字W?/A>

\W

匚w所有的字母、数字、下划线以外的字W?/A>

\B

3.3 在表辑ּ中有Ҏ意义Q需要添?"\" 才能匚w该字W本w的字符汇?/P>

字符

说明

^

匚w输入字符串的开始位|。要匚w "^" 字符本nQ请使用 "\^"

$

匚w输入字符串的l尾位置。要匚w "$" 字符本nQ请使用 "\$"

( )

标记一个子表达式的开始和l束位置。要匚w括P请?"\(" ?"\)"

[ ]

用来自定义能够匹?'多种字符' 的表辑ּ。要匚w中括P请?"\[" ?"\]"

{ }

修饰匚wơ数的符受要匚w大括P请?"\{" ?"\}"

.

匚w除了换行W(\nQ以外的L一个字W。要匚w数Ҏw,请?"\."

?

修饰匚wơ数?0 ơ或 1 ơ。要匚w "?" 字符本nQ请使用 "\?"

+

修饰匚wơ数?1 ơ。要匚w "+" 字符本nQ请使用 "\+"

*

修饰匚wơ数?0 ơ或Lơ。要匚w "*" 字符本nQ请使用 "\*"

|

左右两边表达式之?"? 关系。匹?"|" 本nQ请使用 "\|"

3.4 括号 "( )" 内的子表辑ּQ如果希望匹配结果不q行记录供以后用,可以使用 "(?:xxxxx)" 格式

    举例1Q表辑ּ "(?:(\w)\1)+" 匚w "a bbccdd efg" ?/A>Q结果是 "bbccdd"。括?"(?:)" 范围的匹配结果不q行记录Q因?"(\w)" 使用 "\1" 来引用?/P>

3.5 常用的表辑ּ属性设|简介:IgnorecaseQSinglelineQMultilineQGlobal

表达式属?/P>

说明

Ignorecase

默认情况下,表达式中的字母是要区分大写的。配|ؓ Ignorecase 可匚w时不区分大小写。有的表辑ּ引擎Q把 "大小? 概念延?UNICODE 范围的大写?/P>

Singleline

默认情况下,数?"." 匚w除了换行W(\nQ以外的字符。配|ؓ Singleline 可ɞ数点可匚w包括换行W在内的所有字W?/P>

Multiline

默认情况下,表达?"^" ?"$" 只匹配字W串的开??和结??位置。如Q?BR>
①xxxxxxxxx②\n
③xxxxxxxxx?BR>
配置?Multiline 可以?"^" q可以匹配换行符之后Q下一行开始前 ?的位|,?"$" q可以匹配换行符之前Q一行结??的位|?/P>

Global

主要在将表达式用来替换时起作用,配置?Global 表示替换所有的匚w?/P>


4. l合提示

4.1 如果要要求表辑ּ所匚w的内Ҏ整个字符Ԍ而不是从字符串中找一部分Q那么可以在表达式的首尾使用 "^" ?"$"Q比如:"^\d+$" 要求整个字符串只有数字?/P>

4.2 如果要求匚w的内Ҏ一个完整的单词Q而不会是单词的一部分Q那么在表达式首?"\b"Q比如:?/P>

4.3 表达式不要匹配空字符丌Ӏ否则会一直得到匹配成功,而结果什么都没有匚w到。比如:准备写一个匹?"123"?123."?123.5"?.5" q几UŞ式的表达式时Q整数、小数点、小数数字都可以省略Q但是不要将表达式写成:"\d*\.?\d*"Q因为如果什么都没有Q这个表辑ּ也可以匹配成功?A ?/P>

4.4 能匹配空字符串的子匹配不要@环无限次。如果括号内的子表达式中的每一部分都可以匹?0 ơ,而这个括h体又可以匚w无限ơ,那么情况可能比上一条所说的更严重,匚wq程中可能死循环。虽然现在有些正则表辑ּ引擎已经通过办法避免了这U情况出现死循环了,比如 .NET 的正则表辑ּQ但是我们仍然应该尽量避免出现这U情c如果我们在写表辑ּ旉Cd@环,也可以从q一点入手,查找一下是否是本条所说的原因?/P>

4.5 合理选择贪婪模式与非贪婪模式?/P>

4.6 ?"|" 的左右两边,Ҏ个字W最好只有一边可以匹配,q样Q不会因?"|" 两边的表辑ּ因ؓ交换位置而有所不同?/P>


5. 搜烦更多正则表达式支?

在以下搜索字D中输入关键字,查找问题的答案?



Ben 2006-02-22 10:47 发表评论
]]>
[转]TCP/IP协议介绍http://m.tkk7.com/Ben/archive/2006/02/15/30770.htmlBenBenWed, 15 Feb 2006 03:13:00 GMThttp://m.tkk7.com/Ben/archive/2006/02/15/30770.htmlhttp://m.tkk7.com/Ben/comments/30770.htmlhttp://m.tkk7.com/Ben/archive/2006/02/15/30770.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/30770.htmlhttp://m.tkk7.com/Ben/services/trackbacks/30770.html [以太|接口(毕业设计Q]TCP/IP协议介绍
yzy1102 发表?2006-1-16 19:33:00

    TCP/IP协议Q或UCؓTCP/IP协议?/B>Q或互联|协议系列?/P>

TCP/IP协议?/B>
(?I>TCP/IP参考模?/I>划分)

应用?/TD> FTP SMTP HTTP ...
传输?/TD> TCP UDP
|络?/TD> IP ICMP ARP
链\?/TD> 以太|?/TD> 令牌?/TD> FDDI ...

    包含了一pd构成互联|基的网l协议。这些协议最早发源于国国防部的DARPA互联|项目。TCP/IP字面上代表了两个协议:TCP传输控制协议和IP互联|协议?/P>

    旉回放?983q??日,在这天,互联|的前nArpanet中,TCP/IP协议取代了旧的网l核心协议NCP(Network Core Protocol)Q从而成Z天的互联|的基石。最早的的TCP/IP由Vinton Cerf和Robert Kahn两位开发,慢慢地通过竞争战胜了其它一些网l协议的ҎQ比如国际标准化l织ISO的OSI模型。TCP/IP的蓬勃发展发生在上世U的90q代中期。当时一些重要而可靠的工具的出世,例如面描述语言HTML和浏览器MosaicQ导致了互联|应用的飞束发展?/P>

    随着互联|的发展Q目前流行的IPv4协议(IP Version 4QIP版本?已经接近它的功能上限。IPv4最致命的两个缺陷在?

  • 地址只有32位,IP地址I间有限;
  • 不支持服务等U?Quality of Service, Qos)的想法,无法理带宽和优先Q故而不能很好的支持C来多的实时的语音和视频应用。因此IPv6 (IP Version 6, IP版本? 出面Q用以取代IPv4?

    TCP/IP成功的另一个因素在与对为数众多的低层协议的支持。这些低层协议对应与OSI模型 中的W一?物理?和第二层(数据链\?。每层的所有协议几乎都有一半数量的支持TCP/IPQ例? 以太|?Ethernet)Qo牌环(Token Ring)Q光U数据分布接?FDDI)Q端对端协议( PPP)QX.25Q中(Frame Relay)QATMQSonet, SDH{?/P>

目录
1 TCP/IP协议栈组?BR>
2 必须协议
3 推荐协议
4 可选协?BR>
5 范例: 不同计算行的不同协议
6 参考文?BR>

   

 

 

 

    TCP/IP协议栈组?/H2>

    整个通信|络的Q务,可以划分成不同的功能块,x象成所谓的 ?层?。用于互联网的协议可以比照TCP/IP参考模型进行分cRTCP/IP协议栈v始于W三层协议IP(互联|协? 。所有这些协议都在相应的RFC文档中讨论及标准化。重要的协议在相应的RFC文档中均标记了状? “必Z?(required) Q“推荐?(recommended) Q“可选?(elective) 。其它的协议q可能有?试验?experimental) 或?历史?historic) 的状态?/P>

    必须协议

    所有的TCP/IP应用都必d现IP和ICMP。对于一个\由器(router) 而言Q有q两个协议就可以q作了,虽然从应用的角度来看Q这样一个\由器 意义不大。实际的路由器一般还需要运行许多“推荐“用的协议Q以及一些其它的协议?/P>

    在几乎所有连接到互联|上的计机上都存在的IPv4 协议出生?981q_今天的版本和最早的版本q没有多改变。升U版IPv6 的工作始?995q_目的在与取代IPv4。ICMP 协议主要用于攉有关|络的信息查N误等工作?/P>

    推荐协议

    每一个应用层(TCP/IP参考模?的最高层) 一般都会用到两个传输层协议之一: 面向q接的TCP传输控制协议和无q接的包传输的UDP用户数据报文协议 ?其它的一些推荐协议有:

  • TELNET (Teletype over the Network, |络电传) Q通过一个终?terminal)登陆到网l?q行在TCP协议??
  • FTP (File Transfer Protocol, 文g传输协议) Q由名知?q行在TCP协议? ?
  • SMTP (Simple Mail Transfer ProtocolQ简单邮件传输协? Q用来发送电子邮?q行在TCP协议? ?
  • DNS (Domain Name ServiceQ域名服? Q用于完成地址查找Q邮件{发等工作(q行在TCP和UDP协议? ?
  • ECHO (Echo Protocol, 回绕协议) Q用于查错及量应答旉(q行在TCP和UDP协议? ?
  • NTP (Network Time ProtocolQ网l时间协? Q用于网l同?q行在UDP协议? ?
  • SNMP (Simple Network Management Protocol, 单网l管理协? Q用于网l信息的攉和网l管理?
  • BOOTP (Boot ProtocolQ启动协? Q应用于无盘讑֤(q行在UDP协议??

    可选协?/H2>

    最常用的一些有

  • 支撑万维|WWW的超文本传输协议HTTPQ?
  • 动态配|IP地址的DHCP(Dynamic Host Configuration Protocol,动态主机配|协?Q?
  • 攉件用的POP3 (Post Office Protocol, version 3, 邮局协议) Q?
  • 用于加密安全登陆用的SSH (Secure ShellQ用于替代安全性差的TELNET) Q?
  • 用于动态解析以太网g地址的ARP (Address Resolution ProtocolQ地址解析协议) ?

    范例: 不同计算行的不同协议

  • 一个简单的路由器上可能会实现ARP, IP, ICMP, UDP, SNMP, RIP?
  • WWW用户端用ARP, IP, ICMP, UDP, TCP, DNS, HTTP, FTP?
  • 一台用L脑上q会q行如TELNET, SMTP, POP3, SNMP, ECHO, DHCP, SSH, NTP?
  • 无盘讑֤可能会在Zg比如ROM中实CARP, IP, ICMP, UDP, BOOT, TFTP (均ؓ面向数据报的协议Q实现v来相对简??/LI>

TCP/IP基础讲-1Q?层,2层,3层?

    读过关于|络的课E的Q都知道ISO-OSI 7层协议这个名词,许多书籍都会具体的画出那q图Q然后标注上物理层,数据链\层,|络层等{?背的大家要死.但是却又不知道具体这些层ơ干吗用的勒Q?

    其实在互联网中,׃实际使用的是TCP/IP模型Q也是DOD模型(现在不知道没关系Q后面会?.所?层模型在现实|络环境中只是一个理ZQ学I派的东?q个模型中,我们真正兛_的是下面??

1.物理?.?是的.q个名词q算Ҏ了解.|卡q有那些|线构成了这一?那些在网U中传播的二q制数据是q层的具体表?也就是说Q这一层上面没有什么协?不是很精的说法Q但是你可以q么理解).有的都是甉|而已.我们把两台机器用|线qv?或者用HUB把机器都qv来,q些工作是物理层的工作.

    ?个设备属于物理层的,一个是中器,一个是HUB.大家知道.物理上面的连U距M长就会生电信号的衰?Z重新加强q个信号Q我们就需要在一定距M后加上一个信h大器Q这是中?repeater)

    ?..q个比较Ҏ理解.repeater是q接?根网U之间的?没有做Q何处?所以只是一个物理设?属于1层的.

    那么集线?HUB) 呢?q个怎么会是?层?Q?g非常难以理解.

    当我说出HUB的本质,大家p够清楚了解了

    HUB的本质其实只是一个多口中l器(MULTI PORT REPEATER) .?..q样大家能够理解?HUB不叫多口中器其实只是ؓ了销售上面的{略.他的本质是q接多根|线的一个物理设?也是不对l过的电信号做Q何逻辑处理?

2.数据链\?/STRONG>

    Ƨ~q个名词有些别扭?DATA LINK?英文g更加Ҏ理解.

    q个层面上面的东西不再是电信号了.而是DATA?对,既然是DATA有了逻辑关系?q个层面上面的基本单位是?Frame) .q层和物理层的接触是最紧密?他是把从|线上面传输的电{换成0?的组?

    物理层只是网卡对|线发出或者接受各U电q信P那就是说物理层是无法判别甉|的来源和目标?那么把电打??的之后.里面有逻辑数据?有了数据Q就可以判别数据从何而来Q到何处?所以也可以真正的形成LINK.

    既然可以判别地址Q那么地址是按照什么来判别的呢Q?

    那就是最重要的概念之一:MAC地址

    大家肯定都听说过我们的网卡都有MAC地址

    有些人可能也知道MAC地址都是唯一?

    ?MAC地址是全球唯一?也就是说你的|卡虽然便宜.但是他也是世界上独一无二?

    有些他可以改MAC.那就不是唯一??虽然可以更改Q那只是ƺ骗上层对封包里面的MAC地址q行改写.你网卡真正的MAC地址是固化的.无法修改?

    我们有了MAC地址?q样可以有针对性对所有连接在一L计算行通讯?是的.我们l于可以在一个局域网内通讯?

    但是有个问题我们前面没有提到.是既然物理层传输的是电信号.那么如果我有2台机器一起发电信P信号岂不是؜׃么?

    非常正确.q个问题在网l里面成?撞"Q所以协议里面规定了如果你需要往外发数据Q一定需要先看看늼里面有没有别的信?如果没有Q那可以发.如果2者同时发送,到撞之后2者分别等待一个随机时_然后重发.q个是重要?撞?".

    ?看来问题解决?不是?现在整个|络可以正常q行?

    实如此.但是如果q接在网l上的计机来多Q那么碰撞的现象会越来越频繁.q样效率一定很低了.?q里q有一个重要概?冲突?".在同一个物理上q接的网l上的所有设备是属于同一个冲H域?

    接着需要引入我们的2层设备来分割冲突域了.

    |桥(Bridge) 是q接2个不同的物理|络?主要功能是在2个网l之间{发Frame.因ؓ从实际中我们可以知道.其实很多时候ƈ非整个网l都在相互通讯.最多相互通讯的一l计机我们可以分在一个小的冲H域?q样分割以后可以减少冲突域,也就相对的减了冲突的机?而之间用网桥来桥接Q由于网桥两边的通讯不是非常频繁Q所以用网桥来?边作?代言?.q样L一个小|络里面产生冲突的机会就了.

    交换?Switch)是我们最熟悉的设备了Q交换机的本质其实就是一个多口网?Multi port Bridge) .同理可得.交换机的每个口后面都是一个冲H域.我们都说交换机比HUB快,是因ؓ交换机分割了所有的冲突?

    ׃现在交换机非怾?所以一般我们都是直接在交换机的口上接计机.q样每台计算机都是一个独立的冲突?q样撞的问题就没有?所以速度是比HUB?

    而前面说q?2层设备主要是个{发的功能.交换机的主要功能是转发?而不是让所有的冲突域直接物理连?所以交换机有CPUQ有内存Q可以对frameq行处理{等.q些也是交换机和HUB的区?


3.|络?

    我们前面的一些技术就可以构徏出局域网?有了|络层以?数据才能够真正的在整个世界间传?

    ׃伦纳?博萨?Leonard Bosack)和姗?L(Sandy Lerner)Z解决他们之间的通信问题(关于路由器发明的版本有很?你听到的别的说法可能比这个说法更准确Q但是谁知道?呵呵).路由器被发明用来解决"信息孤岛"问题.而且如果是由SWITCH来构建整个网l,那么整个|络会?中心节点"Q这样也不符合ARPANET的初?所以我们有了这一?(q样说可能会感觉本末倒置Q但是先q么理解?)

    q一层的基本单元是包(Packet) .所有的包都有一个IP??听v来很熟悉不是?IP是用来在这层上面标识包的来源和目的地址?

    q层的一个主要概念就?路由 "Q也是和switch一P把包转发到其他的地方.不过有个不同的地方,switch只有知道具体的MAC在哪里的情况下才能够发送给指定的计机Q而\由则不需要知道最lIP所在的计算机在哪个位置Q只要知道那个途径可以q去可以工?

    q?层构Z整个|络的基.׃TCP/IP模型最下面2层合q成Z层,所以在TCP/IP里面dq?层也是整个构架最基础的内?而网l方面要做的工作也都是针对于q?层做?


2: TCP/IP.真实世界的模?/STRONG>

    上一讲里面我们说qOSI 7层模型只是一个理论模?而实际中只需要保?层的功能能够实现,实际分层无需按照7层来?而且如果真的??那么数据处理的速度便要慢许?

    在实际应用中.使用最多的便是DoD模型.也成为TCP/IP协议?

    DoD模型(Department Of Defanse Model 国国防部模? ֐思义,是美国国防部设计的一个网l模?最早用于ARPANET.q些话可能在许多教材的第一章就会讲?但是一般教材对于DoD模型与OSI模型对应关系都没有讲?或者很多是模糊或者错误的.

    在这里我p描述一?者对应关p?OSI模型?层我们已l知道了,而DoD模型则只??下面是对应关p?

    OSI                                  DoD

    7.Application     ?nbsp;    

    6.Presentation   |->       4. Application/Process

    5.Session         ?nbsp;    

    4.Transport       --->       3. Host to Host

    3.Network        --->       2. Internet

    2.Data Link      ?>       1. Network Access

    1.Physical        ?


    ׃我不会制表符.所以图有些隄.其实是OSI?.2层对应DoD的第1?

OSI?.6.7对应DoD的第4?

    其实q个q是比较Ҏ记忆?

    ׃物理层和数据链\层非常密?所以分Z?然后上面依次对应,最上面的一大块成ؓ应用?处理?

现在我们有了一个可用的实际模型?不过一般我们在描述某个讑֤或者协议的时?q是会用OSI的模?比如我们在讨论SWITCH的时?׃说他是一?层的讑֤.而\由器是一?层的讑֤,q会有一些特D的讑֤,比如3层交换机,4层交换机.q些都是使用OSI模型q行分类?q点大家不要搞؜淆了.


    我们一直听说TCP或者UDP.q有什么SMTP.POP3.q些协议到底是在哪一层定义的?接下来的一张图会给大家一个非常清晰的概念?不能是图拉 :D ).


    4. APPLICATION

    HTTP,FTP,telnet,SNMP,SMTP,POP3,DNS {等


    3.Host to Host

    TCP,UDP


    2.internet

    ICMP,ARP,RARP,IP


    1.Network Access

    Ethernet,FastEthernet,Token Ring {等

    ?..q下清楚?让我们从下至上来看看

    首先是最下层?包括了以太网,快速以太网,q有现在的千M以太|等{的协议,q些协议规定了线~的l数.q接方式{等物理层的东西.q有底层使用MAC通讯的方式等{?


    接下来是IP.ARPq些.IP在OSI模型的时候也说过.通过IP地址.我们在{发包的时候无需知道具体目标机的位置.而\由器自然会根据\p来{?最后一站一站的慢慢传?辑ֈ最l目?而ARP协议是在IP和MAC之间转换用的.

 我在上一章提q?׃有了路由?IP,整个|络才真正能够覆盖全?所以这一层叫做internet大家也应该容易记忆了.


    WOW.TCP,UDP是我们听说最多的?他是属于控制|络q接?在OSIUCؓTransport.传输?在DoD内是Host to Host 端对?意思其实是一L.是在在2台计机之间构徏Z个虚拟的通讯通道?


    最上面一层就无穷无尽?所有的最l应用层的东襉K在这?你甚臛_以定义你自己的协议类?q些都是完全可以?因ؓ本nq一层就是提供给开发h员自行发挥的.只是上面列D的都l过标准化了.


    TCP包头l构

    源端?16?

    目标端口  16?

    序列?nbsp; 32?

    回应序号  32?

    TCP头长?nbsp; 4?

    reserved 6?

    控制代码 6?

    H口大小 16?

    偏移?16?

    校验?16?

    选项   32?可?

    q样我们得出了TCP包头的最大?是20字节.


    UDP包头l构

    源端?16?

    目的端口 16?

    长度  16?

    校验?nbsp; 16?

    ?..UDP的包很?实如此.因ؓUDP是非可靠q接.设计初衷是可能快的将数据包发送出?所以UDP协议昑־非常_.

    有一个问?gq些头里面怎么没有IP地址?没有IP地址q些包往哪里发送那?

    ?你观察的很仔l?TCP和UDP的头里面实没有MIP信息.我们回头想一下TCP和UDP是属于DoD的哪一层的? 对了!是第3? 而IP则位于模型的W二?也就是他们两者虽然有联系.但是不属于同一?

    模型的一个重要规则就?当发送端发送一个数?上一层将数据传往下一层的时?上一层的包就成ؓ了下一层包的数据部?

    而到接受端接受到数据.下一层将本层的头部信息去掉后交给上一层去处理.

那么我们来看看实际例?/STRONG>:

    假我们通过SMTP协议发送数据AAA到另外一D?那么数据先会被加上SMTP的头.成ؓ[SMTP]AAA.往下发送到TCP?成ؓ[TCP][SMTP]AAA.再往下送到internet层[IP][TCP][SMTP]AAA.然后成ؓ[MAC][IP][TCP][SMTP]AAA

    q样通过enternet或者FastEnternet发送到路由?路由器得到后替换自己的MAC地址上去.传到下一U的路由?q样l过镉K跋?最l这个数据流到达目标?


    目标机先从下面一层开?LMAC,成ؓ[IP][TCP][SMTP]AAA往上到IP??比对后是发送给我这个IP?L,成ؓ[TCP][SMTP]AAA.TCP接到了查看校验和,没错.往上[SMTP]AAA.最后SMTP协议去解?得到了AAA.


    万里长征l于l束.我们也将AAA发送到了目标机.大家也应该明白了ZTCP包头和UDP包头里面没有IP地址?因ؓIP位于他们下面一?TCP和UDP的包头信息是作ؓIP包的数据D|传送的.


    IP层可不管那许?他只他那层的协?也就是管把从上面层来的数据加上自q?传到下面一?把从下面一层来的数据去掉头.传到上面一?


    每层都是q么q的.完美的契合完成了数据包的最l旅E?

TCP/IP的通讯协议

  q部分简要介l一下TCP/IP的内部结构。TCP/IP协议l之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议Q例如T1和X.25、以太网以及RS-232串行接口Q之上。确切地_TCP/IP协议是一l包括TCP协议和IP协议QUDPQUser Datagram ProtocolQ协议、ICMPQInternet Control Message ProtocolQ协议和其他一些协议的协议l?

TCP/IP整体构架概述

  TCP/IP协议q不完全W合OSI的七层参考模型。传l的开攑ּpȝ互连参考模型,是一U通信协议?层抽象的参考模?其中每一层执行某一特定d。该模型的目的是使各U硬件在相同的层ơ上怺通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表C层和应用层。而TCP/IP通讯协议采用?层的层l构Q每一层都呼叫它的下一层所提供的网l来完成自己的需求。这4层分别ؓQ?

  应用层:应用E序间沟通的层,如简单电子邮件传输(SMTPQ、文件传输协议(FTPQ、网l远E访问协议(TelnetQ等?

  传输层:在此层中Q它提供了节炚w的数据传送服务,如传输控制协议(TCPQ、用h据报协议QUDPQ等QTCP和UDPl数据包加入传输数据q把它传输到下一层中Q这一层负责传送数据,q且定数据已被送达q接收?

  互连|络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到辄的主机(但不查是否被正确接收Q,如网际协议(IPQ?

  |络接口层:对实际的|络媒体的管理,定义如何使用实际|络Q如Ethernet、Serial Line{)来传送数据?/P>

TCP/IP中的协议

  以下单介lTCP/IP中的协议都具备什么样的功能,都是如何工作的:

  1Q?IP

  |际协议IP是TCP/IP的心脏,也是|络层中最重要的协议?

  IP层接收由更低层(|络接口层例如以太网讑֤驱动E序Q发来的数据包,q把该数据包发送到更高?--TCP或UDP层;相反QIP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的Q因为IPq没有做M事情来确认数据包是按序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址Q源地址Q和接收它的L的地址Q目的地址Q?

  高层的TCP和UDP服务在接收数据包Ӟ通常假设包中的源地址是有效的。也可以q样_IP地址形成了许多服务的认证基础Q这些服务相信数据包是从一个有效的L发送来的。IP认包含一个选项Q叫作IP source routingQ可以用来指定一条源地址和目的地址之间的直接\径。对于一些TCP和UDP的服务来_使用了该选项的IP包好象是从\径上的最后一个系l传递过来的Q而不是来自于它的真实地点。这个选项是ؓ了测试而存在的Q说明了它可以被用来ƺ骗pȝ来进行^常是被禁止的q接。那么,许多依靠IP源地址做确认的服务生问题ƈ且会被非法入c?

  2. TCP

  如果IP数据包中有已l封好的TCP数据包,那么IP把它们向‘上’传送到TCP层。TCP包排序q进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照序收到的包可以被排序,而损坏的包可以被重传?

  TCP它的信息送到更高层的应用E序Q例如Telnet的服务程序和客户E序。应用程序轮将信息送回TCP层,TCP层便它们向下传送到IP层,讑֤驱动E序和物理介质,最后到接收斏V?

  面向q接的服务(例如Telnet、FTP、rlogin、X Windows和SMTPQ需要高度的可靠性,所以它们用了TCP。DNS在某些情况下使用TCPQ发送和接收域名数据库)Q但使用UDP传送有兛_个主机的信息?

  3.UDP

  UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些用虚电\的面向连接的服务QUDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或TelnetQ这些服务需要交换的信息量较。用UDP的服务包括NTPQ网落时间协议)和DNSQDNS也用TCPQ?

  ƺ骗UDP包比ƺ骗TCP包更ҎQ因为UDP没有建立初始化连接(也可以称为握手)Q因为在两个pȝ间没有虚电\Q,也就是说Q与UDP相关的服务面临着更大的危险?

  4.ICMP

  ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的\径信息。ICMP的‘Redirect’信息通知L通向其他pȝ的更准确的\径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了QICMP可以使TCPq接‘体面地’终止。PING是最常用的基于ICMP的服务?

  5. TCP和UDP的端口结?

  TCP和UDP服务通常有一个客?服务器的关系Q例如,一个Telnet服务q程开始在pȝ上处于空闲状态,{待着q接。用户用Telnet客户E序与服务进E徏立一个连接。客L序向服务q程写入信息Q服务进E读Z息ƈ发出响应Q客L序读出响应ƈ向用h告。因而,q个q接是双工的Q可以用来进行读写?

  两个pȝ间的多重Telnetq接是如何相互确认ƈ协调一致呢QTCP或UDPq接唯一C用每个信息中的如下四进行确认:

  源IP地址  发送包的IP地址?

  目的IP地址 接收包的IP地址?

  源端口   源系l上的连接的端口?

  目的端口  目的pȝ上的q接的端口?

  端口是一个Y件结构,被客L序或服务q程用来发送和接收信息。一个端口对应一?6比特的数。服务进E通常使用一个固定的端口Q例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广Zh知’的Q因为在建立与特定的L或服务的q接Ӟ需要这些地址和目的地址q行通讯?/P>




Ben 2006-02-15 11:13 发表评论
]]>
有关webservice的一些介l和调用Ҏhttp://m.tkk7.com/Ben/archive/2006/02/13/30473.htmlBenBenMon, 13 Feb 2006 08:51:00 GMThttp://m.tkk7.com/Ben/archive/2006/02/13/30473.htmlhttp://m.tkk7.com/Ben/comments/30473.htmlhttp://m.tkk7.com/Ben/archive/2006/02/13/30473.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/30473.htmlhttp://m.tkk7.com/Ben/services/trackbacks/30473.html阅读全文

Ben 2006-02-13 16:51 发表评论
]]>
[转脓]使用jsp实现word、excel格式报表打印 http://m.tkk7.com/Ben/archive/2006/01/05/26772.htmlBenBenThu, 05 Jan 2006 12:00:00 GMThttp://m.tkk7.com/Ben/archive/2006/01/05/26772.htmlhttp://m.tkk7.com/Ben/comments/26772.htmlhttp://m.tkk7.com/Ben/archive/2006/01/05/26772.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/26772.htmlhttp://m.tkk7.com/Ben/services/trackbacks/26772.html转蝲 Qevan 原创Q?BR> 

title: 使用JSP实现WORD、EXCEL格式报表打印

author: evan

email: maioto:evan_zhao@hotmail.com

date: 2003-08-21


因ؓms word和excel的文档都支持html文本格式Q因此可以先用word或excel做好模版Q另存ؓWeb,然后该htmlҎjspQ将数据部分动态填入即可,不用很辛苦的调整格式
 
word面只要在jsp头设|如下指令:
<%@page contentType="application/msword;charset=GBK" %>
 
excel如下Q?BR><%@page contentType="application/vnd.ms-excel;charset=GBK" %>

使用q种方式客户端必d装有office软gQ用戯问时在ie中直接用word或excel打开该页面?/P>

此方法优势是模板设计、调整方便,无需在服务器端用复杂的POI或jxl技术,也无需在客L使用ActiveX控g技术,更安全、方便,L实现较好的打印效果?nbsp;

microsoft关于服务器端动态创建office文档的资料(aspCZQ: 
http://support.microsoft.com/default.aspx?scid=KB;en-us;301044&
 
单示例:

使用word建立一文档Q画表格如下Q?BR>----------------------------
| 用户?nbsp;| 真实姓名 | 性别 |
----------------------------
| guest  | 路h?nbsp;  | ?nbsp;  |
----------------------------
保存为Webtest.htmQ?nbsp;test.htm改名为test.jspQ修改其中guest、\人甲、男Z数据库动态查询,如下Q?/P>

<%@ page contentType="application/msword;charset=GBK" %>
<%@ page import="java.sql.*" %>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=GB2312">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<title>用户信息</title>
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Author>evan zhao</o:Author>
  <o:LastAuthor>evan zhao</o:LastAuthor>
  <o:Revision>1</o:Revision>
  <o:TotalTime>1</o:TotalTime>
  <o:Created>2003-08-20T16:26:00Z</o:Created>
  <o:LastSaved>2003-08-20T16:27:00Z</o:LastSaved>
  <o:Pages>1</o:Pages>
  <o:Company>taiping</o:Company>
  <o:Lines>1</o:Lines>
  <o:Paragraphs>1</o:Paragraphs>
  <o:Version>9.2812</o:Version>
 </o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:PunctuationKerning>
  <w:DrawingGridVerticalSpacing>7.8 ?lt;/w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  <w:Compatibility>
   <w:SpaceForUL>
   <w:BalanceSingleByteDoubleByteWidth>
   <w:DoNotLeaveBackslashAlone>
   <w:ULTrailSpace>
   <w:DoNotExpandShiftReturn>
   <w:AdjustLineHeightInTable>
   <w:UseFELayout>
  </w:Compatibility>
 </w:WordDocument>
</xml><![endif]-->
<style>
<!--
 /* Font Definitions */
@font-face
    {font-family:宋体;
    panose-1:2 1 6 0 3 1 1 1 1 1;
    mso-font-alt:SimSun;
    mso-font-charset:134;
    mso-generic-font-family:auto;
    mso-font-pitch:variable;
    mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
    {font-family:"\@宋体";
    panose-1:2 1 6 0 3 1 1 1 1 1;
    mso-font-charset:134;
    mso-generic-font-family:auto;
    mso-font-pitch:variable;
    mso-font-signature:3 135135232 16 0 262145 0;}
 /* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
    {mso-style-parent:"";
    margin:0cm;
    margin-bottom:.0001pt;
    text-align:justify;
    text-justify:inter-ideograph;
    mso-pagination:none;
    font-size:10.5pt;
    mso-bidi-font-size:12.0pt;
    font-family:"Times New Roman";
    mso-fareast-font-family:宋体;
    mso-font-kerning:1.0pt;}
 /* Page Definitions */
@page
    {mso-page-border-surround-header:no;
    mso-page-border-surround-footer:no;}
@page Section1
    {size:595.3pt 841.9pt;
    margin:72.0pt 90.0pt 72.0pt 90.0pt;
    mso-header-margin:42.55pt;
    mso-footer-margin:49.6pt;
    mso-paper-source:0;
    layout-grid:15.6pt;}
div.Section1
    {page:Section1;}
-->
</style>
</head>

<body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'>

<div class=Section1 style='layout-grid:15.6pt'>


<table border=1 cellspacing=0 cellpadding=0 style='border-collapse:collapse;
 border:none;mso-border-alt:solid windowtext .5pt;mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
 <tr>
  <td width=189 valign=top style='width:142.0pt;border:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
  mso-hansi-font-family:"Times New Roman"'>用户?lt;/span></p>
  </td>
  <td width=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;
  border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
  mso-hansi-font-family:"Times New Roman"'>真实姓名</span></p>
  </td>
  <td width=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;
  border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
  mso-hansi-font-family:"Times New Roman"'>性别</span></p>
  </td>
 </tr>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

String url="jdbc:odbc:mydb";

//q接mydb数据?BR>Connection con=DriverManager.getConnection (url, "", ""); 

try{
  Statement stmt=con.createStatement(); 

  //查询employee?BR>  ResultSet rs=stmt.executeQuery("select user_name, real_name, gender from employee ");

  while(rs.next()){
%>

 <tr>
  <td width=189 valign=top style='width:142.0pt;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span lang=EN-US><%=rs.getString("user_name")%></span></p>
  </td>
  <td width=189 valign=top style='width:142.05pt;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
  mso-hansi-font-family:"Times New Roman"'><%=rs.getString("real_name")%></span></p>
  </td>
  <td width=189 valign=top style='width:142.05pt;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
  mso-hansi-font-family:"Times New Roman"'><%=rs.getString("gender")%></span></p>
  </td>
 </tr>

<%
  } // end while
  
  rs.close();
  stmt.close();
} finally {
  con.close();
}
%> 
 
</table>

<p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>

</div>

</body>

</html>



Ben 2006-01-05 20:00 发表评论
]]>
[转脓]2005q?1月程序语a世界排行?Java居首?http://m.tkk7.com/Ben/archive/2005/12/23/25237.htmlBenBenFri, 23 Dec 2005 08:53:00 GMThttp://m.tkk7.com/Ben/archive/2005/12/23/25237.htmlhttp://m.tkk7.com/Ben/comments/25237.htmlhttp://m.tkk7.com/Ben/archive/2005/12/23/25237.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/25237.htmlhttp://m.tkk7.com/Ben/services/trackbacks/25237.html摘要Q?BR>q日来,在TIOBEE序员社Z公布了其2005q?1月的E序语言排行榜。这得注意的是PHP卛_过C++成ؓ了排行榜的老三Q而Java作ؓ开源先锋首当其冲的成ؓ了龙头老大Qƈ且仍然保持着很好的增长势头?BR>


转蝲Q{载请保留本信息,本文来自http://www.matrix.org.cn/resource/news/315.html


版权xQ?/FONT>转蝲必须保留以下信息
作者:cleverpig

可以自由转蝲, 转蝲请保留下面的作者信?

作?cleverpig(http://www.matrix.org.cn/blog/cleverpig)


q日来,在TIOBEE序员社Z公布了其2005q?1月的E序语言排行榜。这得注意的是PHP卛_过C++成ؓ了排行榜的老三Q而Java作ؓ开源先锋首当其冲的成ؓ了龙头老大Qƈ且仍然保持着很好的增长势头?BR>
q个排行榜每月更Cơ,其排名顺序按照世界范围内的技术工E师、讲师、第三方厂商的调查依据,q查询了目前行的搜索引擎:Google,MSN,YahooQ结合前两者的数据计算后得出的。根据TIOBE的观点,此排行榜是被E序员们用来查自qE序技能是否过Ӟ或者作为徏立新的Y件系l时q行参考之依据Qƈ非意味着哪种语言是最好的?BR>
1。世界前20位语a排行榜:




2。世界前10位语a在前五年内长期发展趋势图Q?BR>



3。世界前30-50位语a排行榜:







囄说明Q?BR>* (Position)Q此列表明当前语a与去q位|的变化?BR>* RatingsQ在查询搜烦引擎计算排名序时用了 '+" programming" -tv -channel'公式Q对?2个月内GoogleQMSNQYahooQ和Google新闻l的数据q行查询。注意此公式应用于标准的Google web点击率、标准的MSN web点击率、标准的YahooQweb点击率和标准的Google新闻l点ȝ。这里的“标准”意味着一ơ对?0位语aweb点击率d的查询是均匀分布的,即保证了排名的相对公正性和U学性?BR>* (Ratings)Q?此列表明当前语言在上12个月内的排名变化?BR>* StatusQ带有“A”的E序语言被认为是L语言?BR>带有“A-”和“A--”表C程序语a位于“A”和“B”之间?BR>从支持能力的观点看,量在工业的、Q务危机的软gpȝ中用带有“A”的LE?序语a?BR>如果某种语言在上3个月内具有超q?.7%的增长率Q则此语a获得“A”状态。上两个月内h过0.7%的增长率的程序语a相应的将获得“A--”和“A-”状态?/DIV>

Ben 2005-12-23 16:53 发表评论
]]>
Jsp如何实现|页的重定向http://m.tkk7.com/Ben/archive/2005/12/20/24785.htmlBenBenTue, 20 Dec 2005 06:26:00 GMThttp://m.tkk7.com/Ben/archive/2005/12/20/24785.htmlhttp://m.tkk7.com/Ben/comments/24785.htmlhttp://m.tkk7.com/Ben/archive/2005/12/20/24785.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/24785.htmlhttp://m.tkk7.com/Ben/services/trackbacks/24785.html1Q可以用:

  response.sendRedirect("http://www.foo.com/path/error.html");

  2Q可以手工修改HTTP header的Location属性,如下Q?BR>
Q?
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/index.html";
response.setHeader("Location",newLocn);
%Q?

  3Q也可以使用forward:

  Qjsp:forward page="/newpage.jsp" /Q?

  h意:只能在Q何输没有发送到客户端之前用这U方式?BR>
  5.6 cMglobal.asa的做?

  在JSP中没有global.asa的对应物。但可以有一个workaround来运行。例如,如果你需要存储或存取application scope变量Q你L可以创徏一个JavabeanQƈ在页面中需要这些变量的地方它包含q来?

Qjsp:useBean id="globals" scope="application" class="com.xxx.GlobalBean"/Q?

  但是Q也有一些品具有这L对应Q?BR>
  Allaire公司的品JRun 3.0提供global.jsa。JRun 2.3.3仍然l予支持Q但只对JSP 0.92。当JRun 3.0最l推出时它将支持用于JSP 1.0?.1的global.jsa?

  你可以从http://beta.allaire.com/jrun30得到JRun 3.0 beta 5

  另外QOracle的JSP支持globals.jsa?

  5.7 jsp昄当前旉

Q?@ page import="Java.util.*, Java.text.*" %Q?BR>QHTMLQ?BR>QHEADQ?BR>QTITLEQJSP to display the current timeQ?TITLEQ?BR>Q?HEADQ?BR>QBODYQ?BR>The current time is:
Q?
Date now = new Date();
out.println(DateFormat.getTimeInstance().format(now));
%Q?BR>Q?BODYQ?BR>Q?HTMLQ?

  5.8在JSP中创建目?Mkdir(String path)

Q?@ page import="Java.io.*" %Q?BR>Q?!
String Mkdir(String path)
{
String msg=null;
Java.io.File dir;

// 新徏文g对象
dir =new Java.io.File(path);
if (dir == null) {
msg = "错误原因:QBRQ对不vQ不能创建空目录Q?;
return msg;
}
    if (dir.isFile()) {
    msg = "错误原因:QBRQ已有同名文ӞBQ? + dir.getAbsolutePath() + "Q?BQ存在?;
    return msg;
    }
    if (!dir.exists())
{
    boolean result = dir.mkdirs();
        if (result == false) {
    msg = "错误原因:QBRQ目录<bQ? + dir.getAbsolutePath() + "Q?BQ创建失败,原因不明Q?;
        return msg;
    }
   // 如果成功创徏目录Q则无输出?BR>    // msg ="成功创徏目录: QBQ? + dir.getAbsolutePath() + "Q?BQ?;
    return msg;
    }
  else {
      msg = "错误原因:QBRQ目录<bQ? + dir.getAbsolutePath() + "Q?bQ已存在?;
    }
  return msg;
}
%Q?BR>Q?
String filepath = "/usr/home/hoyi/html/dir";
String opmsg = Mkdir(filepath);
%Q?

  5.9return 转ؓQbrQ函?

public static String returnToBr(String sStr)
{
if (sStr == null // sStr.equals(""))
{
return sStr;
}

String sTmp = new String();
int i = 0;

while (i Q? sStr.length()-1)
{
if (sStr.charAt(i) == '\n')
{
sTmp = sTmp.concat("QbrQ?);
}
else
{
sTmp = sTmp.concat(sStr.substring(i,i+1));
}
i++;
}
return sTmp;
}


Ben 2005-12-20 14:26 发表评论
]]>
SWT……内q?http://m.tkk7.com/Ben/archive/2005/12/12/23528.htmlBenBenMon, 12 Dec 2005 10:23:00 GMThttp://m.tkk7.com/Ben/archive/2005/12/12/23528.htmlhttp://m.tkk7.com/Ben/comments/23528.htmlhttp://m.tkk7.com/Ben/archive/2005/12/12/23528.html#Feedback0http://m.tkk7.com/Ben/comments/commentRss/23528.htmlhttp://m.tkk7.com/Ben/services/trackbacks/23528.html SWT……内q? FooSleeper原文Q?BR>http://groups.yahoo.com/group/straight_talking_java/
http://groups.yahoo.com/group/straight_talking_java/messages/24236

译整理Q?/B>FooSleeper
最后修改:2004-03-03


译注Q?/B>本文来自straight_talking_java@yahoogroups.com讨论l,已经是一q多前的文章。Alan Williamson是Java Developers Journal的编辑,下文来自他在IBM的一个消息来源。SWT和Swing的论争我见过不少QNetbeans和Eclipse的也同样多。译者翻译此文ƈ不是要激起什么争执,也不是支持哪一方(虽然我的是站在SWT一边的Q,更不是要dAmy。我最重要的理由是Q这是一有的文章。里面有内幕、线人、公司政沅R垄断巨头、美奟뀁商界风云……够拍一出电影。有,q就够了。不q此文反映了IBM对Swing的看法和SWT的由来,q是有一点营ȝ?BR>
From:  Alan Williamson <alan@n-ary.com>
Date:  Wed Nov 6, 2002  10:31 am 
Reply-To: <straight_talking_java@yahoogroups.com>
To: <straight_talking_java@yahoogroups.com>
Subject:  SWT ... the scoop?QSWT……内q?Q?BR>
好了q就来……阅诠Z…消化……再阅读……再消化…?BR>;-) 

--------------------------------
谢谢你的回复。我很乐意给你提供Swing和SWT背后的一些信息,既然你还把我当作你秘密的“IBM内幕Uh”?BR>
要想弄清楚ؓ什么一切都被弄得如此؜乱,要从几年前只存在AWT的时候说赗SUN当时已经建立了一套基本的可移植控件类Q这些类映射C同操作系l上的原生窗口组Ӟnative widgetQ,昄下一步应该l增套模型,除了初始的CUA 92lgQ文字、按钮等{)Q再l箋加上表格、树、记事本、滑块等{……当时的AWTq满是漏z,q不能称为可靠,q需要SUN的coder们去修补。SUN的developer们如Graham和OttoL习惯于公开把他们的bug归咎为操作系l的差异Q比如“Windows和OS/2的焦Ҏ序不同”或者“在……之间Ctrl-X的行Z一样”,以及其他苍白的托辞,好让批评的火力从SUN太早释出代码q个问题的真怸Ud。然后Amy Fowler来到了SUN。不是我大男子主义,Amy是个聪明的美奻I大多数呆头呆脑只懂技术的开发h员都要被Ҏ在手里?BR>
Amy来自一家Smalltalk公司Q叫做ObjectshareQ在那里她负责搞UIcd。跟Java相比Smalltalk的历史有些悲惨,曑և何时?家庞大的Smalltalk公司——IBM、Parc-Place和Digitalk。在90q代初期3家公司的市场份额大致相等Q生zL好的。Parc-Place采用仿窗口部Ӟemulated widgetsQ的设计Q即Swing的设计)QIBM和Digitalk则采用原生窗口部Ӟnative widgetsQ。后来IBM压倒了另外两家Q因此他们打合q成一Ӟ假设叫做Parc-Place Digitalk。随后当他们试图他们的产品融合C个叫做Jigsaw的计划中时爆发了一场大战,计划׃政治原因p|了(开发h员实际上已经能让它运转v来)Q就因ؓ原生和仿造两zL。Amy赢得了精上的胜利,不过在IBM我们赢得了他们所有的生意Q因两家公司在一整年里除了吵架什么都没做。当埃落定之后PPDQParc-Place Digitalk当时已改名ؓObjectshareQ跟Windscale改名为Sellafield的原因相同——让Z淡忘之前发生的灾难)的股hg60元掉到了低?元1股。他们因Z报收入被NASDAQ摘牌Q从此消失。此时SUN正走上与PPDcM的技术方向,于是PDD的技术h员都把他们的历投CSUN。Amy被雇佣了Q她承诺通过轻量U方案解x有窗口组件的问题Q因此说服SUN理层让她当了GUI开发部门的头头。她是拿着“这里原来的人都搞砸了,我是来解决的”的钥匙q来的。随后Amy雇䄦了所有她q去在Parc-Place的旧朋友Q让他们来开发Swing?BR>
昄Swing应该做的是仅仅成Z个绘制框Ӟl那些希望创建地图Y件或者绘图Y件的Z使用Q无论如何,应该围绕AWTcd来徏造它Q按钮之cȝ东西仍然交给AWT来管。SUN的h比如Philip和Mark已经让AWT能够处理表格、树和记事本QnotebookQ?Q,所以Swing的方向应该说很明显了。但那些毁了PDD的h不干Q他们非要把一切都弄成轻量U的。由于SUN理层的无知Q再加上Amy无情的政LD,造成了我们今天所见的混ؕ局面。AmyqSUN怿Swing是作为Mozilla目的一部分与Netscape联合开发的Q事实上q只是她的宣传伎俩?BR>
在IBMQ我们从W一天v憎恶Swing。庞大、满是错误,而且隄x。原先我们的工具如VisualAge for Java都是用SmalltalkQ用的是原生H口lgQ写的,所以当我们这些工具向Java代码库迁ULQ我们需要一套窗口组件。IBMq边的开发h员都是原来搞Smalltalk的那一批hQ我们对理层要求用Swing来构建WebSphere Studio工具都非怸情愿。Swing是个可怕的充满~陷的怪兽。在WebSphere Studio最初的预览中,当与Microsoft Visual Studio作对比演C的时候,我们所有的客户都讨厌它Q就因ؓ它的外观Q而不它的功能有多强。大多数消费者都不会C辆让得难看的车,哪怕这车有一台出色的引擎。因此我们开始了一个项目,是把我们的Smalltalk原生H口lgUL到Java上去。这个项目是加拿大的Object Technology International组做的。这个项目获得了成功Q被q用在在我们发布的VisualAge Micro Edition产品中,VisualAge Micro Edition后来成ؓJ2ME开发方面一个非常成功的IDE。但是OTI的h发现QSwing在读取Windows事g斚w有极严重的缺P我们甚至无法q行SWTQS开始是Simple的羃写,不过后来变成了Standard的羃写)和Swing间的互操作。他们在M仉列的时候用了一U可能留下内存漏z的方式Q所以我们不得不采用我们自己的查询Windows事g队列的@环,以纠正这个错误。我们试了一ơ又一ơ让SUN修复q个错误Q但Amy是听不q去Q所以我们才军_SWT和AWT/Swing不能共存。我们甚臛_SWT中定义了自己的Point和RectanglecZ—整个工具包对AWT或Swing都没有Q何依赖。我们把q个工具包放CEclipse中,q是一个工具^収ͼ它的M设计目标是要战胜Micrsoft和Visual Studio。Eclipse是开源的Q所以Q何h都可以在上面构徏自己的东西,我们已经有像TogetherSoft和Rationalq样的公司移植到了上面。我们的竞争者是MicrosoftQ所以我们所有努力和注意力都是从正面针对Microsoft?BR>
不管怎么说SUNҎ非常不满。他们的Netbeans跟Eclipse做的是相同的事,因此他们向IBM高层抱怨。他们认为SWT是要你l到Windows上,q纯_Ҏ胡说Q因为SWT能通过GTK在Mac/Linux上运行,以及一大堆嵌入式^台。他们拒l让Eclipse获得Java认证Q因为里面有原生代码Q所以Eclipse产品必须很小心地使用单词“Java”这个SUN的商标。Eclipse甚至不能把自qZ个Java IDEQSUN已经威胁q要采取法律行动来制止IBM在Q何时候把EclipseUC一个Java IDE。结果之一是IBM在Eclipse上创建的GUI设计工具Q允怽构徏Swing/AWT GUIQ却不让你往里面拖放SWTH口控g?BR>
SWT从Eclipse中分d来是完全可能的,只需要把DLL抠出来放到\径中Qƈ使用H口lg工具包来l你的银行或者保险或者其他什么应用程序开发GUI。再ơ说明,我们无法更进一步,因ؓSUN把我们的双手l上了。虽然作为Eclipse开放源码协议的一部分QCPL允许我们提供q样的解x案,但SUN已经很清楚地表明他们不希望我们这样做?BR>
对于用户C֌来说Q无论IBM和SUN的最l动机是什么,我发现有一ҎL很有:喜爱Swing的hM说“一旦你׃几年旉L握它Q你p正确C用它”,q基本上是他们在试图证明和维护他们辛苦得来的用途有限的专门技术;而SWT的拥护者们说的是“哇Q这真快Q这跟原生的一Pq可以用XP皮肤……它q又d”。有一句话是我喜欢的,我们的一个用戯QSwing像Java军_不通过操作pȝ来实现原生的IOQ而是通过头马达API自己来读盘的扇区。Swing基本上就是这LQ它拿着个底层的“paint(Graphics)”方法,自己来绘制所有的H口lg?BR>--------------------------------

后记Q?/B>现在的情况已l有所不同QSWT到底q是单独发布了,VE也承诺在1.0版的时候支持SWT的GUI设计?nbsp;


Ben 2005-12-12 18:23 发表评论
]]>
վ֩ģ壺 ޾Ʒ벻߲HE| Ƭ51Ʒѹۿ| պƷAƬ| ؼëƬѹۿƵ| ձxxwwxxwwƵ| ҹav2019| ŷǾƷһ| 91ۺ| պƷһ| ھƷþþþӰԺ| Ƶ| aһëƬ| ŮڵƵ| ɫwwwƷƵѿ| ޹㽶ˬAVƬþ | AV˾þԭ| ŮҼxx00Ƶ| ŷպav| ƬվɫƬѹۿcn| þۺɫHEZYO| 鶹˴ýѹۿ| պƷһAVۿ| 91ɫŮԴվ| ˳վ߲2019| һƬ| ߹ۿƬڲ| ޾Ʒ߹ۿ| պƵһ| þòþüӰԺwwwձ| av뾫Ʒվ | ֻˬ͵Ƶ| ɫ˿ѿ| ˾Ʒձվ| 2015պƵ| ޺ݺɫۺ| ҹþþӰԺ| 91ֻƬ| һ| ۺ޹| ڵƷƵ| ҳ߹ۿ|