??xml version="1.0" encoding="utf-8" standalone="yes"?>综合久久综合,亚洲综合图区,久久国产精品久久久久久电车http://www.aygfsteel.com/llxiong/category/8433.html收藏?/description>zh-cnWed, 28 Feb 2007 08:08:44 GMTWed, 28 Feb 2007 08:08:44 GMT60Java 正则表达式详?/title><link>http://www.aygfsteel.com/llxiong/articles/62985.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Fri, 11 Aug 2006 05:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/llxiong/articles/62985.html</guid><wfw:comment>http://www.aygfsteel.com/llxiong/comments/62985.html</wfw:comment><comments>http://www.aygfsteel.com/llxiong/articles/62985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/llxiong/comments/commentRss/62985.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/llxiong/services/trackbacks/62985.html</trackback:ping><description><![CDATA[转…?br /><div id="wmqeeuq" class="con_sample"><p>如果你曾l用qPerl或Q何其他内建正则表辑ּ支持的语aQ你一定知道用正则表达式处理文本和匚w模式是多么简单。如果你不熟悉这个术语,那么“正则表辑ּ”(Regular ExpressionQ就是一个字W构成的Ԍ它定义了一个用来搜索匹配字W串的模式?</p></div><div id="wmqeeuq" class="con_all"><p></p><table width="620" align="center"><tbody><tr><td class="a14">如果你曾l用qPerl或Q何其他内建正则表辑ּ支持的语aQ你一定知道用正则表达式处理文本和匚w模式是多么简单。如果你不熟悉这个术语,那么“正则表辑ּ”(Regular ExpressionQ就是一个字W构成的Ԍ它定义了一个用来搜索匹配字W串的模式?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">许多语言Q包括Perl、PHP、Python、JavaScript和JScriptQ都支持用正则表辑ּ处理文本Q一些文本编辑器用正则表辑ּ实现高“搜?替换”功能。那么Java又怎样呢?本文写作Ӟ一个包含了用正则表辑ּq行文本处理的Java规范需求(Specification RequestQ已l得到认可,你可以期待在JDK的下一版本中看到它?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">然而,如果现在需要用正则表辑ּQ又该怎么办呢Q你可以从Apache.org下蝲源代码开攄Jakarta-ORO库。本文接下来的内容先要地介绍正则表达式的入门知识Q然后以Jakarta-ORO APIZ介绍如何使用正则表达式?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong><font size="4">一、正则表辑ּ基础知识</font></strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">我们先从单的开始。假设你要搜索一个包含字W“cat”的字符Ԍ搜烦用的正则表达式就是“cat”。如果搜索对大小写不敏感Q单词“catalog”、“Catherine”、“sophisticated”都可以匚w。也是_ </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_a.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>1.1 句点W号</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">假设你在玩英文拼字游戏,惌扑և三个字母的单词,而且q些单词必须以“t”字母开_以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内宏V要构造出q个正则表达式,你可以用一个通配W——句点符号?”。这P完整的表辑ּ是“t.n”,它匹配“tan”?“ten”、“tin”和“ton”,q匹配“t#n”、“tpn”甚至“t n”,q有其他许多无意义的l合。这是因为句点符号匹配所有字W,包括I格、Tab字符甚至换行W: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_b.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>1.2 ҎL?/strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">Z解决句点W号匚w范围q于q泛q一问题Q你可以在方括号Q“[]”)里面指定看来有意义的字符。此Ӟ只有Ҏ号里面指定的字符才参与匹配。也是_正则表达式“t[aeio]n”只匚w“tan”、“Ten”、“tin”和“ton”。但“Toon”不匚wQ因为在Ҏ号之内你只能匚w单个字符Q?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_c.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>1.3 “或”符?/strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">如果除了上面匚w的所有单词之外,你还惌匚w“toon”,那么Q你可以使用“|”操作符。“|”操作符的基本意义就是“或”运。要匚w “toon”,使用“t(a|e|i|o|oo)n”正则表辑ּ。这里不能用方扩号Q因为方括号只允许匹配单个字W;q里必须使用圆括号?)”。圆括号q可以用来分l,具体请参见后面介l?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_d.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>1.4 表示匚wơ数的符?/strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">表一昄了表C匹配次数的W号Q这些符L来确定紧靠该W号左边的符号出现的ơ数Q?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4n.jpg" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">假设我们要在文本文g中搜索美国的C会安全L。这个号码的格式?99-99-9999。用来匹配它的正则表辑ּ如图一所C。在正则表达式中Q连字符Q?”)有着Ҏ的意义,它表CZ个范_比如??。因此,匚wC会安全L中的q字W号Ӟ它的前面要加上一个{义字W“\”?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4a.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">图一Q匹配所?23-12-1234形式的社会安全号?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">假设q行搜烦的时候,你希望连字符号可以出玎ͼ也可以不出现——即Q?99-99-9999?99999999都属于正的格式。这Ӟ你可以在q字W号后面加上“?”数量限定符P如图二所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4b.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">图二Q匹配所?23-12-1234?23121234形式的社会安全号?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">下面我们再来看另外一个例子。美国汽车牌照的一U格式是四个数字加上二个字母。它的正则表辑ּ前面是数字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。图三显CZ完整的正则表辑ּ?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4c.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">图三Q匹配典型的国汽R牌照LQ如8836KV</p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">1.5 “否”符?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">“^”符L为“否”符受如果用在方括号内,“^”表CZ惌匚w的字W。例如,囑֛的正则表辑ּ匚w所有单词,但以“X”字母开头的单词除外?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4d.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑֛Q匹配所有单词,但“X”开头的除外</p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">1.6 圆括号和I白W号 </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">假设要从格式为“June 26, 1951”的生日日期中提取出月䆾部分Q用来匹配该日期的正则表辑ּ可以如图五所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4e.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">图五Q匹配所有Moth DD,YYYY格式的日?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">新出现的“\s”符hI白W号Q匹配所有的I白字符Q包括Tab字符。如果字W串正确匚wQ接下来如何提取出月份部分呢Q只需在月份周围加上一个圆括号创徏一个组Q然后用ORO APIQ本文后面详l讨论)提取出它的倹{修改后的正则表辑ּ如图六所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4f.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑օQ匹配所有Month DD,YYYY格式的日期,定义月䆾gؓW一个组</p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>1.7 其它W号</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">为简便v见,你可以用一些ؓ常见正则表达式创建的快捷W号。如表二所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">表二Q常用符?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4o.jpg" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">例如Q在前面C会安全L的例子中Q所有出现“[0-9]”的地方我们都可以用“\d”。修改后的正则表辑ּ如图七所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4g.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">图七Q匹配所?23-12-1234格式的社会安全号?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong><font size="4">二、Jakarta-ORO?/font></strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">有许多源代码开攄正则表达式库可供JavaE序员用,而且它们中的许多支持Perl 5兼容的正则表辑ּ语法。我在这里选用的是Jakarta-ORO正则表达式库Q它是最全面的正则表辑ּAPI之一Q而且它与Perl 5正则表达式完全兼宏V另外,它也是优化得最好的API之一?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">Jakarta-ORO库以前叫做OROMatcherQDaniel Savarese大方地把它赠送给了Jakarta Project。你可以按照本文最后参考资源的说明下蝲它?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">我首先将要介l用Jakarta-ORO库时你必d建和讉K的对象,然后介绍如何使用Jakarta-ORO API?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>?PatternCompiler对象</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">首先Q创Z个Perl5Compilercȝ实例Qƈ把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实玎ͼ允许你把正则表达式编译成用来匚w的Pattern对象?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_e.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>?Pattern对象</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">要把正则表达式编译成Pattern对象Q调用compiler对象的compile()ҎQƈ在调用参C指定正则表达式。例如,你可以按照下面这U方式编译正则表辑ּ“t[aeio]n”: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_f.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">默认情况下,~译器创Z个大写敏感的模式(patternQ。因此,上面代码~译得到的模式只匚w“tin”、“tan”?“ten”和“ton”,但不匚w“Tin”和“taN”。要创徏一个大写不敏感的模式Q你应该在调用编译器的时候指定一个额外的参数Q?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_g.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">创徏好Pattern对象之后Q你可以通过PatternMatchercȝ该Pattern对象q行模式匚w?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>?PatternMatcher对象</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">PatternMatcher对象ҎPattern对象和字W串q行匚w查。你要实例化一个Perl5Matchercdƈ把结果赋值给 PatternMatcher接口。Perl5MatchercLPatternMatcher接口的一个实玎ͼ它根据Perl 5正则表达式语法进行模式匹配: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_h.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">使用PatternMatcher对象Q你可以用多个方法进行匹配操作,q些Ҏ的第一个参数都是需要根据正则表辑ּq行匚w的字W串Q?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">· boolean matches(String input, Pattern pattern)Q当输入字符串和正则表达式要_匚w时用。换句话_正则表达式必d整地描述输入字符丌Ӏ?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">· boolean matchesPrefix(String input, Pattern pattern)Q当正则表达式匹配输入字W串起始部分时用?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">· boolean contains(String input, Pattern pattern)Q当正则表达式要匚w输入字符串的一部分时用(卻I它必L一个子Ԍ?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">另外Q在上面三个Ҏ调用中,你还可以用PatternMatcherInput对象作ؓ参数替代String对象Q这Ӟ你可以从字符串中最后一ơ匹配的位置开始l进行匹配。当字符串可能有多个子串匚wl定的正则表辑ּӞ用PatternMatcherInput对象作ؓ参数很有用了。用 PatternMatcherInput对象作ؓ参数替代StringӞ上述三个Ҏ的语法如下: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">· boolean matches(PatternMatcherInput input, Pattern pattern) </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">· boolean matchesPrefix(PatternMatcherInput input, Pattern pattern) </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">· boolean contains(PatternMatcherInput input, Pattern pattern) </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong><font size="4">三、应用实?/font></strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">下面我们来看看Jakarta-ORO库的一些应用实例?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>3.1 日志文g处理</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">dQ分析一个Web服务器日志文Ӟ定每一个用戯在网站上的时间。在典型的BEA WebLogic日志文g中,日志记录的格式如下: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_i.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">分析q个日志记录Q可以发玎ͼ要从q个日志文g提取的内Ҏ两项QIP地址和页面访问时间。你可以用分l符P圆括P从日志记录提取出IP地址和时间标记?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">首先我们来看看IP地址。IP地址?个字节构成,每一个字节的值在0?55之间Q各个字节通过一个句点分隔。因此,IP地址中的每一个字节有臛_一个、最多三个数字。图八显CZ为IP地址~写的正则表辑ּQ?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4h.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑օQ匹配IP地址</p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">IP地址中的句点字符必须q行转义处理Q前面加上“\”)Q因为IP地址中的句点h它本来的含义Q而不是采用正则表辑ּ语法中的Ҏ含义。句点在正则表达式中的特D含义本文前面已l介l?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">日志记录的时间部分由一Ҏ括号包围。你可以按照如下思\提取出方括号里面的所有内容:首先搜烦起始Ҏ号字W(“[”)Q提取出所有不过l束Ҏ号字W(“]”)的内容,向前L直至扑ֈl束Ҏ号字W。图九显CZq部分的正则表达式?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4i.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">图九Q匹配至一个字W,直至扑ֈ“]?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">现在Q把上述两个正则表达式加上分l符P圆括P后合q成单个表达式,q样可以从日志记录提取出IP地址和时间。注意,Z匚w? -”(但不提取它)Q正则表辑ּ中间加入了“\s-\s-\s”。完整的正则表达式如囑֍所C?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4j.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑֍Q匹配IP地址和时间标?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">现在正则表达式已l编写完毕,接下来可以编写用正则表辑ּ库的Java代码了?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">Z用Jakarta-ORO库,首先创徏正则表达式字W串和待分析的日志记录字W串Q?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_j.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">q里使用的正则表辑ּ与图十的正则表达式差不多完全相同Q但有一点例外:在Java中,你必d每一个向前的斜杠Q“\”)q行转义处理。图十不?Java的表CŞ式,所以我们要在每个“\”前面加上一个“\”以免出现编译错误。遗憄是,转义处理q程很容易出现错误,所以应该小心}慎。你可以首先输入未经转义处理的正则表辑ּQ然后从左到右依ơ把每一个“\”替换成“\\”。如果要复检Q你可以试着把它输出到屏q上?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">初始化字W串之后Q实例化PatternCompiler对象Q用PatternCompiler~译正则表达式创Z个Pattern对象Q?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_k.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">现在Q创建PatternMatcher对象Q调用PatternMatcher接口的contain()Ҏ查匹配情况: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_l.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">接下来,利用PatternMatcher接口q回的MatchResult对象Q输出匹配的l。由于logEntry字符串包含匹配的内容Q你可以看到cd下面的输出: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_m.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>3.2 HTML处理实例一</strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">下面一个Q务是分析HTML面内FONT标记的所有属性。HTML面内典型的FONT标记如下所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><font face="Arial, Serif" color="#ff0000" size="+2"></font><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_n.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">E序按照如下Ş式,输出每一个FONT标记的属性: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_o.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">在这U情况下Q我你用两个正则表辑ּ。第一个如囑֍一所C,它从字体标记提取出?face="Arial, Serif" size="+2" color="red"”?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4k.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑֍一Q匹配FONT标记的所有属?/p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">W二个正则表辑ּ如图十二所C,它把各个属性分割成名字-值对?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4l.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑֍二:匚w单个属性,q把它分割成名字-值对</p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">分割l果为: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_p.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">现在我们来看看完成这个Q务的Java代码。首先创Z个正则表辑ּ字符Ԍ用Perl5Compiler把它们编译成Pattern对象。编译正则表辑ּ的时候,指定Perl5Compiler.CASE_INSENSITIVE_MASK选项Q得匹配操作不区分大小写?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">接下来,创徏一个执行匹配操作的Perl5Matcher对象?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_q.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">假设有一个Stringcd的变量htmlQ它代表了HTML文g中的一行内宏V如果html字符串包含FONT标记Q匹配器返回true。此Ӟ你可以用匚w器对象返回的MatchResult对象获得W一个组Q它包含了FONT的所有属性: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_r.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">接下来创Z个PatternMatcherInput对象。这个对象允怽从最后一ơ匹配的位置开始l进行匹配操作,因此Q它很适合于提取FONT标记内属性的名字-值对。创建PatternMatcherInput对象Q以参数形式传入待匹配的字符丌Ӏ然后,用匹配器实例提取出每一个FONT的属性。这通过指定PatternMatcherInput对象Q而不是字W串对象Qؓ参数Q反复地调用PatternMatcher对象的contains ()Ҏ完成。PatternMatcherInput对象之中的每一ơP代将把它内部的指针向前移动,下一ơ检将从前一ơ匹配位|的后面开始?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">本例的输出结果如下: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_s.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><strong>3.3 HTML处理实例?/strong></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">下面我们来看看另一个处理HTML的例子。这一ơ,我们假定Web服务器从widgets.acme.comUd了newserver.acme.com。现在你要修改一些页面中的链接: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_t.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">执行q个搜烦的正则表辑ּ如图十三所C: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4m.gif" border="0" /></p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><p align="center">囑֍三:匚w修改前的链接</p></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">如果能够匚wq个正则表达式,你可以用下面的内Ҏ换图十三的链接: </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_u.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">注意#字符的后面加上了$1。Perl正则表达式语法用$1?2{表C已l匹配且提取出来的组。图十三的表辑ּ把所有作Z个组匚w和提取出来的内容附加到链接的后面?</td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">现在Q返回Java。就象前面我们所做的那样Q你必须创徏试字符Ԍ创徏把正则表辑ּ~译到Pattern对象所必需的对象,以及创徏一个PatternMatcher对象Q?img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_v.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">接下来,用com.oroinc.text.regex包Utilcȝsubstitute()静态方法进行替换,输出l果字符Ԍ </td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_w.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">Util.substitute()Ҏ的语法如下: </td></tr></tbody></table><table height="17" width="620" align="center"><tbody><tr><td class="a14" height="13"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_x.jpg" border="0" /></td></tr></tbody></table><table width="620" align="center"><tbody><tr><td class="a14">q个调用的前两个参数是以前创建的PatternMatcher和Pattern对象。第三个参数是一个Substiution对象Q它军_了替换操作如何进行。本例用的是Perl5Substitution对象Q它能够q行Perl5风格的替换。第四个参数是想要进行替换操作的字符Ԍ最后一个参数允许指定是否替换模式的所有匹配子ԌUtil.SUBSTITUTE_ALLQ,或只替换指定的次数?/td></tr></tbody></table></div><img src ="http://www.aygfsteel.com/llxiong/aggbug/62985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/llxiong/" target="_blank">xnabx</a> 2006-08-11 13:57 <a href="http://www.aygfsteel.com/llxiong/articles/62985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>throws 语句http://www.aygfsteel.com/llxiong/articles/37112.htmlxnabxxnabxThu, 23 Mar 2006 15:05:00 GMThttp://www.aygfsteel.com/llxiong/articles/37112.htmlhttp://www.aygfsteel.com/llxiong/comments/37112.htmlhttp://www.aygfsteel.com/llxiong/articles/37112.html#Feedback0http://www.aygfsteel.com/llxiong/comments/commentRss/37112.htmlhttp://www.aygfsteel.com/llxiong/services/trackbacks/37112.htmlimport java.io.*;

