﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Dorian's Blog</title><link>http://www.blogjava.net/dorian/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:52:09 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:52:09 GMT</pubDate><ttl>60</ttl><item><title>50 AJAX Reference Websites From Around the World</title><link>http://www.blogjava.net/dorian/archive/2006/06/13/52351.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Tue, 13 Jun 2006 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2006/06/13/52351.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/52351.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2006/06/13/52351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/52351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/52351.html</trackback:ping><description><![CDATA[As a consistent devotee of the AJAX scene over the past year or so
I have hundreds of feeds in my reader. Recently, I've had several email
requests from readers requesting to know what AJAX websites I visit
daily. While I visit any title that interest me, these are the sites I
go to consistently. <br /><br />Since the coining of the the term AJAX over a year ago hundreds if
not thousands of websites, blogs and forums have been buzzing with
posts on the subject. As I've found this can sometimes leave search
engines bewildered as to where the current and relevant information
really exists. So I thought I would put together this list of what I
think are some of the most relevant AJAX sites are worldwide.
<br /><br />Please consider this list of AJAX reference sites to be in its
infancy. I don't read as many languages as I'd like to so the current
list is rather limited by language. Please feel free to add to this
list by adding a comment to this post with other useful AJAX resource
sites. If you think the idea of a moderated AJAX website resource list
is a good idea let me know and I'll set up a wiki. <br /><br />
Special thanks to all of the hard working developers who are spending their free time share their knowledge with all of us! 
<br /><br /><b>English</b><br /><a href="http://www.ajaxian.com/" title="Ajaxian">Ajaxian</a><br />
Simply one of the best AJAX sites on the web. Daily updates, insightful
commentary and coverage of Ajax development around the world. <br /><br /><a href="http://www.ajax-blog.com/" title="AJAX Blog">AJAX Blog</a><br />
Daily AJAX content with sreenshots and commentary.
<br /><br /><a href="http://www.ajaxcamp.com/" title="AJAX Camp">AJAX Camp</a><br />
Ajax Camp is a community for learning, interacting, and asking questions about web-based development using Javascript and Ajax.
<br /><br /><a href="http://www.ajaxforums.net/" title="AjaxForums">AjaxForums</a><br />
Very active forums focusing on AJAX
<br /><br /><a href="http://www.ajaxfreaks.com/" title="AJAX Freaks">AJAX Freaks</a><br />
This website exists to provide you with information to use while
learning or developing AJAX. If you need AJAX Help or you would like to
provide AJAX Help to other developers, you are in the right place.
<br /><br /><a href="http://www.ajaxgeek.info/" title="AJAX Geek">AJAX Geek</a><br />
All things ajax, css, dhtml, xml, javascript, and geekier
<br /><br /><a href="http://www.ajaxgoals.com/" title="AJAX Goals">AJAX Goals</a><br />
AJAX site with forums, code samples, news and articles
<br /><br /><a href="http://ajaxguru.blogspot.com/" title="AJAX Guru">AJAX Guru</a><br />
AJAX blog by Kishore
<br /><br /><a href="http://www.ajaximpact.com/" title="AJAX Impact">AJAX Impact</a><br />
Very nice AJAX Community with great references
<br /><br /><a href="http://www.ajaxlessons.com/" title="AjaxLessons">AjaxLessons</a><br />
AjaxLessons.com is a resource for ajax tutorials as well as information surrounding Ajax and web 2.0. 
<br /><br /><a href="http://www.ajaxline.com/" title="AJAX Line">AJAX Line</a><br />
AJAX Community with a blog, forum and tutorials
<br /><br /><a href="http://blog.ajax-links.com/" title="Ajaxlinks">Ajaxlinks</a><br />
AJAX links, code samples and news
<br /><br /><a href="http://ajax.phpmagazine.net/" title="AJAX Magazine">AJAX Magazine</a><br />
AJAX blog focusing on new AJAX developments. 
<br /><br /><a href="http://www.ajaxmatters.com/r/welcome" title="AJAXMatters">AJAXMatters</a><br />Ajax
Matters is an informational site about AJAX (short for "Advanced
Javascripting and XML" or "Asynchronous JavaScripting and XML") and how
these technologies are applied to web development. Simply put, I
started Ajax Matters to collect and share information about the
XMLHTTPRequest object, JavaScript and XML.
<br /><br /><a href="http://ajaxpatterns.org/" title="AJAX Patterns">AJAX Patterns</a><br />
The publicly editable repository of all things Ajax. Design Patterns, Frameworks, Libraries, Tools and Links 
<br /><br /><a href="http://www.ajaxprojects.com/" title="AJAX Projects">AJAX Projects</a><br />
AJAX Projects categorized by programming language
<br /><br /><a href="http://www.ajaxreview.com/" title="AJAX Review">AJAX Review</a><br />AJAX
and web 2.0 dissected. The purpose of this site is simple. Take nifty
web-tools, analyze them, post screenshots, and help people find useful
(and not so useful) web applications <br /><br /><a href="http://www.ajaxtalk.com/" title="AJAX Talk">AJAX Talk</a><br />
Discuss the new web
<br /><br /><a href="http://www.ajaxtechforums.com/" title="Ajax Technology Forums">Ajax Technology Forums</a><br />
Asynchronous JavaScript And XML Ajax forums, discussions and tech issues.
<br /><br /><a href="http://www.ajaxtutorial.net/" title="Ajax Tutorial">Ajax Tutorial</a><br />
Ajax help for newbies
<br /><br /><a href="http://www.ajaxwith.com/" title="AJAXwith">AJAXwith</a><br />
AJAX resources and information
<br /><br /><a href="http://groups.google.com/group/ajax-world" title="AJAX World">AJAX World</a><br />
AJAX discussion group with over a thousand members!
<br /><br /><a href="http://ajaxaspects.blogspot.com/" title="Aspects of AJAX">Aspects of AJAX</a><br />
AJAX blog with loads of resources
<br /><br /><a href="http://codinginparadise.org/weblog/" title="Coding In Paradise">Coding In Paradise</a><br />
Excellent and thoughtful AJAX tutorials and techniques by  Brad Neuberg
<br /><br /><a href="http://www.cyberdummy.co.uk/" title="Cyber Dummy">Cyber Dummy</a><br />
AJAX code samples and source code
<br /><br /><a href="http://www.fiftyfoureleven.com/" title="Fiftyfoureleven">Fiftyfoureleven</a><br />
Fiftyfoureleven.com consists of a weblog and resources that focus on
web development: designing, programming, copywriting and more.
<br /><br /><a href="http://richui.blogspot.com/" title="Jep's Rich User Interfaces blog">Jep's Rich User Interfaces blog</a><br />
About AJAX Performance and some other things by Jep Castelein of Backbase
<br /><br /><a href="http://blog.ilikeu2.nl/" title="Logicalley">Logicalley</a><br />
AJAX blog by Chris van de Steeg author of LiveGrid
<br /><br /><a href="http://developer.mozilla.org/en/docs/AJAX" title="Mozilla Developer Center">Mozilla Developer Center</a><br />
Great site to get a first look at AJAX.
<br /><br /><a href="http://www.robsanheim.com/category/software/ajax/" title="Panasonic Youth">Panasonic Youth</a><br />
AJAX blog by Rob Sanheim with a focus on AJAX and <a title="" href="http://java.sun.com/" target="_blank">Java Technology</a>
<br /><br /><a href="http://www.protolize.org/" title="Protolize">Protolize</a><br />Protolize
is a place where we share most commonly used and helpful tools out
there that we like to use as a web designer + developer.
<br /><br /><a href="http://www.robgonda.com/blog/" title="Rob Gonda">Rob Gonda</a><br />
Great AJAX Coldfusion content with commentary
<br /><br /><a href="http://softwareas.com/" title="Software As She's Developed">Software As Sheâ€™s Developed</a><br />
AJAX, <a title="" href="http://java.sun.com/" target="_blank">Java Technology</a>, patterns, usability by Michael Mahemoff
<br /><br /><a href="http://www.maxkiesler.com/index.php/weblog/comments/50_ajax_reference_websites_from_around_the_world/" title="There and Back Again">There and Back Again</a><br />
The weblog of Joshua Eichorn, AJAX, PHP and Open Source
<br /><br /><a href="http://www.tonyyoo.com/protolize/" title="Tony Yoo">Tony Yoo</a><br />I've
been getting many requests from people asking for this page where they
can access different resources that are not included in Protolize.org
website. So I've decided to keep this page up for those people.
<br /><br /><a href="http://earthcode.com/" title="Web 2.0 Technologies">Web 2.0 Technologies</a><br />
Blog with resources for AJAX, javaScript and rails
<br /><br /><b>Italian</b><br /><a href="http://www.onajax.com/" title="On Ajax">On Ajax</a><br />
Italian blog covering AJAX developments
<br /><br /><a href="http://www.openajax.it/" title="Open AJAX">Open AJAX</a><br />
Italian AJAX community site with forums, demos and articles 
<br /><br /><a href="http://www.sastgroup.com/" title="Sastroup">Sastroup</a><br />
Italian language site with resources for AJAX, javascript and PHP.
<br /><br /><b>German</b><br /><a href="http://ajaxaspekte.blogspot.com/" title="Ajax Aspekte">Ajax Aspekte</a><br />
German language AJAX blog with loads of resources
<br /><br /><a href="http://www.ajax-community.de/" title="AJAX Community">AJAX Community</a><br />
German language site devoted to AJAX and web 2.0 developments.
<br /><br /><a href="http://www.ajax-info.de/" title="Ajax Info">Ajax Info</a><br />
German language blog focusing on AJAX and web 2.0.
<br /><br /><a href="http://www.ajax-scripting.de/" title="Ajax Scripting">Ajax Scripting</a><br />
A nice German language ajax blog. 
<br /><br /><a href="http://www.alvit.de/handbook/" title="Alvit - The Web Developers Handbook">Alvit - The Web Developers Handbook</a><br />
A German website written in English full of web dev resources. There is a nice section on AJAX, DOM and css
<br /><br /><a href="http://www.mathertel.de/" title="Mathertel">Mathertel</a><br />
German blog presented in English with some nice AJAX references and projects by Matthias Hertel
<br /><br /><b>Japanese</b><br /><a href="http://opengl.jp/ajax/" title="Ajax Blog">Ajax Blog</a><br />
Japanese Ajax presented in English (Asynchronous JavaScript + XML) blog by Yukio Andoh. 
<br /><br /><a href="http://ajax.atmarkit.co.jp/jsicdb/all/s" title="Atmarkit">Atmarkit</a><br />
Japanese language  AJAX site providing code samples and source code
<br /><br /><a href="http://b.hatena.ne.jp/sunaoka/Ajax/?mode=detail" title="Hatena">Hatena</a><br />
Japanese site presented in English with AJAX resources
<br /><br /><b>Korean</b><br /><br /><a href="http://okjsp.pe.kr/bbs?act=RECENT" title="OK JSP">OK JSP</a><br />
Korean language site coving AJAX, JSP and XML
<br /><br /><b>Spanish</b><br /><a href="http://www.ingeniuz.com/category/ajax/" title="Ingeniuz">Ingeniuz</a><br />
Spanish language site with a useful AJAX section<img src ="http://www.blogjava.net/dorian/aggbug/52351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2006-06-13 10:02 <a href="http://www.blogjava.net/dorian/archive/2006/06/13/52351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RFC 3261 - SIP: Session Initiation Protocol</title><link>http://www.blogjava.net/dorian/archive/2006/03/01/32986.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Wed, 01 Mar 2006 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2006/03/01/32986.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/32986.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2006/03/01/32986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/32986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/32986.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Network Working Group                                       J. RosenbergRequest for Comments: 3261                                   dynamicsoftObsoletes: 2543                                         ...&nbsp;&nbsp;<a href='http://www.blogjava.net/dorian/archive/2006/03/01/32986.html'>阅读全文</a><img src ="http://www.blogjava.net/dorian/aggbug/32986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2006-03-01 11:28 <a href="http://www.blogjava.net/dorian/archive/2006/03/01/32986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络上真的可以赚钱？！</title><link>http://www.blogjava.net/dorian/archive/2006/02/23/32072.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Thu, 23 Feb 2006 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2006/02/23/32072.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/32072.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2006/02/23/32072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/32072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/32072.html</trackback:ping><description><![CDATA[<div>原来是真的。我也无聊中俗了把，在网络中赚钱。</div>
<div>&nbsp;</div>
<div><img src="http://city.9sky.com/non-cgi/usr/27/27_4200_1980.gif" border="0" height="36" width="388"></div>
<div>&nbsp;</div>
<div><a href="http://www.ads4cn.com/newsbar/refferer.asp?wlf"><u><font color="#0000ff">http://www.ads4cn.com/newsbar/refferer.asp?greco</font></u></a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
（newsbar广告）</div>
<div>&nbsp;</div>
<div><a href="http://www.8qu.net/register.asp?net=wlfwlf">http://www.8qu.net/register.asp?net=greco</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
（八趣通宝）</div>
<div>&nbsp;</div>
<div><a href="http://www.sohoads.com/sabar/reg.asp?sj=wlf">http://www.sohoads.com/sabar/reg.asp?sj=greco</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
（soho广告）</div>
<div>&nbsp;</div>
<div>点击以上地址，免费注册即可。</div>
<div>&nbsp;</div>
<div><img src="http://city.9sky.com/non-cgi/usr/27/27_4200_1978.gif" border="0" height="36" width="386"></div>
<div>&nbsp;</div>
<div>简单介绍如下：</div>
<div>&nbsp;</div>
<div>【 newsbar】</div>
<div>&nbsp;</div>
<div>NewsBar是由新闻时报和易趣通过中国广告网发起的广告条赚钱方式，所以真实性绝对不容质疑，创办于2004-5-23。NewsBar自创办以来，以其良好的信誉得到网友广泛支持，几乎一直以每7秒增加一个新会员的速度飞速发展。目前已经突破800，000会员。NewsBar会员中，有部分成员每月收入均超过￥1000元。 
努努力，下一个兼职月赚千元的就是你哦。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;注册地址： <a href="http://www.ads4cn.com/newsbar/refferer.asp?wlf"><u><font color="#0000ff">http://www.ads4cn.com/newsbar/refferer.asp?greco</font></u></a> <br></div>
<div>&nbsp;</div>
<div>【八趣通宝】</div>
<div>&nbsp;</div>
<div>八趣通宝是国内最新的网赚，发展空间巨大，挂着就能赚钱！！像挂ＱＱ一样挂着就能轻松狂挣人民币或Ｑ币，登陆后只有铜钱大的图标在任务栏里不影响任何上网空间。另外它操作也比较人性化，已经通过本站的收款验证，所以在这里强强烈推荐！当然，这些都是在免费加入的前提下。不必担心上当受骗。</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 注册地址：<a href="http://www.8qu.net/register.asp?net=wlfwlf">http://www.8qu.net/register.asp?net=greco</a></div>
<div>&nbsp;</div>
<div>【soho】</div>
<div>&nbsp;</div>
<div>这是咱中国人自己的广告运营商，网站正处于高速发展期。基础打好了，往后您的收益可是相当可观的，而您要做的只是坐在电脑前看看广告，就跟看电视广告一样。看电视可没人因为您看了广告给您钱啊！</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 注册地址：<a href="http://www.sohoads.com/sabar/reg.asp?sj=wlf">http://www.sohoads.com/sabar/reg.asp?sj=greco</a></div>
<div>&nbsp;</div>
<div><img src="http://city.9sky.com/non-cgi/usr/27/27_4200_1977.gif" border="0" height="41" width="389"></div>
<div>&nbsp;</div>
<div>【个人心得】</div>
<div>1、无需一点的财力投入，只赚不赔，是个有前景的好生意。</div>
<div>2、精力投入要量力而为。不要为了这点小钱浪费，否则得不偿失。</div>
<div>3、积极发展下线伙伴，高高兴兴一起赚钱。</div>
<div>&nbsp;</div>
<div>大家也可以玩玩试试。<img src="http://spaces.msn.com/rte/emoticons/smile_wink.gif"></div>
<div>&nbsp;</div>
<div><img src="http://city.9sky.com/non-cgi/usr/27/27_4200_1979.gif" border="0" height="38" width="388"></div>
<div>&nbsp;</div>
<div>PS：本人已经不玩了，呵呵，费时费力。</div><img src ="http://www.blogjava.net/dorian/aggbug/32072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2006-02-23 10:33 <a href="http://www.blogjava.net/dorian/archive/2006/02/23/32072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>爱过了</title><link>http://www.blogjava.net/dorian/archive/2006/01/04/26547.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Wed, 04 Jan 2006 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2006/01/04/26547.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/26547.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2006/01/04/26547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/26547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/26547.html</trackback:ping><description><![CDATA[<div align="center"><img src="http://static.flickr.com/39/81906531_3c1a4cd7c5_o.jpg"></div><img src ="http://www.blogjava.net/dorian/aggbug/26547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2006-01-04 14:04 <a href="http://www.blogjava.net/dorian/archive/2006/01/04/26547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>真正的佛法</title><link>http://www.blogjava.net/dorian/archive/2005/12/19/24657.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 19 Dec 2005 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/12/19/24657.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/24657.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/12/19/24657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/24657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/24657.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 有心禅师德高望重，博学多闻，担任寂相寺住持，但来此向他问道的人虽多，可惜很少人能够契入。他有一位师弟名叫有得，根基迟钝，又有一目失明，平常都帮师兄做一些幕后工作，从未对客说法。<br>有一天，有心禅师刚好出们，有一禅僧来此参访，希望能当面请求开示，有得师弟不得已，只好硬着头皮以“无言对答”的方法来接见这位禅僧。<br>两人对面都不发一言，只是用手指笔画，不久之后，禅僧非常欣喜地向有得礼拜，拜后告辞。路上遇到有心禅师，因此就夸有得实在是个了不起的禅师法将，并滔滔地说着他向有得请益的经过道：“首先，我竖一指，表示大觉世尊，人天无二；他就竖起两指，表示佛、法二者，一体两面，是二而一。之后，我竖三指，表示佛、法、僧三宝，和合而往，缺一不可；他就在我面前捏起拳头，表示三者皆由一悟而得。至此，我已技穷，只得向他礼拜而出”。<br>禅僧说后离去，有心禅师回来，有得非常气氛地向他报告道：“刚才有一个禅僧非常无理，他一进门向我瞧了一眼，接着就竖起一指，讽刺我只有一只眼睛！我因他是来参访的禅僧，对他客气，所以我就竖起两指，表示他有两只眼睛，非常幸运。谁知道这个人非常无理，竟然举起三只指头，暗示他和我两个人只有三只眼睛，你说气不气人？因此我举起拳头，正要好好揍他，他就急忙磕个头跑掉了”。<br>有心禅师听后，不禁哑然失笑。<br>在人际交往的过程中，常常发生沟通上的误会，避免这种误会，彼此畅通无阻地交流，才能达到交际的目的。<br><img src ="http://www.blogjava.net/dorian/aggbug/24657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-12-19 17:53 <a href="http://www.blogjava.net/dorian/archive/2005/12/19/24657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新买了只笔记本</title><link>http://www.blogjava.net/dorian/archive/2005/12/19/24627.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 19 Dec 2005 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/12/19/24627.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/24627.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/12/19/24627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/24627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/24627.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <br>
<a href="http://static.flickr.com/42/75057399_7c9ab3eff4_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/42/75057399_7c9ab3eff4_o.jpg">
</a>
<br>
<a href="http://static.flickr.com/38/75057402_aa736a6292_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/38/75057402_aa736a6292_o.jpg">
</a>
<br>
<a href="http://static.flickr.com/36/75057401_b6f25458c8_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/36/75057401_b6f25458c8_o.jpg">
</a>
<br>

<a href="http://static.flickr.com/43/75057405_cf2b809841_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/43/75057405_cf2b809841_o.jpg">
</a>
<br>
<a href="http://static.flickr.com/43/75057403_61b508f6d7_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/43/75057403_61b508f6d7_o.jpg">
</a>
<br>
<a href="http://static.flickr.com/42/75059365_65fd2b8a75_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/42/75059365_65fd2b8a75_o.jpg">
</a>
<br>

<a href="http://static.flickr.com/38/75057406_b04aa78257_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/38/75057406_b04aa78257_o.jpg">
</a>
<br>
<a href="http://static.flickr.com/39/75059368_8afd6888b3_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/39/75059368_8afd6888b3_o.jpg">
</a>
<br>
<a href="http://static.flickr.com/39/75059367_7582d566b7_o.jpg">
<img style="width: 250px; height: 187px;" src="http://static.flickr.com/39/75059367_7582d566b7_o.jpg">
</a>
<br><img src ="http://www.blogjava.net/dorian/aggbug/24627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-12-19 13:47 <a href="http://www.blogjava.net/dorian/archive/2005/12/19/24627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>豁达是幸福人生的奥秘</title><link>http://www.blogjava.net/dorian/archive/2005/12/19/24626.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 19 Dec 2005 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/12/19/24626.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/24626.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/12/19/24626.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/24626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/24626.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 欲成就大的事业，必须具有豁达的人生观。豁达是一种超脱，是自我精神的解放。努力开拓人生，增进众生的福报，但却让我们看清楚，没有一样东西在生命终了时能带得走，所以要懂得达观，懂得放下，不要执著。<br>&nbsp;&nbsp;&nbsp; 人生百年，七十、八十也算是命大了。人这一辈子与其悲悲戚戚、郁郁寡欢地过，倒不如痛痛快快、潇潇洒洒地活。可人生一世，那么多的风风雨雨，坎坎坷坷，怎么才能活得精精神神的？豁达才是人生的奥秘。豁达是一种超脱，是自我精神的解放，人要是成天被名利缠得牢牢的，得失算得精精的，树叶子掉下来悲悲伤伤的，那还豁达个啥！豁达就要有点豪气，乍暖还寒寻常事，淡妆浓抹总相宜。凡事到了淡，就到了最高境界，天高云淡，一片光明。人肯定要有追求，追求是一回事，结果是一回事。你就记住一句话：事物的发生发展都必须符合时空条件，有“时”无“空”，有“空”无“时”都不行,那你就得认了.人活得累,是心累,常唠叨这几句话就会轻松得多：“功名利禄四道墙,人人翻滚跑得忙;若是你能看得穿,一生快活不嫌长。”<br>&nbsp;&nbsp;&nbsp; 豁达是一种宽容。恢宏大度，胸无芥蒂，肚大能容，吐纳百川。飞短流长怎么样，黑云压城又如何？心中自有一束不灭的阳光。以风清月朗的态度，从从容容地对待一切，待到廓清云雾，必定是柳暗花明。<br>豁达是一种开朗。豁达的人，心大，心宽，悲愁痛苦的情绪，都在嬉笑怒骂，大喊大叫中斯个粉碎。你说，世界上的事都公平？不公平有的是，你能让它都公平？我们要按生活本来的面目看生活，而不是按着自己的意愿看生活。风和日丽，你要欣赏，光怪陆离，你也要品尝，这才自然，你就不会有太多牢骚，太多的不公平。不过，“月有阴晴圆缺”对谁都一样，“十年河东，十年河西”，一切都会随着时间的推移而变化。阴阳对峙，此消彼长，升降入出，这就是生机，拿这大宇宙来看你这个小宇宙，你能超越的了？<br>&nbsp;&nbsp;&nbsp; 豁达是一种自信，人要是没有精神支撑，剩下的就是一具皮囊。人的这个精神就是自信，自信就是力量，自信给人智勇，自信可以使人消除烦恼，自信可以使人摆脱困境。有了自信，就充满了光明。<br><br><img src ="http://www.blogjava.net/dorian/aggbug/24626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-12-19 13:41 <a href="http://www.blogjava.net/dorian/archive/2005/12/19/24626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QQ的HTTP接口探究</title><link>http://www.blogjava.net/dorian/archive/2005/12/12/23482.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 12 Dec 2005 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/12/12/23482.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/23482.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/12/12/23482.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/23482.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/23482.html</trackback:ping><description><![CDATA[来自:http://blog.donews.com/zwell/archive/2005/08/22/520301.aspx<BR><BR>１、研究说明 <BR><BR>　　Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口，通过这个接口，可以进行一些基本的操作，如：登陆、登出、改变登陆状态(上线、忙碌、离线、隐身)、添加删除好友、查看好友信息、发送验证信息(接受被加为好友、申请加对方为好友、拒绝被加为好友)、收发用户消息、系统信息。 <BR><BR>　　目前我研究的是1.1版本的HTTP&nbsp;QQ协议，研究是微程在的成果上进行的，不敢说有什么超越，只不过更为详细和准确。 <BR><BR>２、接口说明： <BR><BR>　　接口位置：tqq.tencent.com:8000 <BR>　　通信协议：HTTP <BR>　　数据传输方法：POST <BR>　　HTTP请求格式： <BR><BR>POST&nbsp;HTTP/1.1 <BR>Host:&nbsp;tqq.tencent.com:8000 <BR>Content-Type:&nbsp;text/plain;&nbsp;charset=UTF-8 <BR>Content-length:&nbsp;长度 <BR>Connection:&nbsp;close <BR><BR>数据 <BR><BR>　　其中长度为&nbsp;数据&nbsp;的长度，数据的格式： <BR>　　VER=1.1&amp;CMD=命令&amp;SEQ=标记&amp;UIN=QQ号&amp;.... <BR><BR>　　以上４个参数是每个请求都必有的。其中，VER表示协议的版本，目前为1.1，据说1.2已经出来了，这个乱写的话，服务器返回NULL； CMD为操作的指令，有Login、List、Query_Stat、GetInfo、AddToList、Ack_AddToList、 DelFromList、Change_Stat、GetMsgEx、CLTMSG、Logout；SEQ为当前请求的标记，防止重复发送，可以用当前时间，也可以用随机数；UIN是当前执行操作的QQ号。不过不同的CMD还需要不同的参数，下面我就公布我的研究成果。 <BR><BR>３、研究方法： <BR><BR>　　我对目前网上的资料不够满意，就自己写程序，发送多条相同CMD不同参数的请求，根据服务器的返回，来做判断。感兴趣的朋友可以参考一下，此处可以跳过。 <BR>　　下面我公布我探测的代码(PHP)： <BR><BR>[code:1:1bbf2dec18] <BR>&lt;? <BR>$uin&nbsp;=&nbsp;"QQ号"; <BR>$pwd&nbsp;=&nbsp;md5("QQ密码"); <BR><BR>//登陆测试 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=1&amp;LC=9326B87B234E7235"; <BR>//注意：登陆测试不能同时进行，必须等到服务器认为QQ断开了，才能够测试，不然结果不可信 <BR>/******* <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=0&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=1&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=2&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=3&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M6=1&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M6=1&amp;LC=1223423545756679"; <BR>*******/ <BR><BR><BR>//得到好友列表 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=106814"; <BR><BR>//得到在线列表 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=106814"; <BR><BR>//查看好友信息 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=0&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=1&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=2&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=3&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=4&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=5&amp;UN=106814"; <BR><BR>//增加好友 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814"; <BR><BR>//发送验证 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=0&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=1&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=2&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=3&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=4&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=5&amp;RS=TEST"; <BR><BR>//删除好友 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=DelFromList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814"; <BR><BR>//改变状态 <BR>for($i=0;$i&lt;=60;$i=$i+5) <BR>{ <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Change_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;ST=".$i; <BR>} <BR><BR>//获得消息 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetMsgEx&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin.""; <BR><BR>//发送消息 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=CLTMSG&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;MG=TEST"; <BR><BR>//登出 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Logout&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin.""; <BR><BR>$file&nbsp;=&nbsp;fopen("p.txt","w"); <BR><BR>foreach($poststring&nbsp;as&nbsp;$k=&gt;$v) <BR>{ <BR>ss_timing_start(); <BR>$fp&nbsp;=&nbsp;fsockopen('tqq.tencent.com',&nbsp;'8000',&nbsp;$errno,&nbsp;$errstr,&nbsp;$timeout&nbsp;=&nbsp;10);&nbsp; <BR><BR>if(!$fp){&nbsp; <BR>&nbsp;//error&nbsp;tell&nbsp;us&nbsp; <BR>&nbsp;$content&nbsp;=&nbsp;$k.chr(13).chr(10)."ERROR:$errstr&nbsp;($errno)";&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>}else{&nbsp; <BR><BR>&nbsp;&nbsp;//send&nbsp;the&nbsp;server&nbsp;request&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;"POST&nbsp;HTTP/1.1\r\n");&nbsp; <BR>//&nbsp;&nbsp;fputs($fp,&nbsp;"Host:&nbsp;$host\r\n");&nbsp; <BR>//&nbsp;&nbsp;fputs($fp,&nbsp;"Content-type:&nbsp;application/x-www-form-urlencoded\r\n");&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;"Content-length:&nbsp;".strlen($v)."\r\n");&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;"Connection:&nbsp;close\r\n\r\n");&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;$v&nbsp;.&nbsp;"\r\n\r\n");&nbsp; <BR><BR>&nbsp;&nbsp;//loop&nbsp;through&nbsp;the&nbsp;response&nbsp;from&nbsp;the&nbsp;server&nbsp; <BR>&nbsp;&nbsp;$res&nbsp;=&nbsp;""; <BR>&nbsp;&nbsp;while(!feof($fp))&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;$res&nbsp;.=&nbsp;fgets($fp,&nbsp;4096);&nbsp; <BR>&nbsp;&nbsp;}&nbsp; <BR>&nbsp;&nbsp;//close&nbsp;fp&nbsp;-&nbsp;we&nbsp;are&nbsp;done&nbsp;with&nbsp;it&nbsp; <BR>&nbsp;&nbsp;fclose($fp);&nbsp; <BR><BR>&nbsp;&nbsp;$content&nbsp;=&nbsp;$v.chr(13).chr(10).$res; <BR>}&nbsp; <BR>ss_timing_stop();&nbsp; <BR>$content&nbsp;.=&nbsp;chr(13).chr(10)."Time:&nbsp;".ss_timing_current().chr(13).chr(10)."--------------------------------------".chr(13).chr(10); <BR>fputs($file,$content); <BR>} <BR>fclose($file); <BR>?&gt; <BR>&lt;? <BR>function&nbsp;ss_timing_start&nbsp;($name&nbsp;=&nbsp;"default")&nbsp;{&nbsp; <BR>global&nbsp;$ss_timing_start_times;&nbsp; <BR>$ss_timing_start_times[$name]&nbsp;=&nbsp;explode('&nbsp;',&nbsp;microtime());&nbsp; <BR>}&nbsp; <BR>function&nbsp;ss_timing_stop&nbsp;($name&nbsp;=&nbsp;"default")&nbsp;{&nbsp; <BR>global&nbsp;$ss_timing_stop_times;&nbsp; <BR>$ss_timing_stop_times[$name]&nbsp;=&nbsp;explode('&nbsp;',&nbsp;microtime());&nbsp; <BR>}&nbsp; <BR>function&nbsp;ss_timing_current&nbsp;($name&nbsp;=&nbsp;"default")&nbsp;{&nbsp; <BR>global&nbsp;$ss_timing_start_times,&nbsp;$ss_timing_stop_times;&nbsp; <BR>if&nbsp;(!isset($ss_timing_start_times[$name]))&nbsp;{&nbsp; <BR>return&nbsp;0;&nbsp; <BR>}&nbsp; <BR>if&nbsp;(!isset($ss_timing_stop_times[$name]))&nbsp;{&nbsp; <BR>$stop_time&nbsp;=&nbsp;explode('&nbsp;',&nbsp;microtime());&nbsp; <BR>}&nbsp; <BR>else&nbsp;{&nbsp; <BR>$stop_time&nbsp;=&nbsp;$ss_timing_stop_times[$name];&nbsp; <BR>}&nbsp; <BR>$current&nbsp;&nbsp;=&nbsp;&nbsp;$stop_time[1]-$ss_timing_start_times[$name][1];&nbsp; <BR>$current&nbsp;+=&nbsp;$stop_time[0]-$ss_timing_start_times[$name][0];&nbsp; <BR>return&nbsp;$current;&nbsp; <BR>}&nbsp; <BR>?&gt; <BR>[/code:1:1bbf2dec18] <BR><BR>４、研究成果： <BR><BR>(1).登陆 <BR>　　说明：在你做任何其他操作以前，你必须登陆。只有在登陆以后，你的其他指令才有可能被正确执行(返回RES=0)，不然服务器会返回RES= 20，不过有个例外，就是logout。当你成功登陆以后，服务器就会根据你的IP*和参数中的UIN来验证身份。一台电脑可以同时登陆多个QQ，互不影响，就是因为有参数UIN。 <BR>　　*至于我能够确定服务器是通过IP来验证的，是因为服务器不可能通过我的请求获得其他信息了^_^ <BR><BR>　　提交数据：VER=1.1&amp;CMD=Login&amp;SEQ=标记&amp;UIN=QQ号&amp;PS=QQ密码&amp;M5=1&amp;LC=9326B87B234E7235 <BR>　　说明：QQ密码是通过md5加密的字符串，在PHP中可以直接用md5()进行加密； <BR>　　　　　M5这个参数的作用还不清楚，但最好为1。 <BR>　　　　　LC这个参数有点神秘，不能有丝毫改动，不然服务器就没有响应(没有响应就是返回NULL)。 <BR><BR>　　返回：VER=1.1&amp;CMD=LOGIN&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;RS=0&amp;HI=60&amp;LI=300(成功) <BR>　　　　　VER=1.1&amp;CMD=LOGIN&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;RS=1&amp;RA=密码错误(密码错误) <BR>　　　　　VER=1.1&amp;CMD=LOGIN&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=5(QQ号非法，如100) <BR>　　　　　NULL(UIN为字符、PS为空、LC错误) <BR><BR>(2).得到好友列表 <BR>　　提交数据：VER=1.1&amp;CMD=List&amp;SEQ=标记&amp;UIN=QQ号&amp;TN=160&amp;UN=0 <BR>　　说明：TN、UN还不清楚具体表示什么，但是TN的值会影响返回的结果，有没有UN对结果没有影响 <BR><BR>　　返回：VER=1.1&amp;CMD=LIST&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FN=9(当TN=0或没有TN参数时，FN表示好友数) <BR>　　　　　VER=1.1&amp;CMD=LIST&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FN= 1&amp;SN=9&amp;UN=3814526,...,(当TN存在且非0时，FN=1，SN表示好友数，UN为好友列表，用","分割) <BR>　　　　　VER=1.1&amp;CMD=LIST&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、TN、UN为字符) <BR><BR>(3).得到在线好友列表 <BR>　　提交数据：VER=1.1&amp;CMD=Query_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;TN=50&amp;UN=0 <BR>　　说明：TN、UN还不清楚具体表示什么，但是TN的值会影响返回的结果，有没有UN对结果没有影响 <BR><BR>　　返回：VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES= 0&amp;FC=0,&amp;FN=1&amp;SN=1&amp;ST=10,&amp;UN=106814,&amp;NK=Hackfan&nbsp; 好,(当TN存在且非0时，FN=1，SN表示在线好友数，FC、ST、UN、NK的值用','分割，分别表示头像、状态、号码、昵称) <BR>　　　　　VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、TN、UN为字符) <BR>　　说明：FC为QQ头像的的ID，如的头像ID为270，那么其头使用的图片为91.bmp,其算法为ID/3+1； <BR>　　　　　ST为QQ用户的状态，10为上线，20为离线(或隐身)，30为忙碌； <BR><BR>　　特别说明：当参数TN=0或不存在时，服务器返回： <BR>VER=1.1&amp;CMD=Query_Stat&amp;SEQ=标记&amp;UIN=QQ号 <BR>HTTP/1.1&nbsp;200&nbsp;OK <BR>Server:&nbsp;tencent&nbsp;imserver/1.0.0 <BR>Content-Type:&nbsp;text/plain;&nbsp;charset=UTF-8 <BR>Content-Length:&nbsp;56 <BR><BR>VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FN=1 <BR>HTTP/1.1&nbsp;200&nbsp;OK <BR>Server:&nbsp;tencent&nbsp;imserver/1.0.0 <BR>Content-Type:&nbsp;text/plain;&nbsp;charset=UTF-8 <BR>Content-Length:&nbsp;77 <BR><BR>VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FC=&amp;FN=1&amp;SN=0&amp;ST=&amp;UN=&amp;NK= <BR>　　返回了２次，第一次的结果中，FN为在线好友数，第二次返回的数据基本没用。 <BR><BR>(4).查看好友信息 <BR>　　提交数据：VER=1.1&amp;CMD=GetInfo&amp;SEQ=标记&amp;UIN=QQ号&amp;LV=查询类型&amp;UN=被查询QQ号码 <BR>　　说明：LV=0,1为精简查询，LV=2为普通查询，LV&gt;=3为详细查询 <BR><BR>　　返回：VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;LV=0&amp;UN=106814&amp;NK=Hackfan&nbsp;好(精简查询) <BR>　　　　　VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;AD =地址&amp;AG=19&amp;EM=hackfan@qq.com&amp;FC=0&amp;HP=http: //blog.hackfan.net&amp;JB=学生 <BR>&amp;LV=2&amp;PC=邮编&amp;PH=电话&amp;PR= The&nbsp;guy&nbsp;is&nbsp;updating&nbsp;to&nbsp;.NET&nbsp;Frameword......&amp;PV=江苏&amp;RN=胡吉阳&amp;SC= 毕业院校&amp;SX=0&amp;UN=106814&amp;NK=Hackfan&nbsp; <BR>好(普通查询) <BR>　　　　　VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;AD =地址&amp;AG=19&amp;BT=2&amp;CO=6&amp;CT=苏州&amp;CV=%01&amp;CY=中华人民共和国 <BR>&amp;EM=hackfan@qq.com&amp;FC=0&amp;HP=http://blog.hackfan.net&amp;ID =-&amp;JB=学生&amp;LV=3&amp;MO=136********&amp;MT=0&amp;MV=&amp;PC=邮编&amp; PH=电话&amp;PR=The&nbsp;guy&nbsp;is&nbsp; <BR>updating&nbsp;to&nbsp;.NET&nbsp;Frameword......&amp;PV=江苏&amp;RN=胡吉阳&amp;SC=毕业院校&amp;SH=3&amp;SX=0&amp;UN=106814&amp;NK=Hackfan&nbsp;好(详细查询) <BR>　　　　　VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、LV、UN为字符) <BR><BR>　　说明：AD为联系地址 <BR>　　　　　AG为年龄 <BR>　　　　　BT为血型 <BR>　　　　　CO为星座 <BR>　　　　　CT为城市 <BR>　　　　　CV为未知* <BR>　　　　　CY为国家 <BR>　　　　　EM为Email <BR>　　　　　FC为头像 <BR>　　　　　HP为网站 <BR>　　　　　ID为未知 <BR>　　　　　JB为职业 <BR>　　　　　LV为查询代码(就是发送的LV) <BR>　　　　　MO为移动电话 <BR>　　　　　MT为未知 <BR>　　　　　MV为未知 <BR>　　　　　PC为邮编 <BR>　　　　　PH为联系电话 <BR>　　　　　PR为简介 <BR>　　　　　PV为省 <BR>　　　　　RN为真实姓名 <BR>　　　　　SC为毕业院校 <BR>　　　　　SH为生肖 <BR>　　　　　SX为性别 <BR>　　　　　UN为QQ号 <BR>　　　　　NK为昵称 <BR><BR>　　　　　血型：0&nbsp;=&gt;&nbsp;'', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'A型', <BR>　　　　　　　　2&nbsp;=&gt;&nbsp;'B型', <BR>　　　　　　　　3&nbsp;=&gt;&nbsp;'O型', <BR>　　　　　　　　4&nbsp;=&gt;&nbsp;'AB型', <BR>　　　　　　　　5&nbsp;=&gt;&nbsp;'其他' <BR><BR><BR>　　　　　星座：0&nbsp;=&gt;&nbsp;'', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'水瓶座', <BR>　　　　　　　　2&nbsp;=&gt;&nbsp;'双鱼座', <BR>　　　　　　　　3&nbsp;=&gt;&nbsp;'牡羊座', <BR>　　　　　　　　4&nbsp;=&gt;&nbsp;'金牛座', <BR>　　　　　　　　5&nbsp;=&gt;&nbsp;'双子座', <BR>　　　　　　　　6&nbsp;=&gt;&nbsp;'巨蟹座', <BR>　　　　　　　　7&nbsp;=&gt;&nbsp;'狮子座', <BR>　　　　　　　　8&nbsp;=&gt;&nbsp;'处女座', <BR>　　　　　　　　9&nbsp;=&gt;&nbsp;'天秤座', <BR>　　　　　　　　10&nbsp;=&gt;&nbsp;'天蝎座', <BR>　　　　　　　　11&nbsp;=&gt;&nbsp;'射手座', <BR>　　　　　　　　12&nbsp;=&gt;&nbsp;'摩羯座' <BR><BR>　　　　　生肖：0&nbsp;=&gt;&nbsp;'', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'鼠', <BR>　　　　　　　　2&nbsp;=&gt;&nbsp;'牛', <BR>　　　　　　　　3&nbsp;=&gt;&nbsp;'虎', <BR>　　　　　　　　4&nbsp;=&gt;&nbsp;'兔', <BR>　　　　　　　　5&nbsp;=&gt;&nbsp;'龙', <BR>　　　　　　　　6&nbsp;=&gt;&nbsp;'蛇', <BR>　　　　　　　　7&nbsp;=&gt;&nbsp;'马', <BR>　　　　　　　　8&nbsp;=&gt;&nbsp;'羊', <BR>　　　　　　　　9&nbsp;=&gt;&nbsp;'猴', <BR>　　　　　　　　10&nbsp;=&gt;&nbsp;'鸡', <BR>　　　　　　　　11&nbsp;=&gt;&nbsp;'狗', <BR>　　　　　　　　12&nbsp;=&gt;&nbsp;'猪' <BR><BR>　　　　　性别：0&nbsp;=&gt;&nbsp;'男', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'女' <BR><BR>(5).增加好友 <BR>　　提交数据：VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=对方QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;CD=0&amp;UN=对方QQ号(允许被加为好友，此时他已经是你的好友) <BR>　　　　　VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;CD=1&amp;UN=对方QQ号(需要验证) <BR>　　　　　VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;CD=2&amp;UN=对方QQ号(决绝被加为好友) <BR>　　　　　VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN为字符) <BR><BR>(5).发送验证 <BR>　　说明：1、如果你加对方为好友，你需要发送验证 <BR>　　　　　2、对方加你为好友，发送了验证，你要通过或者拒绝 <BR>　　　　　这2种情况需要发送验证消息 <BR><BR>　　提交数据：VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=对方QQ号&amp;CD=验证类型&amp;RS=理由 <BR>　　说明：CD为0表示“通过验证”，CD为1表示“拒决加为对方为好友”，CD为2表示“为请求对方加为好友”。 <BR><BR>　　返回：VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0(成功) <BR>　　　　　VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(*) <BR>　　　　　VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN、CD为字符，RS为非UTF-8字符) <BR>　　*如果服务器返回RES=3，那么这次对话的响应时间在20s。当发送验证请求的时候，必须连发2次(请求内容不必一样)，其中一条RES=3，对方收不到，一条RES=0，对方能够收到。当CD&gt;=3时，RES=3，响应时间20s。 <BR><BR>(6).删除好友 <BR>　　提交数据：VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=删除的QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;(成功) <BR>　　　　　VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(响应时间30s，重复发送的后果) <BR>　　　　　VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN为字符) <BR><BR>(7).改变状态 <BR>　　提交数据：VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;ST=状态代码 <BR>　　说明：状态代码：10为上线，20为离线，30为忙碌，40为隐身，其他视为非法 <BR><BR>　　返回：VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;(成功) <BR>　　　　　VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(失败，原因不明，响应时间20s，可能是过于频繁的改变状态引起的) <BR>　　　　　VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN为字符，ST非法) <BR><BR>　　特别说明：如果你改变好友，将会给所有好友发送一条系统信息，内容就是状态代码；如果隐身，发送的状态代码为20，表示离线。 <BR>　　　　　　　同理，当你的好友改变状态，你也会收到一条系统信息。 <BR><BR>(9).获得消息 <BR>　　提交数据：VER=1.1&amp;CMD=GetMsgEx&amp;SEQ=标记&amp;UIN=QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=GETMSGEX&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp; MN=4&amp;MT=99,99,99,9,&amp;UN=36791785,99833581,99833581,106814,&amp;MG= 20,30,10,hi&nbsp;,(MN表示信息数量，MT、UN、MG的值用","分割，分别表示消息类型、发送人号码、消息内容) <BR>　　　　　VER=1.1&amp;CMD=GETMSGEX&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;MN=0&amp;MT=&amp;UN=&amp;MG=(表示没有信息) <BR>　　　　　VER=1.1&amp;CMD=GETMSGEX&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN为字符) <BR>　　说明：关于MT： <BR>　　　　　　　9为用户消息，99为系统消息，2为请求信息，3为通过验证，4为拒绝被加好友 <BR>　　　　　关于MG： <BR>　　　　　　　当MT=9时，MG为用户发送的消息内容 <BR>　　　　　　　当MT=99时, <BR>　　　　　　　　　MG=10(QQ_STATUS_ONLINE)表示对方上线 <BR>　　　　　　　　　MG=20(QQ_STATUS_OFFLINE)表示对方下线 <BR>　　　　　　　　　MG=30(QQ_STATUS_BUSY)表示对方进入忙碌状态 <BR>　　　　　　　当MT=2时，MG为对方请求你验证的信息 <BR>　　　　　　　当MT=3时，表示对方通过你的验证 <BR>　　　　　　　当MT=4时，MG为对方拒绝你理由 <BR><BR>(10).发送消息 <BR>　　提交数据：VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=对方QQ号&amp;MG=发送内容 <BR><BR>　　返回：VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;(成功发送，对方不一定能收到哦) <BR>　　　　　VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(发送过快) <BR>　　　　　VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN为字符，MG含非UTF-8字符) <BR>　　说明：1、当你发消息时，以下情形对方可能看不到(其实是收到了，QQ不提示)你发送的消息： <BR>　　　　　　　你俩互为陌生人，且对方没有和你说过话 <BR>　　　　　　　你在他的陌生人列表里，并且他没有和你说过话(没有验证) <BR>　　　　　2、当你过快发送消息时，系统会给你一个惩罚，RES=3，相应时间20s <BR>　　　　　3、当我发送含有小写字母h的信息时，服务器有可能返回NULL <BR><BR>(11).登出 <BR>　　提交数据：VER=1.1&amp;CMD=Logout&amp;SEQ=标记&amp;UIN=QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=LOGOUT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0(成功，好像永远成功的，不管你是否登陆) <BR>　　　　　NULL(UIN为字符) <BR><img src ="http://www.blogjava.net/dorian/aggbug/23482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-12-12 14:54 <a href="http://www.blogjava.net/dorian/archive/2005/12/12/23482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>生活状态</title><link>http://www.blogjava.net/dorian/archive/2005/11/28/21699.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 28 Nov 2005 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/11/28/21699.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/21699.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/11/28/21699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/21699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/21699.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天中午原本要到一个地方去办事的，因为对方临时有事，所以……<BR>&nbsp;&nbsp;&nbsp; 一个人在拥挤的马路上闲逛，走着走着，走到了一个大型绿地。一眼望去，满眼<BR>绿意真是舒坦。走到了一张空椅上，座了下来。任凭微风扶过脸庞，太阳轻抚额头，<BR>秋天的那股子清香换洗肺中的浊气。轻轻闭上眼睛享受午后的优闲。这种感觉，这种<BR>惬意，好像好久都没有过了，留在记忆中的也不过是在儿时的情景中了。是啊！这种<BR>感觉在我生命中消失已经很久了。自已所需要的那种生活也已封存在内心的某个角落<BR>里，永不见天日。<BR>&nbsp;&nbsp;&nbsp; 现在想想究竟什么才是自己所要的生活？是够单纯？是够简单？是一箪食，一瓢<BR>饮？还是其他什么精神上的东西？<BR>&nbsp;&nbsp;&nbsp; 每天早上准时起床，准时挤车，准时上班。上班时间里除了处理掉一些日常事务<BR>之外，还要多做一些能被同事所认同的事情。计划着要买房子，计划着要结婚，考虑<BR>将来的正常生活，还必须得存一笔钱，长辈这边还要在节假日不时的关怀和孝敬一下。<BR>学习方面还要不时的紧跟潮流……这样的生活把人的灵魂折磨的酸痛不堪。生活时刻<BR>在继续，我们也时刻在放弃，逃避，对抗的冲动中挣扎。但悲哀的是，大多数情况下，<BR>每晚只能在想着一切美好生活中昏昏沉沉地睡去，然后等着明天地太阳升起再重复着<BR>今天。<BR>&nbsp;&nbsp;&nbsp; 生活在都市中，很多人地生活大概都这样地吧！也许这就是生活吧！谁知道呢！<BR>反正现在我是要睡觉了，等着明天再重复一次今天地生活。Good night!<BR><BR><BR>ps. 希望梦可以做地好一点^_^ <BR></P><img src ="http://www.blogjava.net/dorian/aggbug/21699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-11-28 17:43 <a href="http://www.blogjava.net/dorian/archive/2005/11/28/21699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows XP 模拟 Windows Vista</title><link>http://www.blogjava.net/dorian/archive/2005/11/21/20759.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 21 Nov 2005 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/11/21/20759.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/20759.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/11/21/20759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/20759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/20759.html</trackback:ping><description><![CDATA[下面是模拟后的一些截图：<BR><BR><A HREF="/images/blogjava_net/dorian/4207/o_vista1b.jpg" target=_blank><IMG height=96 alt=t_vista1b.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_vista1b.jpg" width=120 border=0></A><BR><BR><A HREF="/images/blogjava_net/dorian/4207/o_vista2b.jpg" target=_blank><IMG height=96 alt=t_vista2b.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_vista2b.jpg" width=120 border=0></A><BR><BR><A HREF="/images/blogjava_net/dorian/4207/o_vista3b.jpg" target=_blank><IMG height=96 alt=t_vista3b.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_vista3b.jpg" width=120 border=0></A><BR><BR>下面是教你怎么样模拟的详细教程：<BR><A href="http://www.joejoe.biz/joejoe/vista.htm">http://www.joejoe.biz/joejoe/vista.htm</A><BR><BR>还有一些资源包下载：<BR><BR><A href="http://crystalxp.zerackiel.net/bricopack-vista-inspirat.php">http://crystalxp.zerackiel.net/bricopack-vista-inspirat.php</A><BR><A href="http://www.winmatrix.com/forums/index.php?showtopic=5684">http://www.winmatrix.com/forums/index.php?showtopic=5684</A><BR><A href="http://www.stardock.com/products/stylevista/download.asp">http://www.stardock.com/products/stylevista/download.asp</A><BR><img src ="http://www.blogjava.net/dorian/aggbug/20759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-11-21 14:15 <a href="http://www.blogjava.net/dorian/archive/2005/11/21/20759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 调试新武器</title><link>http://www.blogjava.net/dorian/archive/2005/11/08/18801.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Tue, 08 Nov 2005 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/11/08/18801.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/18801.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/11/08/18801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/18801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/18801.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">JavaScript <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调试新武器</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是为</SPAN><SPAN lang=ZH-CN> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</SPAN> Mozilla <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的浏览器而提供的一个强大的</SPAN> JavaScript <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调试环境。本文将对</SPAN>Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做一个简单的介绍。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境：</SPAN>Mozilla Firefox 1.0.4</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36pt">JavaScript Dubugger 0.9.84 (<SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此为</SPAN>Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的代号</SPAN>)</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一步就是给</SPAN> Firefox <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装此插件。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><A href="http://ftp.mozilla.org/pub/mozilla.org/extensions/javascript_debugger/javascript_debugger-0.9.84-fx.xpi"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点这里下载并安装插件</SPAN></A></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装好后重启一下</SPAN> Firefox,<SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可在菜单工具</SPAN> -&gt; JavaScript Debugger <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击来运行</SPAN> Venkman<SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">界面如下</SPAN>:</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<A href="/images/blogjava_net/dorian/4207/o_venkman.jpg" target=_blank><IMG height=90 alt=t_venkman.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_venkman.jpg" width=120 border=0><o:p></o:p></A></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二步，我们来写一个有错误的代码：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个名为</SPAN> Test.js <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN> JavaScript <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本文件。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG id=Codehighlighter1_19_37_Open_Image onclick="this.style.display='none'; Codehighlighter1_19_37_Open_Text.style.display='none'; Codehighlighter1_19_37_Closed_Image.style.display='inline'; Codehighlighter1_19_37_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_19_37_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_37_Closed_Text.style.display='none'; Codehighlighter1_19_37_Open_Image.style.display='inline'; Codehighlighter1_19_37_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">function</SPAN><SPAN style="COLOR: #000000">&nbsp;test(str)&nbsp;</SPAN><SPAN id=Codehighlighter1_19_37_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_19_37_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;alert(Str);<BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个名为</SPAN> Test.html <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的网页文件。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">HTML</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">HEAD</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">Script&nbsp;</SPAN><SPAN style="COLOR: #ff0000">Language</SPAN><SPAN style="COLOR: #0000ff">="JavaScript"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;src</SPAN><SPAN style="COLOR: #0000ff">="Test.js"</SPAN><SPAN style="COLOR: #0000ff">&gt;</< SPAN><SPAN style="COLOR: #800000">Script</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">HEAD</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR></SPAN><SPAN style="COLOR: #008080">6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">BODY&nbsp;</SPAN><SPAN style="COLOR: #ff0000">onload</SPAN><SPAN style="COLOR: #0000ff">="test('Hello')"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">BODY</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">HTML</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们可以看到在</SPAN> Test.js <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的方法</SPAN> test(str) <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有个不易被发觉得错误</SPAN>”alert(Src)”</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>&nbsp;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个</SPAN> Src <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我们并没有声明过，像这种误打在平时的写代码过程中经常有这种问题。好，我们来看看</SPAN> Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是如何来捕捉这个</SPAN> Bug <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>&nbsp;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可以在</SPAN> Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中打开这个</SPAN> Test.js <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，也可以不用打开，因为在你打开了</SPAN> Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后，用</SPAN> Firefox <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行任何带有</SPAN> JavaScript <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的网页，如果发生错误或者异常，</SPAN>Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都会自动打开</SPAN><SPAN lang=ZH-CN> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个</SPAN><SPAN lang=ZH-CN> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出错的脚本文件。当然前提是你已经对</SPAN> Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行过设置了</SPAN>(Debug -&gt; Error Triger -&gt; Stop For Errors <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN> Debug -&gt; Throw Triger -&gt; Sotp For Exceptions)<SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>&nbsp;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第三步，用</SPAN> Friefox <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开这个</SPAN> Test.html <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。你就会看到</SPAN> Venkman <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">报告类似于如下的错误：</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>Stopped for error handler.<BR>#0: function test(str=string:"Hello") in <FILE: E: Dorian MyDocument Test.js>line 2<BR>001: function test(str) {<BR>002: <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>alert(Str);<BR>Continuing from error handler.<BR>Exception ``ReferenceError: <B><SPAN style="COLOR: red">Str is not defined</SPAN></B>'' thrown from function test(str=string:"Hello") in <FILE: E: Dorian MyDocument Test.js>line 2.<BR>[e] message = [string] "Str is not defined"<BR>Stopped for thrown exception.<BR>#0: function test(str=string:"Hello") in <FILE: E: Dorian MyDocument Test.js>line 2<BR>001: function test(str) {<BR>002: <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>alert(Str);<BR>Continuing from thrown exception.<BR>Error ``ReferenceError: Str is not defined'' [xs] in file ``</FONT><A href="/dorian/admin/Test.js" target=_content><FONT color=#000000>file:///E:/Dorian/MyDocument/Test.js</FONT></A><FONT color=#000000>'', line 2, character 0.</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>&nbsp;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中可以很清除的看到</SPAN> Str <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是未声明过的。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>&nbsp;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000>&nbsp;<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000><SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">呵呵，这个</SPAN> JavaScript <SPAN lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调试器的确很强大，在这里只不过做一个简单的介绍罢了。</SPAN><B><o:p></o:p></B></FONT></P></SPAN></SPAN></SPAN></SPAN><img src ="http://www.blogjava.net/dorian/aggbug/18801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-11-08 16:40 <a href="http://www.blogjava.net/dorian/archive/2005/11/08/18801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Web Flows - 实践指南 (1)</title><link>http://www.blogjava.net/dorian/archive/2005/11/02/17770.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Wed, 02 Nov 2005 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/11/02/17770.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/17770.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/11/02/17770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/17770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/17770.html</trackback:ping><description><![CDATA[<H1 align=center>Spring Web Flows</H1>
<CENTER>
<P><B>实践指南</B></P>
<P align=left><STRONG>原文：<A href="http://users.telenet.be/ervacon/ervacon/products/springwebflow/article/article.html">Spring Web Flows - A Practical Guide</A></STRONG></P>
<P align=left><STRONG>Author: <I>Erwin Vervaet (<A href="mailto:erwin@ervacon.com">Mail To</A>)</I> </STRONG></P>
<P align=left><STRONG>translator: <EM>Dorian Shi (<A href="mailto:sxhv998@yahoo.com.cn">Mail To</A>)</EM> <BR></STRONG></P>
<P><STRONG><A href="http://opensource2.atlassian.com/confluence/spring/display/WEBFLOW/Home"><IMG src="http://opensource2.atlassian.com/confluence/spring/download/attachments/1090/spring-webflow.jpg" border=0></A></STRONG></P></CENTER>
<P>这篇文章介绍了 Spring Web Flows。用实例来说明基于 Web Flow 的原理。文章也提供了一个使用 Web Flow 和 Spring 框架来构建 Web 应用的实践指南. </P>
<P>假定读者已经了解一些 J2EE Web 应用、XML、Spirng 框架，当然还有 Spring 的 Web MVC 框架。你可以查看<A HREF="/dorian/admin/EditPosts.aspx#ResAndRef">资源</A>来了解这些信息。</P>
<H3 class=style1><FONT color=#ffa500>介 绍</FONT></H3>
<P>在一个 Web 应用程序中传统的定义一个页面流程是一个一点也不直观的过程。像 Struts 和 Spring 这样的框架促使你把页面流程放进单独的控制器和视图中。举个例子：Struts 会把请求映射到一个 Action。这个 Action 会选择一个视图并转发到这个视图。虽然这是一个简单并且实用的方法，但它有一个主要的缺点：到 Action 的定义文件 struts-config.xml 中看看，Web 应用程序的所有页面流程一点也不清晰。因为 Action 不能简单的被重用，灵活性同样也会遭到损害。</P>
<P>Spring Web MVC 框架提供了一个细微的高级功能：表单控制器执行一个预先定义好的工作流。有两种控制器提供了这一特性：SimpleFormController 和 AbstractWizardFormController。然而,这些仍旧是一种一般化的硬编码的工作流概念。</P>
<P>到这里就要引入 Spring 的 <EM><A href="http://opensource2.atlassian.com/confluence/spring/display/WEBFLOW/Home">Web Flow</A></EM> 了。它允许你用清晰简单的方式展现 Web 应用的页面流程。就像我们要看到的一样，他有许多有点：</P>
<UL>
<LI>一个 Web 应用的页面流程通过 Web Flow 定义文件(一个 XML 文件)清楚的展现出来。 
<LI>Web Flow 可以被设计成自包含的(slef contained)。这意味着允许你在很多情形中把你应用程序的一部分看成一个组件并且使之重用。 
<LI>Web Flow 可以在一个 Web 应用中总是使用一样的手法来定义任何合理的页面流程。你无需在非常特殊的情况下被迫使用专门的控制器。 </LI></UL>
<P>现在 Web Flow 有足够的能力表示由一系列<EM><STRONG> State </STRONG></EM>组成的一个 Web 流程。<EM><STRONG>State</STRONG></EM> 是事件发生的流程点：举例来说就是显示一个视图或者执行一个 Action。每个 <EM><STRONG>State</STRONG></EM> 有一个或多个 <STRONG><I>transitions</I></STRONG> ，他们习惯于从一个 <EM><STRONG>State</STRONG></EM> 转到另一个 <EM><STRONG>State</STRONG></EM> 。一个 <EM><STRONG>transitions</STRONG></EM> 被一个 <EM><STRONG>Event</STRONG></EM> 所触发。 为了让你对 Web 流程有一个大概的印象，下面这段 XML 定义了一个 Web 流程，大致等效于实现一个 SimpleFormController 的工作流 。对于这个 Web 流程的原理将在本文的稍后详细说明。</P>
<P>&nbsp;</P>
<P>熟悉<STRONG><EM>业务过程管理(BPM)</EM></STRONG> 的读者将认识到 Web 流程是普通工作流的一个特例，所以他们在理论上可以使用像 JBMP(请查看<A HREF="/dorian/admin/EditPosts.aspx#ResAndRef">资源</A>) 来实现一般化的 BMP 系统。既然简单是 Spring Web Flow 的重要设计目的，所以它不会去使用这种一般化的工作流引擎。在我们 Web 应用中，我们会用一个简单的 Web 流程来描述一个页面的流程。</P>
<P>本文的剩余部分会用一个实例来说明这方面内容，可以使用这个连接来下载源代码：<A HREF="/Files/dorian/PhoneBook.war.zip">PhoneBook.war.zip</A> 。现在下载并解压缩这个文件可能是个好注意，它能够在你阅读文章的时候帮助你学习。</P>
<P>&nbsp;</P>
<H3 class=style1><STRONG><FONT color=#ffa500>实 例</FONT></STRONG></H3>
<P>实例是一个使用 Spring Web Flow 的电话簿应用程序，我们将使用图解的方式来说明他的功能意图。这是一个典型的公司内网的应用程序，你会发现大部分功能可能你已经熟悉他的概念了。他主要允许你使用一些标准来查找公司的某位职员。一旦当你发现了某个适当地人，你就可以更进一步的查看他的信息，像电话号码、办公桌位置、他的经理是谁、他的同事有那些等等。图1的草图描绘了这个电话簿应用程序的基本需求和页面流程。</P>
<P align=center><A HREF="/images/blogjava_net/dorian/4207/o_phoneBookAppSketch.jpg" target=_blank><IMG style="WIDTH: 238px; HEIGHT: 65px" height=47 alt=t_phoneBookAppSketch.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_phoneBookAppSketch.jpg" width=120 border=0></A></P>
<P align=center><STRONG>图 1. 实例概览</STRONG></P>
<P>就像草图描述的那样，应用程序实际有两个模块组成: Search 模块允许我们查找一个我们要的人，而 Detail 模块则显示查找到这个人的详细信息。Search 模块将会使用 Detail 模块来显示查询结果中某人的详细信息。草图同样显示了我们可以在明细页直接访问被查人同事的明细。这意味着 Detail 模块可以递归使用 Detail 模块来显示同事的明细。</P>
<P>文章稍后，将看到我们可以在一个单独的 Web 流程中定义各个模块。这意味着我们会有两个流程：一个 Search 流程和一个 Detail 流程。</P>
<P>因为本文的焦点是实现应用程序的 Web 接口，所以我们将会提供包含了硬编码哑数据的基本业务层。领域对象被包含在com.ervacon.springframework.samples.phonebook.domain 包中。我们有 4 个业务类： </P>
<UL>
<LI>Person &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;— 一个简单的 JavaBean 包含人员的信息 (名, 姓, 电话号码 ...)。Person 对象使用 User Id 来唯一识别,是 UserId 类的一个实例。一个 Person 类同样也维护他同事们的引用,同样都是 Person 类的实例。 
<LI>UserId &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;— 这是一个主要对象用来识别一个 Person。 
<LI>PhoneBookQuery&nbsp;— 一个查询对象，在电话簿中描述一个查询。我们可以是使用姓，名或者姓名来查询。 
<LI>PhoneBook&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;— 我们的主要业务门面(Business Facade)。这个类仅仅定义了一些哑数据和两个业务方法：<BR>
<UL>
<LI>&nbsp;&nbsp;&nbsp;<TT>public List query(PhoneBookQuery query)</TT> 
<LI>&nbsp;&nbsp;&nbsp;<TT>public Person getPerson(UserId userId)</TT> </LI></UL></LI></UL>
<P>确定好业务功能性后，我们准备使用 Spring Web Flow 来为电话簿应用程序开发 Web 接口。</P>
<H3 class=style1><FONT color=#ffa500>设置 Spring MVC</FONT> </H3>
<P>在我们开始使用 Web Flow 之前，我们需要配置一个基本的 Spring Web 应用程序。要做的第一件事是我们必须确定在 /WEB-INF/lib 目录下有我们所要的 jar 文件。一个 Spring Web Flow 的应用程序需要4个jar在类路进下: 包含 Spring 框架自身的 Spring.jar;包含 Web Flow 控制器实现的 webflow.jar; 记录日志所需的 commons-logging.jar 和用来读取和分析 Web Flow XML 文件的 jdom.jar;</P>
<P>由于这将是一个标准的 J2EE Web 应用程序,所以需要在 /WEB-INF 目录下有一个 web.xml 部署文件。下面是此部署描述文件的代码，它描述了如下事物：</P>
<UL>
<LI><I>contextLoader</I> servlet,当 Servlet 引擎(如 Tomcat )在加载我们的 Web 应用程序的时候进行初始化。 
<LI>一个名为 <I>phoneBook</I> 的 Spring Dispatcher Servlet。这个 Servlet 配置了处理所有相匹配的请求 (如 /phoneBook/*)。 
<LI>index.jsp 将会成为应用程序的欢迎页面。 
<LI>实例的 JSP 页面使用到了 Spring 的 标签库,所以我们需要声明它。实际的 TLD 文件存储在 <TT>/WEB-INF/tld</TT> 目录下。 </LI></UL>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff"><?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"><!</SPAN><SPAN style="COLOR: #ff00ff">DOCTYPE&nbsp;web-app&nbsp;PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #ff00ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;"http://java.sun.com/dtd/web-app_2_3.dtd"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">web-app&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="WebApp"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">contextLoader</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">org.springframework.web.context.ContextLoaderServlet</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">load-on-startup</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">load-on-startup</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">phoneBook</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">org.springframework.web.servlet.DispatcherServlet</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">load-on-startup</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">load-on-startup</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">14</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">15</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-mapping</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">16</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">phoneBook</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">17</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">url-pattern</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/phoneBook/*</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">url-pattern</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">18</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">servlet-mapping</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">19</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">welcome-file-list</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">20</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">welcome-file</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">index.jsp</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">welcome-file</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">21</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">welcome-file-list</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">22</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">taglib</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">23</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">taglib-uri</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/WEB-INF/tld/spring.tld</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">taglib-uri</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">24</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">taglib-location</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/WEB-INF/tld/spring.tld</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">taglib-location</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">25</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">taglib</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">26</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">web-app</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV>
<P><FONT color=#000000>在 Spring MVC 应用程序中，我们需要一个 Spring 应用程序上下文。它是你在应用程序上下文中定义业务对象最好的地方。这样你就能够干净的区分你的业务对象和任何 Web 应用工件(artifacts)。让我们跟随这个练习创建一个 /WEB-INF/applicationContext.xml 文件来定义我们的业务门面：phoneBook Bean。</FONT></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff"><?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"><!</SPAN><SPAN style="COLOR: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING//DTD&nbsp;BEAN//EN"<BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #ff00ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">beans</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">bean&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="phoneBook"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;class</SPAN><SPAN style="COLOR: #0000ff">="com.ervacon.springframework.samples.phonebook.domain.PhoneBook"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">bean</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">beans</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV>
<P><FONT color=#000000>我们需要在 web.xml 中适当的定义 Dispatcher Servlet。 这个 Servlet 将会以默认得方式读取 /WEB-INF/ServletName-servlet.xml 配置文件。在我们的例子中将会是 /WEB-INF/phoneBook.xml。我们唯一需要配置的事是一个 View Resolver。这个 View Resolver 负责将视图名(如："criteria")解析成真实的视图路进(如：/WEB-INF/JSP/criteria.jsp)。下面这段使用的是 InternalResourceViewResolver。 所以在我们的实例中，所有页面的位置将会在 /WEB-INF/jsp 目录中。</FONT></P>
<P><FONT color=#000000>我们假设所有其他的 Dispatcher Servlet 配置为默认值。这意味着我们将使用一个简单的 BeanNameUrlHandlerMapping 来定位将要处理请求的控制器。对于如何配置 Dispatcher Servlet 的详细信息请参考 Spring 的参考文档(查看</FONT><A HREF="/dorian/admin/EditPosts.aspx#ResAndRef"><FONT color=#000000>资源</FONT></A><FONT color=#000000>)。</FONT></P>
<P></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff"><?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"><!</SPAN><SPAN style="COLOR: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING//DTD&nbsp;BEAN//EN"<BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #ff00ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">beans</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">bean&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="viewResolver"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;class</SPAN><SPAN style="COLOR: #0000ff">="org.springframework.web.servlet.view.InternalResourceViewResolver"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">property&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="prefix"</SPAN><SPAN style="COLOR: #0000ff">&gt;&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/WEB-INF/jsp/</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</< SPAN><SPAN style="COLOR: #800000">property</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">property&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="suffix"</SPAN><SPAN style="COLOR: #0000ff">&gt;&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">.jsp</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</< SPAN><SPAN style="COLOR: #800000">property</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">bean</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff"></< SPAN><SPAN style="COLOR: #800000">beans</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV>
<P><BR><FONT color=#000000>待续……</FONT><BR>&nbsp;</P>
<H3><A name=ResAndRef></A><SPAN class=style1><FONT color=#cc9900>参考资源:</FONT></SPAN></H3>
<UL>
<LI><FONT color=#000000>下载本指南地实例应用和源代码: </FONT><A HREF="/Files/dorian/PhoneBook.war.zip"><FONT color=#000000>PhoneBook.war.zip</FONT></A><BR><FONT color=#000000>此应用需要的 Jar 文件到下列地址可以找到: </FONT>
<UL>
<LI><FONT color=#000000>spring.jar: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT><A href="http://www.springframework.org/" target=_top><FONT color=#000000>Spring framework 首页</FONT></A><FONT color=#000000> </FONT>
<LI><FONT color=#000000>commons-logging.jar: </FONT><A href="http://jakarta.apache.org/commons/logging/" target=_top><FONT color=#000000>Jakarta commons logging 首页</FONT></A><FONT color=#000000> </FONT>
<LI><FONT color=#000000>jdom.jar:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><A href="http://www.jdom.org/" target=_top><FONT color=#000000>JDOM 首页</FONT></A><FONT color=#000000> </FONT>
<LI><FONT color=#000000>webflow.jar:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><A href="http://www.ervacon.com/products/springwebflow" target=_top><FONT color=#000000>Spring web flow 首页</FONT></A><FONT color=#000000> </FONT></LI></UL>
<LI><FONT color=#000000>Java Servlet 技术和 JSP: </FONT><A href="http://java.sun.com/products/servlet/index.jsp" target=_top><FONT color=#000000>http://java.sun.com/products/servlet/index.jsp</FONT></A><FONT color=#000000> </FONT>
<LI><FONT color=#000000>Spring Web MVC 应用程序一步步开发可以读此教程: </FONT><A href="http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step.html" target=_top><FONT color=#000000>http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step.html </FONT></A>
<LI><FONT color=#000000>要了解更多关于 Spring 的信息可以到 Spring Framework 的主页: </FONT><A href="http://www.springframework.org/" target=_top><FONT color=#000000>http://www.springframework.org</FONT></A><FONT color=#000000> </FONT>
<LI><FONT color=#000000>Spring 参考文档: </FONT><A href="http://www.springframework.org/docs/reference/index.html" target=_top><FONT color=#000000>http://www.springframework.org/docs/reference/index.html</FONT></A><FONT color=#000000> </FONT>
<LI><FONT color=#000000>如果你想找一个通用的 Java 业务处理管理系统, 查看 JBPM: </FONT><A href="http://www.jbpm.org/" target=_top><FONT color=#000000>http://www.jbpm.org</FONT></A><FONT color=#000000> </FONT></LI></UL><SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN><img src ="http://www.blogjava.net/dorian/aggbug/17770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-11-02 10:38 <a href="http://www.blogjava.net/dorian/archive/2005/11/02/17770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>糟糕的客户体验</title><link>http://www.blogjava.net/dorian/archive/2005/11/01/17640.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Tue, 01 Nov 2005 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/11/01/17640.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/17640.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/11/01/17640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/17640.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/17640.html</trackback:ping><description><![CDATA[<P>昨天因为需要到银行去办理保险授权转账业务，所以到了一家工商银行。</P>
<P>一进银行，就看到办理业务的人很多，随即找了一条比较人少的队伍排着。</P>
<P>虽然我这队在我之前才6个人，没想到还是排了将近50分钟。</P>
<P>在排队的过程中，始终有人埋怨银行工作人员业务不熟悉，等等之类的话。</P>
<P>可我始终想，排归排，等归等，毕竟我们中国人多，很多客户对银行的业务也不知道，</P>
<P>还有甚者尽然连密码设没设都不知道，这些都是造成业务处理慢的原因。</P>
<P>……</P>
<P>总算轮到我了，告知银行工作人员说我要办理转账授权后，她向我指指左前方到个人理财中心去办理。</P>
<P>我的天，我顿时傻掉了，我排了近50分钟，难道就为了这一句指路话?</P>
<P>无奈，随又到个人理财中心等了近30分钟办理了转账授权业务。其间听到前面的人也都是这么过来的……</P>
<P><BR>办理完业务随后打量了一番银行，看见装修豪华的业务大厅除了若干监视器外竟然没有一个导向牌。</P>
<P>还有，工作人员的灰色面孔(好像欠他100万似的)。</P>
<P>这些都是导致客户体验非常糟糕的直接原因。</P>
<P>我之前都是通过自动取款，存款，转帐机来办理自己的需求的。</P>
<P>即使有些业务(如：购买基金)，都是在其他银行办理的。</P>
<P>至少其他银行在客户进门后，让客户自动提取一张自己业务需求的号码纸，</P>
<P>随即播报号码到那个柜台去办理业务。</P>
<P>类似这种方式就能解决这方面的客户体验问题。</P>
<P>当然还有其他的一些问题亟待解决。</P>
<P>我不希望在若干年的将来外资银行把中国银行打的一败涂地……</P>
<P><BR>&nbsp;</P><img src ="http://www.blogjava.net/dorian/aggbug/17640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-11-01 09:27 <a href="http://www.blogjava.net/dorian/archive/2005/11/01/17640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMMA－OpenSource 的 Java code coverage 工具</title><link>http://www.blogjava.net/dorian/archive/2005/10/27/17066.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Thu, 27 Oct 2005 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/10/27/17066.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/17066.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/10/27/17066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/17066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/17066.html</trackback:ping><description><![CDATA[很久以前听到过code coverage这个词。但总是在我脑海中一闪而过，Ignore掉的。<BR>最近看到有一个opensource 的 EMMA，所以就Down下来玩玩。<BR>看了它的Quick Start发现可以配合JUnit之类的测试工具执行GUI程序。<BR>把它自带的程序试了一下，它会产生记录显示刚才的操作执行了多少多少部分的代码。<BR>觉得蛮好玩的，就自己试了一下： 
<P>环境： EMMA v2.0，build4127<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS Windows 2003 server<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDK v1.4.2<BR></P>
<DIV><SPAN style="COLOR: #008080"><BR></SPAN></DIV>
<P>EMMA提供两种使用模式，一个是指令模式（command mode）另外一个是使用Ant。</P>
<P>将下载下来的JAR（emma.jar&amp;emma_ant.jar）复制到你classpath所在的JRE目录<BR>&nbsp;ex.E:\Program\J2SDK\jre\lib\ext<BR>然后在命令行下输入Java emmarun，会看到它的使用方法和如何配参数。如果没看到，那<BR>说明没有把刚才两个Jar包放在classpath中。</P>
<P>随后写一个Hello world程序<BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG id=Codehighlighter1_24_222_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_222_Open_Text.style.display='none'; Codehighlighter1_24_222_Closed_Image.style.display='inline'; Codehighlighter1_24_222_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_24_222_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_222_Closed_Text.style.display='none'; Codehighlighter1_24_222_Open_Image.style.display='inline'; Codehighlighter1_24_222_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;HelloWorld&nbsp;</SPAN><SPAN id=Codehighlighter1_24_222_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_24_222_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_50_99_Open_Image onclick="this.style.display='none'; Codehighlighter1_50_99_Open_Text.style.display='none'; Codehighlighter1_50_99_Closed_Image.style.display='inline'; Codehighlighter1_50_99_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_50_99_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_50_99_Closed_Text.style.display='none'; Codehighlighter1_50_99_Open_Image.style.display='inline'; Codehighlighter1_50_99_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;HelloWorld()&nbsp;</SPAN><SPAN id=Codehighlighter1_50_99_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_50_99_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Constructor</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #008080">4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">5</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_144_220_Open_Image onclick="this.style.display='none'; Codehighlighter1_144_220_Open_Text.style.display='none'; Codehighlighter1_144_220_Closed_Image.style.display='inline'; Codehighlighter1_144_220_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_144_220_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_144_220_Closed_Text.style.display='none'; Codehighlighter1_144_220_Open_Image.style.display='inline'; Codehighlighter1_144_220_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</SPAN><SPAN id=Codehighlighter1_144_220_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_144_220_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HelloWorld();<BR></SPAN><SPAN style="COLOR: #008080">7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Hello&nbsp;World!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #008080">8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P>编译HelloWorld.java<BR>&nbsp;javac -d classes -g HelloWorld.java<BR>运行HelloWorld<BR>&nbsp;java -cp classes HelloWorld<BR>现在加入EMMA<BR>&nbsp;java emmarun -cp classes HelloWorld<BR>可看到类似如下输出：<BR>Constructor<BR>Hello World!<BR>EMMA: writing [txt] report to [F:\我的文档\EMMA\coverage.txt] ...<BR>你可以看一下执行后在你目录中的coverage。txt文件<BR>内容类似如下：<BR>[EMMA v2.0.4217 report, generated Thu Oct 28 09:09:45 CST 2004]<BR>-------------------------------------------------------------------------------<BR>OVERALL COVERAGE SUMMARY:</P>
<P>[class, %]&nbsp;[method, %]&nbsp;[block, %]&nbsp;[line, %]&nbsp;[name]<BR>100% (1/1)&nbsp;100% (2/2)&nbsp;100% (14/14)&nbsp;100% (6/6)&nbsp;all classes</P>
<P>OVERALL STATS SUMMARY:</P>
<P>total packages:&nbsp;1<BR>total classes:&nbsp;1<BR>total methods:&nbsp;2<BR>total executable files:&nbsp;1<BR>total executable lines:&nbsp;6</P>
<P>COVERAGE BREAKDOWN BY PACKAGE:</P>
<P>[class, %]&nbsp;[method, %]&nbsp;[block, %]&nbsp;[line, %]&nbsp;[name]<BR>100% (1/1)&nbsp;100% (2/2)&nbsp;100% (14/14)&nbsp;100% (6/6)&nbsp;default package<BR>-------------------------------------------------------------------------------</P>
<P>这些数据蛮难看懂的，不过EMMA提供三种输出格式 txt,html,xml</P>
<P>接下来看看可以加入原代码的一份html报表。</P>
<P>这样来执行：<BR>&nbsp;java emmarun -r html -sp . -cp classes HelloWorld<BR>&nbsp;//-sp 代表源文件的所在地，我的源文件在当前目录，故用 "."<BR>执行后你就可以看到EMMA生成了一个叫coverage的目录。在里面的许多html就是带源文件的一份报表。如下所示：</P>
<P><A href="/images/blogjava_net/dorian/4207/o_o_1.jpg" target=_blank><IMG height=87 alt=t_o_1.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_o_1.jpg" width=120 border=0></A></P>
<P><A href="/images/blogjava_net/dorian/4207/o_o_2.jpg" target=_blank><IMG height=91 alt=t_o_2.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_o_2.jpg" width=120 border=0></A></P>
<P><BR>这份东西还是蛮详细的，可以看到那些东西或者说那些状况没有考虑到的。<BR>至于ant的实现以后要用时在说吧！毕竟这东西好玩归好玩，暂时还用不上。^_^</P><img src ="http://www.blogjava.net/dorian/aggbug/17066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-10-27 16:32 <a href="http://www.blogjava.net/dorian/archive/2005/10/27/17066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个JavaScript的代码高亮引擎</title><link>http://www.blogjava.net/dorian/archive/2005/10/27/17051.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Thu, 27 Oct 2005 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/10/27/17051.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/17051.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/10/27/17051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/17051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/17051.html</trackback:ping><description><![CDATA[<P>刚才在闲逛的时候发现了一个用 JavaScirpt 实现的代码高亮引擎。</P>
<P>用了一下，发现满好用的。</P>
<P>这是他解析后的代码<BR><A href="/images/blogjava_net/dorian/4207/o_HighLight_Demo.jpg" target=_blank><IMG height=94 alt=t_HighLight_Demo.jpg src="http://www.blogjava.net/images/blogjava_net/dorian/4207/t_HighLight_Demo.jpg" width=120 border=0></A></P>
<P>Download:&nbsp; <A href="http://www.dreamprojections.com/SyntaxHighlighter/">http://www.dreamprojections.com/SyntaxHighlighter/</A><BR>Examples:&nbsp; <A href="http://www.dreamprojections.com/SyntaxHighlighter/Examples.aspx">http://www.dreamprojections.com/SyntaxHighlighter/Examples.aspx</A></P>
<P><BR>遗憾的是这个引擎没有 Java 的高亮。</P>
<P>所以自己添加了一个解析 Java 的类。</P>
<P>随后在使用的过程中又发现，代码段只能打开，而不能收起。</P>
<P>故又修改了他的核心代码。</P>
<P>现把这两个 JS 文件放上来^_^</P>
<P>shCore.js&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; <A href="/Files/dorian/shCore.zip">http://www.blogjava.net/Files/dorian/shCore.zip</A><BR>shBrushJava.js :&nbsp; <A href="/Files/dorian/shBrushJava.zip">http://www.blogjava.net/Files/dorian/shBrushJava.zip</A></P><img src ="http://www.blogjava.net/dorian/aggbug/17051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-10-27 15:03 <a href="http://www.blogjava.net/dorian/archive/2005/10/27/17051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>