class test_throws
{
 public static  void main(String args[])  throws IOException // { //mainҎ内可能会抛出IOException异常
//mainҎq没有处理该异常,而是把它丢出ȝ调用它的人来处理(也就是给jvm处理)
  ....
 }
}

比喻Q?br />E序是老板让你做的? 异常是做事q程中遇到的问题, 如果问题你能够处? 那么你可以自己处? 如果不能处理的问? 定义出来, 抛给老板. throws是抛给老板的问题了

public void a() throws 丢给老板的Exception{
  try{
    //做老板l你的事?br />  } catch(你能处理的Exception e){
    //处理你能解决的问?br />  } finally {
    //不管问题有没有发? 都要处理的工?br />  }
}



xnabx 2006-03-23 23:05 发表评论
]]>
|上看到华ؓjava的面试题 http://www.aygfsteel.com/llxiong/articles/37100.htmlxnabxxnabxThu, 23 Mar 2006 14:36:00 GMThttp://www.aygfsteel.com/llxiong/articles/37100.htmlhttp://www.aygfsteel.com/llxiong/comments/37100.htmlhttp://www.aygfsteel.com/llxiong/articles/37100.html#Feedback0http://www.aygfsteel.com/llxiong/comments/commentRss/37100.htmlhttp://www.aygfsteel.com/llxiong/services/trackbacks/37100.html在网上看到华为java的面试题
JAVA斚w
1 面向对象的特征有哪些斚w  
2 String是最基本的数据类型吗?

3 int ?Integer 有什么区?/p>

4 String 和StringBuffer的区?/p>

5 q行时异怸一般异常有何异同?
异常表示E序q行q程中可能出现的非正常状态,q行时异常表C拟机的通常操作中可能遇到的异常Q是一U常见运行错误。java~译器要求方法必d明抛出可能发生的非运行时异常Q但是ƈ不要求必d明抛出未被捕Lq行时异常?/p>

6 说出一些常用的c,?接口Q请各D5?/p>

7 说出ArrayList,Vector, LinkedList的存储性能和特?br />ArrayList和Vector都是使用数组方式存储数据Q此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素Q但是插入元素要涉及数组元素Ud{内存操作,所以烦引数据快而插入数据慢QVector׃使用了synchronizedҎQ线E安全)Q通常性能上较ArrayList差,而LinkedList使用双向链表实现存储Q按序号索引数据需要进行前向或后向遍历Q但是插入数据时只需要记录本的前后即可,所以插入速度较快?br />8设计4个线E,其中两个U程每次对j增加1Q另外两个线E对j每次减少1。写出程序?br />以下E序使用内部cd现线E,对j增减的时候没有考虑序问题?br />public class ThreadTest1{
    private int j;
    public static void main(String args[]){
        ThreadTest1 tt=new ThreadTest1();
        Inc inc=tt.new Inc();
        Dec dec=tt.new Dec();
        for(int i=0;i<2;i++){
            Thread t=new Thread(inc);
            t.start();
            t=new Thread(dec);
            t.start();
        }
    }
    private synchronized void inc(){
        j++;
        System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    }
    private synchronized void dec(){
        j--;
        System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    }
   
    class Inc implements Runnable{
        public void run(){
            for(int i=0;i<100;i++){
                inc();
            }
        }
    }
    class Dec implements Runnable{
        public void run(){
            for(int i=0;i<100;i++){
                dec();
            }
        }
    }
}

9.JSP的内|对象及Ҏ?br />request request表示HttpServletRequest对象。它包含了有x览器h的信息,q且提供了几个用于获取cookie, header, 和session数据的有用的Ҏ?

response response表示HttpServletResponse对象Qƈ提供了几个用于设|送回 览器的响应的方法(如cookies,头信息等Q?

out out 对象是javax.jsp.JspWriter的一个实例,q提供了几个Ҏ使你能用于向览器回送输出结果?

pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各U范围的名字I间、servlet相关的对象的APIQƈ且包装了通用的servlet相关功能的方法?

session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信?

application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信?

config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数?

page page表示从该面产生的一个servlet实例
10.用socket通讯写出客户端和服务器端的通讯Q要求客户发送数据后能够回显相同的数据?br />参见评中socket通讯例子?/p>

11说出Servlet的生命周期,q说出Servlet和CGI的区别?br />Servlet被服务器实例化后Q容器运行其initҎQ请求到达时q行其serviceҎQserviceҎ自动zNq行与请求对应的doXXXҎQdoGetQdoPostQ等Q当服务器决定将实例销毁的时候调用其destroyҎ?br />与cgi的区别在于servlet处于服务器进E中Q它通过多线E方式运行其serviceҎQ一个实例可以服务于多个hQƈ且其实例一般不会销毁,而CGIҎ个请求都产生新的q程Q服务完成后销毁,所以效率上低于servlet?br />12.EJB是基于哪些技术实现的?q说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别?/p>

13QEJB包括QSessionBean,EntityBeanQ说Z们的生命周期Q及如何理事务的?

14Q说出数据连接池的工作机制是什?

15.同步和异步有和异同,在什么情况下分别使用他们QD例说明?/p>

16.应用服务器有那些Q?/p>

17你所知道的集合类都有哪些Q主要方法?

18l你一?驱动E序A,数据源名UCؓB,用户名称为C,密码为D,数据库表为TQ请用JDBC索出表T的所有数据?/p>

19Q说出在JSP面里是怎么分页?
面需要保存以下参敎ͼ
总行敎ͼҎsql语句得到总行?br />每页昄行数Q设定?br />当前|Q请求参?br />面Ҏ当前|和每行数计出当前늬一行行敎ͼ定位l果集到此行Q对l果集取出每|C数的行即可?/p>


数据库方面:

1.存储q程和函数的区别
存储q程是用户定义的一pdsql语句的集合,涉及特定表或其它对象的Q务,用户可以调用存储q程Q而函数通常是数据库已定义的ҎQ它接收参数q返回某U类型的值ƈ且不涉及特定用户表?br />2.事务是什么?
事务是作Z个逻辑单元执行的一pd操作Q一个逻辑工作单元必须有四个属性,UCؓ ACIDQ原子性、一致性、隔L和持久性)属性,只有q样才能成ؓ一个事务:
原子?br />事务必须是原子工作单元;对于其数据修改,要么全都执行Q要么全都不执行?br />一致?br />事务在完成时Q必M所有的数据都保持一致状态。在相关数据库中Q所有规则都必须应用于事务的修改Q以保持所有数据的完整性。事务结束时Q所有的内部数据l构Q如 B 树烦引或双向链表Q都必须是正的?br />隔离?br />由ƈ发事务所作的修改必须与Q何其它ƈ发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一q发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这UCؓ可串行性,因ؓ它能够重新装载v始数据,q且重播一pd事务Q以使数据结束时的状态与原始事务执行的状态相同?br />持久?br />事务完成之后Q它对于pȝ的媄响是怹性的。该修改即出现pȝ故障也将一直保持?/p>

3.游标的作用?如何知道游标已经C最后?
游标用于定位l果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否C最后,通常此变量不{于0表示出错或到了最后?br />4.触发器分Z前触发和事后触发Q这两种触发有和区别。语句触发和行U触发有何区别?br />事前触发器运行于触发事g发生之前Q而事后触发器q行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段倹{?br />语句U触发器可以在语句执行前或后执行Q而行U触发在触发器所影响的每一行触发一ơ?/p>

xnabx 2006-03-23 22:36 发表评论
]]>
转:JavaWebService客户端简明攻?http://www.aygfsteel.com/llxiong/articles/36028.htmlxnabxxnabxSun, 19 Mar 2006 04:11:00 GMThttp://www.aygfsteel.com/llxiong/articles/36028.htmlhttp://www.aygfsteel.com/llxiong/comments/36028.htmlhttp://www.aygfsteel.com/llxiong/articles/36028.html#Feedback0http://www.aygfsteel.com/llxiong/comments/commentRss/36028.htmlhttp://www.aygfsteel.com/llxiong/services/trackbacks/36028.html  JavaWebService客户端简明攻?/a>

 作ؓCSDN JavaWebService的小斑竹Q很久就惛_一些关于JWS的基文章Q苦于公U繁忙,一直无心下W,所以一拖再拖,今日看了我斑块下有网友问及关于Java调用WebService之问题,遂下军_写下此文以资共勉?br /> 装备Q?br />  JDK1.4.1_02Q关于这斚w的问题,没必要说了吧。^_^
  Java Web Services Developer Pack 1.2 (
http://java.sun.com/webservices/downloads/webservicespack.html)
  我的JWSDP安装路径为E:\miniTool\jwsdp-1.2\Q文章中直接使用Q就不重声?br /> q_Q?br />  Microsoft Windows 2000 [Version 5.00.2195]

 全文以Google的WebServiceZQ它提供了一个开发包Q?a >http://www.google.com/apis/download.htmlQ但是很多的WebService不会q样的,只是告诉你一个他们的WSDL(WebService Description Language)文g。但是这都没有本质的区别的,在Google的开发包中也包含q么一个文件GoogleSearch.wsdl。大多数的WebService客户端开发,知道了WSDL文g已l可以了Q但是Google呢还需要一个LicenseKeyQ因为只是测试用Q所以这个限制了同一个̎号一天只能够查询1000q是2000ơ,我忘CQ我甌了两个,在我q个C#的演C站?http://63.210.240.215/rookieport/)qCq两个LicenseKey(随机使用)Q关于这个C#演示站点的介l及源文件见http://www10.brinkster.com/rookieport/default.aspx。非帔R憄是,q两个站Ҏ都不能够更新了,世界上从来没有免费的午餐Q!Q?br /> 好了Q这文章的主题是JavaWebService而不是C#WebServiceQ做好准备工作之后,我们E微分析下WSDL文gQ这个文件主要是描述WebService具体使用C哪些数据l构(types中描q?Q提供了哪些Web服务功能(operation中描q?Q以及该服务的访问地址(service中描q?Q关于WSDLq里不详qͼ找时间补上。在GoogleSearch.wsdl中,我们看到有一个doGoogleSearch的OperationQ从名称上我们可以看出,q个Ҏ应该是提供搜索服务的Q前面有一D|qCdoGoogleSearch调用的参敎ͼ
  <message name="doGoogleSearch">
    <part name="key"            type="xsd:string"/>
    <part name="q"              type="xsd:string"/>
    <part name="start"          type="xsd:int"/>
    <part name="maxResults"     type="xsd:int"/>
    <part name="filter"         type="xsd:boolean"/>
    <part name="restrict"       type="xsd:string"/>
    <part name="safeSearch"     type="xsd:boolean"/>
    <part name="lr"             type="xsd:string"/>
    <part name="ie"             type="xsd:string"/>
    <part name="oe"             type="xsd:string"/>
  </message>
W一个参数就是LicenseKeyQ第二个参数是要查询的内容,W三个参数是起始l果,对于多页的结果集合v页作用Q第四个参数是定义每|大记录数Q后面的参数不是很重要了Q其中lr是定义查扄语言cdQ假如查扄体中文可以ؓlang_zh-CNQie/oe是输入和输出的编码类型,~省都ؓUTF-8?br /> 再往后面我们看到关于doGoogleSearch的返回类型的描述Q?br />  <message name="doGoogleSearchResponse">
    <part name="return"         type="typens:GoogleSearchResult"/>          
  </message>
type="typens:GoogleSearchResult"说明了数据类型的命名I间Q我们查找GoogleSearchResultQ可以看C是个复合cdQ?br />      <xsd:complexType name="GoogleSearchResult">
        <xsd:all>
          <xsd:element name="documentFiltering"           type="xsd:boolean"/>
          <xsd:element name="searchComments"              type="xsd:string"/>
          <xsd:element name="estimatedTotalResultsCount"  type="xsd:int"/>
          <xsd:element name="estimateIsExact"             type="xsd:boolean"/>
          <xsd:element name="resultElements"              type="typens:ResultElementArray"/>
          <xsd:element name="searchQuery"                 type="xsd:string"/>
          <xsd:element name="startIndex"                  type="xsd:int"/>
          <xsd:element name="endIndex"                    type="xsd:int"/>
          <xsd:element name="searchTips"                  type="xsd:string"/>
          <xsd:element name="directoryCategories"         type="typens:DirectoryCategoryArray"/>
          <xsd:element name="searchTime"                  type="xsd:double"/>
        </xsd:all>
      </xsd:complexType>

 q里面用xml语言描述了GoogleSearchResult的数据结构,type="xsd:XXX"的属性都是简单数据类型,q用C两个复合cdResultElementArray, DirectoryCategoryArray读者可以l分析,q些数据cdQ都会被JWS的解释{换工L成相应的JavacR两个Arrayl尾的复合类型,在JWSDP1.1以前也是生成了一个相应的ArrayOfXXXXX的类Q现?.2做得比较好了Q,直接映射到java的数l?/p>

 好了我们可以q入客户端开发的实际性操作的W一步了Q首先我们需要编辑一个xml格式的config文gQŞ式如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns=" <wsdl name="SearchService" location="GoogleSearch.wsdl" packageName="rook.searcher"/>
</configuration>
q里面指明了WebService描述文g的位|,可以是本地的也可以是q程的。后面packageName说明了生成WebService客户端文件的包名。把q个文g攑ֈGoogleAPI的目录下?br /> 
 W二步,启动控制収ͼq入GoogleAPI的目?br />C:\googleapi>dir/w
 Volume in drive C is WIN2K
 Volume Serial Number is 0B73-18E3

 Directory of C:\googleapi

[.]                                [..]
README.txt                         GoogleAPIDemo.java
GoogleSearch.wsdl                  APIs_Reference.html
LICENSE.txt                        googleapi.jar
[javadoc]                          [dotnet]
[soap-samples]                     [licenses]
google.config
JavaWebService客户端简明攻?txt
 建立一个client的目录C:\>mkdir client
 执行WSCompile生成客户端文件C:\googleapi>E:\miniTool\jwsdp-1.2\jaxrpc\bin\wscompile -gen -d client -keep google.config
 -gen参数告诉~译器生成WebService客户端文Ӟ-d client生成的文g保存的目录,-keep指示保留中间文g。执行之后,q入client\rook\searcher目录可以看到生成pdjava和javacL件?/p>

 W三步,我们创徏客户端调用文件。查扑֌含rookie的中文网前十条记录Q然后打印标题和Url?br />import rook.searcher.*;
import java.rmi.*;

public class Searcher{
 public static void main(String[] args){
  try {
   GoogleSearchPort sport = new GoogleSearchService_Impl().getGoogleSearchPort();
   GoogleSearchResult result = sport.doGoogleSearch("OyGtVqM5YRRS7hFXHLWEodMSEbiZlmc9", "rookie", 0, 10, true, "lang_zh-CN", true, "lang_zh-CN", "UTF-8", "UTF-8");//W一个参数是LicenseKey
   
   ResultElement[] results = result.getResultElements();
   for ( int idx = 0; idx < results.length; idx ++) {
    System.out.println(idx + ": " + results[idx].getTitle() + "\r\n" + results[idx].getURL());
   } 
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 W四步,~译。这里面用到了jaxrpc-impl包?br />C:\googleapi\client>javac -classpath E:\miniTool\jwsdp-1.2\jaxrpc\lib\jaxrpc-impl.jar;. Searcher.java

 W五步,执行?br />C:\googleapi\client>java -cp E:\miniTool\jwsdp-1.2\jaxrpc\lib\jaxrpc-impl.jar;E:\miniTool\jwsdp-1.2\jaxrpc\lib\jaxrpc-api.jar;E:\miniTool\jwsdp-1.2\jwsdp-shared\lib\jax-qname.jar;E:\miniTool\jwsdp-1.2\jwsdp-shared\lib\activation.jar;E:\miniTool\jwsdp-1.2\jwsdp-shared\lib\mail.jar;E:\miniTool\jwsdp-1.2\jwsdp-shared\lib\xsdlib.jar;E:\miniTool\jwsdp-1.2\saaj\lib\saaj-api.jar;E:\miniTool\jwsdp-1.2\saaj\lib\saaj-impl.jar;E:\miniTool\jwsdp-1.2\jwsdp-shared\lib\commons-logging.jar;E:\miniTool\jwsdp-1.2\jaxp\lib\endorsed\xercesImpl.jar;E:\miniTool\jwsdp-1.2\jaxp\lib\endorsed\dom.jar;. Searcher

 全文到此l束Q讲了作JavaWebService客户端开发的基本步骤Q希望能够抛砖引玉!文中不详之处Q敬h教:zlyperson@163.net



xnabx 2006-03-19 12:11 发表评论
]]>
վ֩ģ壺 | | żҸ| ʢ| ͷ| ɽ| IJ| | ¡| | ˰| ̨| | ī| ³ľ| | | ԭ| | ף| | ̨| | ֯| DZ| ǧ| | | Ȫ| | | | | | | | ƽ| | | ϴ| ո|