﻿<?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-爱女孩的小火柴-文章分类-java Web</title><link>http://www.blogjava.net/mayu/category/16233.html</link><description>生活的理想就是为了理想的生活:)</description><language>zh-cn</language><lastBuildDate>Tue, 19 Jun 2007 11:04:47 GMT</lastBuildDate><pubDate>Tue, 19 Jun 2007 11:04:47 GMT</pubDate><ttl>60</ttl><item><title>Tapestry4 Friendly URLs（转载）</title><link>http://www.blogjava.net/mayu/articles/102086.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Tue, 06 Mar 2007 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/102086.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/102086.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/102086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/102086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/102086.html</trackback:ping><description><![CDATA[现在的版本需要通过hivemind来配置，所以需要设置hivemind.xml中的一些属<br>性，具体配置如下：<br>&lt;?xml version="1.0"?&gt;&nbsp; <br>&lt;module id="tapestry4" version="1.1.0"&gt;<br>&nbsp;&lt;contribution configuration-id="tapestry.url.ServiceEncoders"&gt;<br>&nbsp;&nbsp;&lt;page-service-encoder id="page" extension="html" service="page"/&gt;<br>&nbsp;&nbsp;&lt;direct-service-encoder id="direct" stateless-extension="direct" <br>&nbsp;&nbsp;&nbsp;stateful-extension="sdirect"/&gt;<br>&nbsp;&nbsp;&lt;asset-encoder id="asset" path="/assets/"/&gt;<br>&nbsp;&nbsp;&lt;extension-encoder id="extension" extension="svc" after="*"/&gt;<br>&nbsp;&lt;/contribution&gt;<br>&lt;/module&gt;<br><br>同时web.xml中加入映射：<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;tapestry4&lt;/servlet-name&gt;<br>&lt;servlet-class&gt; org.apache.tapestry.ApplicationServlet&lt;/servlet-class&gt;<br>&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br>&lt;/servlet&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;tapestry4&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;*.html&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;tapestry4&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;*.direct&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br><br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;tapestry4&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;*.sdirect&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;tapestry4&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/assets/*&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;tapestry4&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;*.svc&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>如果希望首页的调用不是通过/app来映射，可以在web.xml中更改redirect：<br>&lt;filter-name&gt;redirect&lt;/filter-name&gt;<br>&lt;filter-class&gt;org.apache.tapestry.RedirectFilter&lt;/filter-class&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;redirect-path&lt;/param-name&gt;<br>&lt;param-value&gt;/Home.html&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;/filter&gt;<br>这样键入http://localhost:8080/tapestry4，系统导航到http://localhost:<br>8080/tapestry4/Home.html,<br>添加一个Page页面例如Test.page，在Home.html中加入&lt;a href="#"<br>jwcid="@PageLink" page="Test"&gt;test&lt;/a&gt;，<br>在生成的Home.html中生成的test的链接地址为：http://localhost:<br>8080/tapestry4/Test.html<br>
<img src ="http://www.blogjava.net/mayu/aggbug/102086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2007-03-06 10:54 <a href="http://www.blogjava.net/mayu/articles/102086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WEB2.0 与社区（转）</title><link>http://www.blogjava.net/mayu/articles/77577.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Fri, 27 Oct 2006 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/77577.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/77577.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/77577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/77577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/77577.html</trackback:ping><description><![CDATA[<p>首先感谢主办方华人英才网的邀请。我现在的Title是待业老年，也没有名片。很多人给我换名片，我也很尴尬。今天主持人没有选好，老是挑逗群众斗群众，其实不用挑逗我的敌人就很多了，也不在乎多一两个。<br>这个题目看起来好象很好讲，现在听大家前面讲的，又觉得不好讲。前面那么多老王都在卖瓜，我现在也没有什么瓜可以卖，只能干点砸瓜摊的事，一把锤子叫Web2.0，一把锤子叫社区。关于什么是Web2.0现在大家都有自己的看法，我有我自己的版本，网上都有，爱同意不同意，我只按照我的版本理解。说简单点，Web2.0是互联网上03年以后出现了很多大家不熟悉的模式，不一样的事物，经过若干教授、专家归纳总结，最后说原来的东西我们熟，这个东西我们没法归纳，就起个名叫Web2.0，1.0的儿子。我现在归纳最简单的说法是1.0关心的是事，2.0关心的是人；1.0开的是店，2.0建的是家，这是本质的区别。往下推延后面的东西都是随着走的。社区早已有之，有的公司不叫ChinaBBS吗？BBS就是我们原来熟悉的社区，乃至于现在说社区还以为是BBS，BBS是1.0的社区，1.0的社区就是按照某类主题大家聚在一起，谁聚谁散不固定，高兴来就来，不高兴就走。2.0不是这样的，2.0是先建家，再展开。<br>下面按照我的PPT来讲。<br>假定2.0是个概念，社区是个概念，其中一小部分也是重合的，就是Web2.0社区。正像刚才说的社区的发展不一定基于Web2.0平台，有很多不是Web2.0的社区，包括现在被投资的。有人自己说是2.0，我刚才听ChinaBBS邓总好像是说无所谓，但是她抓的是社区，最近改成大旗了，我不知道什么意思，是打奇虎的意思还是原来的BBS不够2.0？反正是改了。Web2.0更重要的更容易混淆的是Web2.0有很多&#8220;武器&#8221;，有很多新的技术，但是很多东西都不一定形成社区或者依托社区发展。我要说的，或者我个人坚持的个人喜欢的是&#8220;成功的Web2.0网站必然是以社区的形式发展&#8221;。这句话跟我刚才说的什么是Web2.0是联系的。现在世界上有没有成功的Web2.0社区？我说的成功是风险投资家承认的那种成功上了纳斯达克，股价只涨不跌，大家有几十倍的回报那才叫成功。至于说活着，排名多少？这跟成功都没有必然关系。<br>我认为的Web2.0社区也就是说有可能在道理上、理论上、基础上有可能成功的有三个基本元素，三个基本层次、三个基本舞台。&#8220;个人、群体、社区&#8221;。有人叫群体为圈子也未尝不可，群体比圈子范围要广一些。他们三者关系是真实全面的个人，形成丰富多彩的群体，丰富多彩的群体产生充满活力的社区。很多人现在也有找我聊天的，我也看了他们的网站，第一关在我写的第一个字就没过关，&#8220;真实&#8221;，现在有多少网站你的注册用户在注册单上填的是真名实姓？哪怕是真实的性别和年龄？更不用说住址、爱好、性取向等等。你们笑什么？看看My space ，性别栏里是男、女、不男不女。没有真实的人后面就不用谈了，我们都是做网站的，我们都有一个&#8220;怕&#8221;。你让人家填真实的，人家就不注册了，不注册怎么跟VC说注册用户多少多少？所以就降标准，就要一个E－mail就可以了，真的假也不证明，反正注册完了往那一堆。我看到最深的感触就是有的公司自己说有4亿用户的，中国一共1亿网民你就敢号称自己有4亿用户？没有真实的个人，你的基本群众力量和你是若即若离，或者是假面目示人，这样没有成功的希望。<br>还有另外一个关键词是全面。说来可怜，我昨天才认真注册MY SPACE，真的要写完注册程序需要半个小时以上。我们大部分网站都说我的注册简单，只需10秒钟，这就是差别。只有真实全面的人，才可以在真实基础上面建立丰富多彩的群体、圈子、俱乐部等等，还有一个是里面可以搞很多活动，这些活动对运营商来说将来是不是可以赚钱那还是后话，首先是有没有本事建立多主题的、人群这一级、朋友这一级的层面，然后能不能合并同类项，100个汽车圈子形成一个汽车社区，1000个音乐圈子形成一个音乐社区。这么多多主题的，全面的社区合起来形成一个松散的网络世界，这个网络世界越大越好。这就是Web2.0的本意，Web2.0有一个理论叫做&#8220;长尾&#8221;理论。 &#8220;长尾&#8221;就是多中心，异常的活跃。<br>Web2.0社区的3大支柱——信息生活、社会生活、物质生活。<br>信息生活无非就是发布，比如博客、阅读、交流、收集、查询、各种流媒体形式等等。不管怎么说都是信息，满足人们的信息需求。这一块大家很少有反对的，很多人把它就当作Web2.0的核心、主流、关键等等。我觉得至少从经验上总结这块生活Web1.0已经够了，1.0已经满足了信息生活百分之七、八十的需求了，2.0只能做补充。现在真正缺少的是社会生活和物质生活，是信息生活，社会生活和物质生活的互动，这才是2。0的挑战。社会生活必须超出个人以外，是必须跟另外一群人打交道，朋友的查询、交往、朋友圈的发起、组织、管理等等这个层次。我知道这个层次很少被认为有价值，或者说其中的含金量很少被人透彻的理解。我原来是学社会学的，所以我对这块的含金量异乎寻常地重视，它跟我们熟知的dating找朋友不是一个概念，dating只是我们社会生活很重要但不是全部。<br>第三个是物质生活，物质生活至少现在已经显露在网上的，有爱好类、读书、吃饭、旅游、收藏这一类的；还有活动类的，今天这个会从华人英才网的角度就是一种活动类的，不是哪个组织派来的，我们大家都是为一个主题有兴趣来的；还有交易，交易也是广义的含义。<br>下面就是Web2.0的另外一个核心，Web2.0的各个平台全部活动的最后都指向一个字：&#8220;服务&#8221;。服务可以称为客户增值服务、广告服务、交易服务。<br>所以我个人对Web2.0的商业模式从来没有产生过疑问，但是我有一些前提，别管你做什么，要想做到持续成长的目标，不在于目标是什么，在于目标怎么能够达到，需要什么条件。<br>（图）刚才三样东西合起来是Web2.0社区魔方，这个魔方包括个人、群体、社区，个人生活、社会生活、物质生活，最后是真实服务产生收入的三样。说到头无非是大家玩儿这个魔方的出发点、重点不一样，但是逃不出这个范围。<br>中国Web2.0社区成功的必要条件。这是我做10年互联网屡战屡败、屡败屡战的总结，包括排队的顺序都是我想了半天的：<br>首先是现代规范的企业架构和游戏规则。我个人就栽在这个上面，我做了10年换了这么多公司，没有不赢利的，没有不创新的，没有不是我从事的那个行业的第一的，但是现在我连名片都拿不出的。这个是很难的，不是红杉给了你钱就解决了的，是底层的、心理的、文化的那些东西。不然到一定的时候搞死公司的就是这个。最近找我的人很多，我没有一个答应的，就顾虑在这儿。<br>第二个是清晰完整的战略。现在我发现不管VC也好，还是创业者本身，多数都说反正说不清楚，干起来再说。反正有头有脸了，什么战略问题收入问题就自然而然的解决了。我不承认，1.0时代这个理论成立，因为大家都没经验，只好摸着石头过河，无可奈何。中国商业化互联网运作已经10年了，如果还没有经验可寻或者说仍然不会总结经验寻找自己的市场定位、思路，你只能赖自己。这一条多数公司，比如我去过一个流媒体公司，都拿了300万美圆投资了，第二轮要拿1000万，马上要签了，我说你有流媒体经营权吗？有商业模式吗？结果没有。<br>第三是有经验有能力的团队。我2000年参加过中国互联网CEO大会，1000多个CEO，90％是自己人生第一个工作，没有任何组织、管理、领导、经营的经验。现在又来了，当然这一轮VC比上一轮VC可能还大胆，很多团队平均年24岁、25岁，真敢给钱，大家又在共同的犯错误，再过一两年我们又要走一次低潮，VC们又要共同的总结经验。我还是坚持在1.0没有任何建树的人，没有任何成功或者失败的经验，上手就做Web2.0是加倍失败的概率。<br>1000万美元以上的投资也是我本人再出来的底线。因为我跟大家不一样，你们25岁，我50岁了。我认定Web2.0的创业比Web1.0要难很多。有的人拿百、八十万人民币就敢上，上去你就会失眠、没食欲，没性欲，那时候VC说你值10万，你就值10万，VC投这样的公司也是找死。所以我真的劝VC要么不投，要投就投大的。现在犯错误的空间非常有限，如果还有一些大学没毕业就想创业的，我劝大家先毕业，找一个正经的网络公司干三年，再思考是不是该创业的问题。为什么要1000万和下个理由是相关的，我认为Web2.0的平台是什么样子现在还在摸索，可能千奇百怪。一个很好的参照系是网络游戏。我们现在不是做的网络游戏，我们做是&#8220;真人秀&#8221;，对平台的要求极高，技术含量极高。都说Web2.0没技术门槛，指的是现在的这些&#8220;破玩意&#8221;，什么Blog、RSS等等，真的要做起来，我是认真算过的，算到人民币以元为单位仔细算过。基于十年的经验，如果要我做，我跟VC说300人干三年，100人干十年。如果现在您有10个人的团队，成熟就是下个世纪的事了。而且这个事情一旦做坏了，下一步就很难了。改造一个平台比建一个新平台还要难。ChinaBBS最近连名字都改了，我估计他们正处在改造的痛苦中。猫扑最老实，猫扑自己的栏目就叫大杂烩，它有那么多平台，那么多产品，整合将是个成本高昂，过程痛苦的事情。所以Web2.0有没有先胡打乱战就能成功的反例？可能有人认为有，但是要算最大概率的话我主张的玩法是最大的成功概率。大家别管现在哪个公司冲到几十名了，都是假象，三年以后再说。<br>现在谈谈2。0成功的先行指标。这是外在表现，因为内在的大家可以各说各话，现在有一个Alexa，02我们介绍给大家当时以为是帮大家一把，现在看来负面效果比正面效果还大，这是我理想中认为有把握的。<br>（图）前两个是各个网站自己后台注册用户统计可以搞点调研，也许可以大家自己包装。后两个是公开数据，我现在试图做点方法论的分析，今天讲的算是小提纲。<br>UV大于10000在坐的肯定有人笑了，这个目标容易呀。Alexa的人均PV大于15，现在认真看了一下我们达到这个指标的正经网站就一个，还不是我们大家熟悉的媒体类的社区类的，就一个是淘宝。上次我给的一个指标4以下不及格，4-6及格，6-8良好，8-10优秀，过10是很棒。现在新浪、搜狐10－12，我们自认为是2.0的，被人叫成2.0的PV没有过6过7的，还有很多在3、4之间。客户人均在线时间这个要自己统计，我大致算了一下，大致一个人1个PV时间是1分钟，如果都用视频和音频，PV会吃点亏，因为在线时间是一样的。<br>我说的就是抛开一切想做什么不谈，如果想挣到有意义的钱起码要做到的。我说2.0比1.0难，这个指标是我心目中1.0指标的加倍。2.0有两倍的投入才有1.0的效果。<br>举个例子，真的想找一个中国Web2.0的例子给大家推荐，特想找一个表扬，没找到。<br>以一个外国网站为例，MYSPCE。导航条：信息生活分为博客和搜索2部分。社会生活为看人、找人、聊天、圈子和邮件。物质生活分为爱好、活动、分类广告三大部分，另外爱好中由于历史有三个热点提到一级导航条了。如果去掉不超过10个，没有主题，全是功能。<br>看一下MYSPCE它的PV成长有人工的痕迹吗？有推广、市场、买人头技术作弊的痕迹吗？没有。看它的分类，时尚与风格、食品饮料与酒、嗜好与手工艺品、宠物与动物、娱乐音乐、文化与文化社区、粉丝俱乐部、健康、健身、精神状态、浪漫与两性关系、同性恋与双性恋、休闲与体育、聚会与活动、夜生活与俱乐部、家庭与家居、宗教与信仰与历史、计算机与网络、学校与校友会、公司与同事、专业组织、国家与地区、政府与政府。想想我刚才说的真实全面的人，丰富多彩的圈子就是这个意思，你能逃出这个范围的生活不多。这里少的有6000多个圈子，多的100多万，光是圈子，还不是人。<br>从聊天角度看，吃喝、游戏、体育、电影、电视、爱情、旅游与休假、两性生活、汽车、事业发展、网友、电影制作、计算机与技术、文化与文学、宗教与科学、哲学等等，你们想想最热门的三个主题是什么？我敢保证没有一个人猜对。第一个是音乐，第二个是时政，第三个是交友，第四是两性。这是在美国成为年轻人的天堂的网站。大家不妨回去看看自己的。这是根据统计分类的，是由网友的需求分出来的。<br>大家一直在讨论MYSPACE，但很多是盲人摸象。有的人摸到耳朵，有人摸到腿。我是为了这次演讲把MYSPACE重新看了一下，拿了一些我认为有用的东西，其实它还有很多东西可以总结。它的UV3万不算太惊人，真正惊人的是PV是37。它的收入今年预计不到1亿美元，不知道我看的准不准确。有人敢怀疑它将来不会成长为年收入10亿美元的大公司？我是不怀疑，如果它上市我肯定买它的股票。这就是2.0思维的差别，1.0的思维是企业家思维，2.0的CEO思维应该是一个城市市长的思维。你在建立一座城市。你是管着千百万人的吃喝拉撒睡喜怒哀乐。你在网页上扮演任何角色，没有推荐这个城市哪个明星的博客给你看。我们的互联网现在把网页首页做的巨长无比，惟恐老百姓不知道看哪个，这是商人的思维不是市长的思维。我最近买了一个域名是&#8220;社会引擎&#8221;SOCENG，我有一天假如还出来再做的话我就准备做这个。Web2.0做的是社区也罢、社会也罢，做的是社会的推动，不是让你给别人灌输什么，1.0是典型的媒体形态。1.0抓的是共性，2.0尊重的是个性。对你重要不见得对我重要，假如规模化了，谁尊重个性谁就有机会成功。<br>下面是就我看现在被认为是2.0和自己也说自己是2.0的社区普遍的毛病，如果有VC让我当顾问我愿意说他们的共同毛病大概就是这几个。<br>第一个是概念混乱。有人拿着比如RSS、比如BLOG就认为抓住了2.0的真谛，开始放大它。我知道有些公司现在钱快烧完了，有困难，看得见的，倒计时。当然有人会玩儿，找一个更傻的把它卖了。也有人说Web2.0的热潮就6个月，晚了就不行了。这种心态怎么行？我虽然年纪很大了总不能只能再活6个月吧，既然喜欢一个事业只有6个月的寿命做它干嘛？投机心态嘛。概念混乱很多体现在从Web1.0到Web2.0转型的公司上。也体现在很多原来有一些1.0的资源现在做Web2.0的，把它们硬接起来做很多风马牛不相及的事。还有很多认为把一些容易抄的功能列上就算是Web2.0了，我都认为这是概念上的混乱。<br>第二个比较严重，品位低下。我不埋怨，也不批评谁搞点黄色的，但是我的确有点担心，就伺候那种人能挣钱？过去的一年中以Web2.0的趋势带来的网络活力起了重要的作用,使中国的网民达到了一个高峰，特别是Blog。但是在我们的从业者一定要小心，这些人来的快惹的事也多，购买力也低。你伺候这些人不能完全不能挣大风险的钱，就跟做游戏虚拟的财产再增值的一样，钻法律的空子灰色地带挣点钱能持久吗？急功近利，尤其是炒做Alexa，这对投资人、职业经理人都不是好事。当然最普遍就是平台单薄，功能大家都有，什么BLOG、RSS、圈子等，没有什么有技术门槛的。<br>中国Web2.0的典型症状：<br>2.0的瓶装1.0的酒。单一的Web2.0，一个Blog、一个聚合、一个 search、一个交友单一功能没希望。 真实全面的人靠单一的功能是体现不出来的。我觉得在Web2.0阶段就没有垂直的概念，可以有个中心，有个亮点，但一定是全面的。我在和讯拼命的把财经做成大财经，把大财经做成中产阶级，完成个阶段我才敢做2.0，现在还没做完。我希望大家要做就做全面的。<br>垂直或主题社区。<br>功能罗列却没有深度整合。只要网易、QQ一旦想做Web2.0没有一个人能打得过，专门做20岁左右小孩的，人家有规模了。<br>内容庞杂趣味低级。<br>这个不用说了。比较共同的是缺少服务没有核心技术。我不知道一天发好几百条的乱七八糟的信息，什么感情、什么两性，最后想落在什么服务上？你总不能开妓院吧？搞不明白。可以说初级阶段的时候人群少可以赚点流量，赚点广告，可是想想，象样的产品会放在这个上面做广告吗？最多是安全套、伟哥？看不出来。刚刚开始的时候，流量少，但是够规模自然会产生规模化的盈利。没有核心技术这是中国共同的，我们最多做的是一些新技术的初级应用。我们有可能会在中文化的中国社会环境中的一些综合方面出一些核心技术，就像百度做的差不多。但是现在多数看不出来，想都不想。<br>竞争格局：<br>现在个人信息生活这一头占了50、60％，社区级的物质生活这是我个人最看重的，刚刚开始现在占0.5％。如果还在个人级的信息生活上下工夫，也就是博客一类的，现在还想靠这个是没有意义的，其实机会和格局是并列的。最理想的是自然而然的全方位，&nbsp; 未来的机会表现在：<br>社区的完整性。<br>深度平台，如果是有游戏背景的技术团队、SEARCH背景的技术团队或者ERP，CRM背景的团队我觉得有机会。<br>抓住主流人群：如果你的主流人群还是20岁以下那没机会了。<br>以服务为导向：不管怎么样展示自己，得告诉VC一年以后我要推一个什么样的东西。<br>我猜大家来这个会主要想听我说的就是Web2.0焕发第一春或者第二春的。我觉得不容易，真的不容易，虽然VC最近已经像慈善家一样慷慨了，但是最容易的是给钱，最难的是挣钱。我现在困在没钱上，但是我从来不为这个发愁，因为我知道它无非是成功10％或者20％的分量，大家多想想除了钱以外的事，你只要想通，有本事了，钱会来。谢谢大家！ </p>
<img src ="http://www.blogjava.net/mayu/aggbug/77577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-27 11:31 <a href="http://www.blogjava.net/mayu/articles/77577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web 2.0真的会改变互联网吗? </title><link>http://www.blogjava.net/mayu/articles/76747.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Mon, 23 Oct 2006 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/76747.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/76747.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/76747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/76747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/76747.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 12px"><font size=2><font style="COLOR: rgb(255,0,0)" size=6>经</font>过10年发展后，人们通过互联网已经可以完成比之前多得多的工作，得到更丰富、更精 确、更迅捷的反馈，以及更加美妙的体验。然而再过10年我们会发现媒体，无论报纸、电视还是互联网，与现在都完全不同，手机而不是纸或pc成为最常用的载 体;看电视不再是被动的收看电视台播放的节目而是自己订阅的，而节目呢也许是某个人自己摄制的;你也可能在电视或者网络上看到你的手机在不经意间拍摄上传 的画面，并因此获得一笔不菲的酬劳。这不是呓语，也不是幻想，这是Web2.0给我们展现的互联网，届时上网将不再是简单的游戏或者阅读，网络将提供各种 服务，无论是银行支付、旅游出行还是搜索爱情。<br><br>Web2.0对Web1.0的冲击<br><br>在web1.0时代信息的生产没有脱离 传统的信息生产模式，即:记者-编辑-发布的精英模式;但web 2.0却完全颠覆了这个模式，麻省理工的《技术观察》称web 2.0"......在强调分众传播的对等信息交互，也就是信息接受者同时也是这些信息的创造者，若干的博客汇集成新的信息输出者，每个人在挤奶的时候还 要喝奶，这其中自身的商业循环，绝不可能以浅薄的收费服务或者广告来衡量。"<br><br>首先挑动这种变化的就是blog，也称博客，这是web2.0中最为人所熟悉的元素。互联网上很早就他的影子，但在人们的观念中它只是主流媒体的一种补充，不过今年发生的一系列事件正在改变人们对它的看法:blog正在成为一种主流媒体。<br><br>如 果说发生在今年2月发生的印度洋海啸，博客还只是传统媒体的补充的话，那么半年后发生的伦敦系列爆炸案中，博客正式成为一种主要的报道方式，简单精确的图 片，简短直接的文字，在第一时间将新闻事件报道传至自己的博客中，人们开始习惯通过博客获得信息，而不是电视或者报纸，甚至不是门户网站。<br><br>除 了个人博客外，博客也开始进入企业家的视野，进而形成企业博客。今年9月Google推出"Google与李开复博士"中文博客，对李开复跳槽引发的纠纷 都可以在这里查询和提问。同样微软也鼓励员工们写博客。通用公司副总裁鲍勃&#183;鲁兹的"快车道"博客，已经成为通用公司与公众沟通的重要场所。正在这么做的 公司还有Sun、宝洁、波音公司等。博客正在逐步颠覆传统的新闻媒体。<br><br>在形形色色的文字博客之外，还有一种新的"博客"，可以发布声音和图像的"博客"，在Web2.0家族中被称为播客(Podcast)。它是收音机、iPod、博客和宽带互联网的集体产物。用最简单的方式描述，播客就是用嘴写，用耳朵看的博客。<br><br>对 大多数中国人来说，播客还是新鲜事，在今年上半年国内还只有屈指可数的几家播客网站，但笔者近日在Google中搜索播客，得到318,000条结果，在 百度中得到1,570,000条结果其中不少是播客网站或频道，虽然如此播客目前在国内还是面临几年前博客网站类似的局面，但在美国，2005年播客的人 数将达到450万，而2010年这个数字将达到惊人的5680万。而传统广播公司、电视台、互联网站都从其中看到了机会和威胁。<br><br>我们也许可以从早期互联网的网络电台中找到播客的身影，但播客与网络电台最大的不同在于，它采用rss2.0可以订阅模式，不再是单纯的音频文件，任何p2p文件都可以成为播客，任何个人都可以制作节目发布广播，任何拥有mp3、智能手机的人都可以自由的收听播客节目。<br><br>相对于传统广播或者电视台而言，播客不需要频道资源，不需要大量的设备，数码摄像机、录音软件、麦克风等目前家庭常用设备就可以帮助你成为一名播音员或节目主持人，播客们常说每一名读者就是一名博客，那么每一名听众也就是一名播客。<br><br>播 客的内容制作和收听方式极具个性化，打破传统的广播方式，因此它一经诞生，就受到传媒的注意，目前，海外广播公司纷纷开始增加播客节目，美国波士顿公共电 视台、加拿大多伦多音乐电台以及英国BBC公司都开通了正常的播客服务，美国卫星广播公司也将启动播客节目。同时播客也在影响娱乐界，唱片公司开始通过播 客建立歌手与歌迷之间的联系，不过这仅仅是开始。<br><br>互联网迈向个性化时代<br><br>在Web 1.0时代，网站之间是互不相通的，各网站自行其道，但在Web2.0时代借助rss和xml技术，实现网站之间的交流。Sina点点通、雅虎的my yahoo就加入数十家网站的内容，读者可以根据自己的喜好，自由选择信息。<br><br>但 这一切还仅仅是表面现象。Web2.0倡导的个性化，与传统网站的个性化有本质的区别。在传统门户网站中，个性化意味着页面设计风格和内容组织方式而非内 容本身，不管怎样都没有脱离大而全的中心门户的特点。web 2.0倡导的个性化则意味着精而专，网站之间有明确的分工，好像同样报道超女，有人只做李宇春的新闻，有人只做张靓影的新闻一样，通过RSS将其组合起 来，这时的RSS就起到门户网站的作用，不同的是其中的内容都是你自己选择的。<br><br>更精彩的还在于，个性化已经由用户层面进入企业服务层面， IT精英们已经在实践个性化服务。美国房地产交易地图网(HousingMaps.com)是目前美国最受欢迎的房地产交易网站之一。它的特点就在于把时 下流行Web2.0式网站craigslist的租房信息和Google Maps结合起来，以可视图钉的方式将全美房屋交易信息详细现实出来。<br><br>简而言之，web 2.0时代的个性化不是原来的网页个性化，而是服务个性化，我们面对的将是一个全新的个性化互联网。<br><br>技术引领Web 2.0<br><br>一直以来技术人员都有这样一个设想，与其安装昂贵的软件，不如通过互联网来使用安装在服务器上的软件。Web 2.0中的AJAX技术使这种设想成为可能。<br><br>&#183;AJAX赋予软件新面孔<br><br>AJAX 的全称是Asynchronous JavaScript and XML，它不是一种技术而是数种技术的组合。AJAX采用远程脚本调用技术，通过JavaScript语言与XMLHttpRequest对象来实现数据 请求，将处理由服务器转移到客户端，减少了服务器的资源占用，加快了数据处理的速度。采用AJAX开发的软件能让你在使用网络应用软件时感觉就象在本机上 一样。<br><br>目前AJAX技术已经广泛应用于网络应用软件开发中，Google也许是AJAX技术开发投入最大收获最多的公司，AJAX已经成功应用于GMail、Google Suggest和Google Maps等网络应用软件中。<br><br>除 了Google以外还有更多的公司在采用AJAX。在AJAX的帮助下Zimbra公司开发的电子邮件中，比GMail和HotMail更加互动。 Meebo.com公司也在即时通讯软件中采用AJAX技术，以创造更好的用户体验。即使微软也不能阻挡AJAX的魅力，微软声称将在下一代 HotMail中加入AJAX工具条。<br>&#183;开放API<br><br>以前的开放API(应用程序接口)主要指桌面应用软件，希望通过开放API融 合更多的应用。在WEB1.0时代只有少数网站，比如EBAY, 亚马逊公司(Amazon)、雅虎公司、Google公司等，在设计之初就遵循各种工业化标准，进而开放API接口，正是由于这些开放的API，他们获得 了不少有趣、有意思的应用。但大多数公司当时还没有这种意识，不过在Web 2.0时代，开放API已经成为不可忽视的趋势。<br><br>对于公司来 说，技术领域的竞争已经演化为标准之争，标准的形成在于有多少人在使用，因此开放API就意味更多的人采用，也就意味着标准。Google公司显然深谙此 道。它所推出的诸多产品都是基于开放的API标准。最典型的例子就是Google map，开放Google Map的API后，Google公司无需花费力气做更多的市场推广，其他公司就会主动地整合它的应用。如前文我们提到的美国房地产交易地图网就是在其网站 中主动整合Google Map。正是看到开放后的巨大前景，微软、雅虎、Skype也纷纷加入其中。<br><br>&#183;软件向互联网转变<br><br>在盗版最猖獗的时候，软件开发商曾经提出一个设想:免费软件，有偿服务;这个设想今天看来有望实现。<br><br>在 美国诞生了一批新公司，其中就有Upstartle，该公司开发出了一种基于网络的文字处理软件Writely，进入该公司的网站，注册后就可以开始写 作，文档可以保存在该公司的服务器上，然后可以在任何地方打开。这种基于网络的文字处理系统很快吸引了大批用户，一度导致服务器堵塞。与writely相 同字处理软件还有goffice，Google也在加紧开发他的在线文字处理软件openoffice。<br><br>而软件霸主微软的参与也许更有震 撼性。不久前微软宣布将推出Live战略，此战略以其旗舰产品Windows操作系统和Office办公软件为基础，打造Live.com平台，在此平台 上通过互联网向用户提供软件服务。在这个战略下微软将为Live捆绑多种软件，而且完全免费，通过广告和定购方式获取利润，这是微软自.net以后的又一 次战略转变，也标志着软件业向服务业转变的开始。<br><br>后Web 2.0更值得期待<br><br>我们今天所谈论的web 2.0应用只是web 2.0初级阶段的应用，很多web 2.0应用的商业模式还处于晦暗不明中，web 2.0的倡导者们还在苦苦寻觅合适的商业模式，我们唯一可以肯定的web 2.0是互联网发展的必然方向，他带来的冲击将不仅仅局限于互联网，很可将全面改变我们现在的生活和工作方式。<br><br>&#183;Web 2.0改造传统电视<br><br>宽带的迅速发展使网络电视的普及成为可能，敏锐的互联网精英们纷纷把目光投向IPTV，希冀再挖掘一座金山，但如果以传统的电视台模式来发展IPTV，必然陷入高投入，低产出的怪圈，但以web 2.0的理念来发展IPTV则可走出这个怪圈。<br><br>数码产品的发展使用户制作电视节目的设备费用大幅降低，后期制作软件也可以免费从网络上下载，用户可以自己制作节目，然后将节目上传，由观众自由订阅，网站进而可以对高收视率节目实行收费，如此就改变了传统电视中观众只能被动收看节目的模式。<br><br>&#183;网站小型化成为可能<br><br>WEB 2.0倡导专业模式使网站小型化成为可能。在web 1.0时代，网站无不走大型化道路，比拼的是编辑数量，网站规模，web 2.0的社会化、开放化的特性使中心不再成为必需，相反共同参与，使信息来源更加丰富更专业;而且小型化网站成本更容易控制。<br><br>与小型网站类似的个人网站将成为互联网的另一大特色。技术门槛的下降使个人建站更加容易，即使不知道HTML也可以轻松的搭建个人电台、个人电视台、个人DJ、个人游戏、个人商店将充斥互联网，甚至还可以拥有个人聊天工具，只有你的好友才知道。<br><br>&#183;无线应用成为web 2.0应用的下一个扩展空间<br><br>中国是个手机大国，手机拥有量已经超越美国，无限互联网的发展迅速，另一方面，网络终端小型化十分迅速，手写输入技术的应用使使用手持设备进行书写变得十分便捷。<br><br>一些web 2.0网站已经将移动博客栏目，但博客只是先行者，只是移动web2.0的初级阶段，更多的应用还将陆续产生，如播客、移动商务。<br><br>移动web2.0一旦发展起来，好处是显而易见的，因为他的客户个体更易确认，服务更加精确。<br><br>结束语<br><br>现在的互联网是一个单向的互联网，Web 2.0正在将互联网改造成为以人为中心的多向的互联网，网络反过来也在改变我们的工作和生活方式，也许将来SOHO将成为主要的工作方式，外出也不再需要旅行社的安排，因为你可以通过互联网安排好一切。<br><br>Web 2.0带来的冲击将不会仅仅局限于互联网或者媒体，它对我们的影响也许比你想象的还要大，美国《商业周刊》认为，从软件业、电信业、媒体业、市场营销业到娱乐业，几乎都将受到了这股趋势的强烈冲击，并且即将发生翻天覆地的变化<br></font></span>
<img src ="http://www.blogjava.net/mayu/aggbug/76747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-23 14:20 <a href="http://www.blogjava.net/mayu/articles/76747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>O/R MAPPING (hibernate)方法小结</title><link>http://www.blogjava.net/mayu/articles/74726.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 12 Oct 2006 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/74726.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/74726.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/74726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/74726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/74726.html</trackback:ping><description><![CDATA[<p><strong>（一）对象之间的关系：</strong> <br>1．依赖：<br>　　依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系，并且是短期的。我们的过程与对象往往依赖于我们的实体域对象。如在struts 的 action中调用模型层的方法。<br>2．关联<br>　　它使一个类指到另一个类的属性。长期的<br>3．聚合<br>　　聚合关系是关联关系的一种，是强的关联关系。聚合是整体和部分之间的关系。<br>4．组合<br>　　也叫合成关系，组成关系是关联关系的一种，是比聚合关系强的关系。对象负责代表部分的对象的生命周期。</p>
<p>　　注：既然聚合，组合关系属于关联关系，那么如何区分一般关联关系，聚合关系和组合关系呢？</p>
<p>　　一般关联：只要一个对象联系到另外一个对象就形成了关联关系。如：人和他的猫，黑豹乐队和窦魏，pc机和显示器。<br>　　聚合关系：一种强关联关系，它要求有部分和整体的关系，并且没有了整体部分也可以独立存在。在上面三个例子中人和它的猫显然没有部分和整体的关系，所以只能是一般的关联关系。而黑豹乐队和窦魏，窦魏等人组成了黑豹乐队即：窦魏和黑豹是整体和部分的关系。而窦魏脱离了黑豹（早就离开了）更或者黑豹不存在了那么窦魏仍然可以以音乐人的身份存在（即对象仍然可以独立存在）所以它属于聚合关系。组成关系是可以共享的。（窦魏也可以加入其他乐队）。<br>　　组合关系：一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期，组成关系是不能共享的。如：pc机和显示器的关系。</p>
<p>　　我觉得：如果两个实体是整体和部分的关系，那么它们到底是聚合还是组合，这取决于你的需求。比如说：pc机和显示器的关系，如果你的系统中，显示器脱离了pc机就不存在意义了，也可以说：所有显示器的访问都是通过pc机进行的，那么你可以把关系设定为组合（如你在为一个只买品牌机的代理商作系统你可能是可以这么作的）。如果你的显示器脱离的pc机仍然可以独立存在，也就是说在系统中可以直接访问显示器对象，那么你可以将关系设为聚合（如你在为一个买散件的代理商作系统你可能是可以这么作的）<br>5．继承<br>　　这个我不想多讲了，用过面向对象的语言都应该知道。</p>
<p><strong>（二）关系数据库的关系</strong> <br>　　一对一<br>　　一对多<br>　　多对一<br>　　多对多<br><strong>（三）o/r mapping策略<br></strong>　　1．继承：<br>　　对于继承关系一般有三种策略：<br>　　策略1继承树的每个类对应一个表&lt;joined-subclass &gt;<br>　　　共享主键<br>　　策略2继承树的根类对应一个表&lt;discriminator &gt;&lt;subclass &gt;<br>　　　需要添加一个识别字段<br>　　策略3继承树的叶子类对应一个表<br>　　　不支持多态查询<br>　　2．关联<br>　　2．1 一对一<br>　　一半有两种策略：<br>　　策略1：唯一的外键<br>　　　&lt;many-to-one&gt;+unique="true" (唯一的外键)<br>　　　&lt;one-to-one&gt;<br>　　策略2：共享主键<br>　　　&lt;one-to-one&gt;<br>　　　&lt;one-to-one&gt;&lt;constrained="true"&gt; (既是主键又是外键)<br>　　　注意：生成方式需要用：foreign<br>　　2．2 一对多（无需多说）<br>　　2．3 多对一（无需多说）<br>　　2．4 多对多<br>　　策略1：A,B表多对多的关系需要引入C表。<br>　　　C表中的所有属性即为主键又为外键分别参照A,B两表。<br>　　　C表中不可以有其他属性<br>　　策略2：将多对多拆分成两个一对多：<br>　　　A,B对象多对多的关系需要引入C对象。使得A,B两对象与C对象的关系为一对多。对应数据库中：A,B表多对多的关系需要引入C表。A,B两表与C表的关系为一对多。<br>　　　C表又自己的主键<br>　　　C表中又非主键的外键分别参照A,B两表。<br>　　　C表中不可以有其他属性<br>　　　如；学生 ，课程为多对多的关系 那么引入学生选课。<br>　　注意：策略1和策略2的不同在于：策略2引入了新的对象而策略1没有。这是因为这样：策略1的c表不能又自己的东西。而策略2有。<br>　　2．5 其他<br>　　上面说过：聚合与组成是关联的一种所以他们也符合以上策略。<br>　　特别的：当用到组合关系的是否我们可用用到hibernate的"组件"&lt;component&gt;.由于"组件"它完全可以满足组成关系的强关联。<br>　　3．依赖<br>　　一般不在实体域对象中体现。</p>
<p>　　O/R MAPPING (HIBERNATE)方法小结 （补充内容）：<br>　　另外我看到了一种"键关联"的方法，感觉很有道理。我理解了一下总结如下：<br>　　1．一般关联：<br>　　这种方法对于一般的关联总是引入c表（另外的一张表）仅仅表示关系。<br>　　C表的主键有分别指向A,B两表（外键）。当指向一方的外键unique="true"即唯一，那么这一方为"一"，反之为"多"的一方。这样就可以形成一般的关联关系。但是注意的是：c表不映射为对象。C表也没有自己的属性。<br>　　2．聚合和组成<br>　　当实体A的非主键列中有一个引自实体B的时候，这种关系是B聚合A。如果这种引用是强制性的，则是合成关系，否则为聚合关系。是否为强制性，只需要将引用列设为非空即可；<br>　　3．继承<br>　　当实体A的主键引用自实体B的时候（即为外键），那么A继承 B。</p>
<img src ="http://www.blogjava.net/mayu/aggbug/74726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-12 10:20 <a href="http://www.blogjava.net/mayu/articles/74726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp内部对象</title><link>http://www.blogjava.net/mayu/articles/74725.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Thu, 12 Oct 2006 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/74725.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/74725.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/74725.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/74725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/74725.html</trackback:ping><description><![CDATA[
		<span id="ShowBody" style="FONT-SIZE: 12px; LINE-HEIGHT: 15px">1．内部对象<br />1．1  out(向客户端输出各种数据类型)<br />重要方法：<br /> out.print(类型)  或  out.println(类型)：换行输出<br /> out.newLine()：输出一个换行符号<br /> out.flush()：输出缓冲区的数据<br /> out.close()：关闭输出流<br /> out.clearBuffer()：清除缓冲区里的数据，并把数据写到客户端<br /> out.clear()：清除缓冲区里的数据，但不把数据写到客户端<br /> out.getBufferSize()：获得缓冲区的大小，缓冲区的大小可用&lt;%@page  buffer=”size”%&gt;设置<br /> out.getRemaining()：获得缓冲区没有使用的空间的大小<br /> out.isAutoFlush()：返回布尔值，若auto  flush则返回true，否则返回false。是否auto  fush我们可用%@page  is  AutoFlush=”true/false”%来设置<br />注意：中文显示问题<br /> 若是直接赋值的中文字符串，用&lt;%@  page  contentType=”text/html;charset=gb2312”%&gt;就可正常显示。但不能用getStr(String  name)函数或类似的函数转换内码，否则不能正常显示中文。<br /> 若是request传过来的中文字符串，必须要用getStr(String  name)函数或类似的函数转换内码，否则不能正常显示中文。<br />如：String  aa=str;<br />byte[]  aa=aa.getBytes(“ISO8859-1”);<br />String  bb=new  String(aa);<br /> 在不同平台、不同的服务器jsp中文问题的解决方法各不相同，可自行试验。<br />1．2  request（接受客户端输入的信息）<br />作用：主要用于接受客户端通过http协议连接传输到服务器端的数据。<br />方法：<br /> getCookies()：返回客户端的cookie对象，结果是一个cookie数组<br /> getHeader(String  name)：获得http协议定义的传送文件头信息，<br />如：request.getHeader(“User-agent”)返回客户端浏览器的版本号、类型<br /> getAttribute(String  name)：返回name指定的属性值，若不存在指定的属性，就返回空值(null)。<br /> getattributeNames()：返回request对象所有属性的名字，结果集是一个Enumeration（枚举）类的实例<br /> getHeaderNames()：返回所有request  header的名字，结果集是一个Enumeration（枚举）类的实例<br /> getHeaders(String  name)：返回指定名字的request  header的所有值，结果集是一个Enumeration（枚举）类的实例<br /> getMethod()：获得客户端向服务器端传送数据的方法有GET、POST、PUT等类型<br /> getParameter(String  name)：获得客户端传送给服务器端的参数值，该参数由name指定<br /> get  parameterNames()：获得客户端传送给服务器端的所有的参数名，结果集是一个Enumeration（枚举）类的实例<br /> getParameterValues(String  name)：获得指定参数所有值<br /> getQueryString()获得查询字符串，该串由客户端以GET方法向服务器端传送<br /> getRequestURI()：获得发出请求字符串的客户端地址<br /> getServletPath()：获得客户端所请求的脚本文件的文件路径<br /> setAttribute(String  name,Java.lang.Object  o)：设定名字为name的request参数值，该值由Object类型的o指定<br /> getServerName()：获得服务器的名字<br /> getServerPort()：获得服务器的端口号<br /> getRemoteAddr()：获得客户端的IP地址<br /> getRemoteHost()：获得客户端电脑的名字，若失败，则返回客户端电脑的IP地址<br /> getProtocol()：获取客户端向服务器端传送数据所依据的协议名称，如http/1.1<br />1．3  application（保存用户信息）<br />作用：一旦创建，除非服务器关闭，否则将一直保持下去<br />application.setAttribute(“name”,val)<br />request.setAttribute(“name”,val)<br />方法：<br /> getAttribute(String  name)：返回由name指定名字的application对象属性的值，这是个Object对象<br /> getattributeNames()：返回所有application对象属性的名字，结果集是一个Enumeration（枚举）类的实例<br /> getInitParameter(String  name)：  返回application栽个属性的初始值，此属性由name指定<br /> getServerInfo()：获得当前版本Servlet编译器的信息<br /> setAttribute(String  name,Object  object)：用object来初始化某个属性，该属性由name指定<br />例：简单计数器（E:\app\java\tomcat322\webapps\myjsp\  count.jsp）<br />1．4  response(控制http连接)<br />作用：向客户端发送数据，如Cookie、HTTP文件关信息等。<br />方法：<br /> addCookie(Cookie  cookie)：添加1个Cookie对象，用来保存客户端的用户信息。用request的getcookies()方法可获得这个Cookie<br />如：&lt;%  Cookie  mycookie=new  Cookie(“uname”,”wsr”);<br />response.addCookie(mycookie);<br />Cookie  delmycookie=new  cookie(“mycookie”,null);<br />delmycookie  .setMaxAge(0);<br />delmycookie  .setPath(/”);<br />response.addCookie(delmycookie);<br />%&gt;<br /> addHeader(String  name,String  value)：添加HTTP文件头，该header将会传到客户端，若同名的header存在，原来的header会被覆盖<br /> containsHeader(String  name)：判断指定名字的HTTP文件头是否存在并返回布尔值<br /> sendError(int  sc)：向客户端发送错误信息，如：505：服务器内部错误；404：网页找不到错误<br />如：response.sendError(response.SC_NO_CONTENT)；<br /> setHeader(String  name,String  value)：设定指定名字的HTTP文件头的值，若该值存在，它将会被新值覆盖<br />如1：让网页每隔5秒刷新一次<br />&lt;%  response.setHeader(“Refresh”,”5”);%&gt;<br />      the  current  dateis:&lt;%=new  Date()%&gt;<br />如2：利用response对象设定HTTP头<br />&lt;%  response.setContentType(“Application/pdf”);<br />response.setHeader(“content-disposition”,”attachment;filename=\”syntax.pdf\””);<br />%&gt;<br /> sendRedirect(“<a href="http://www.foo.com/path/error.html”" target="_blank">http://www.foo.com/path/error.html”</a>)：重定向功能<br />1．5  exception(处理异常和错误)  <br />作用：处理JSP文件在执行时所有发生的错误和异常。有3个内建方法。<br />注意：必须在&lt;%@  page  isErrorPage=”true”%&gt;的情况下才可以使用Exception对象<br /> getMessage()：返回错误信息<br /> printStackTrace()：以标准错误的形式输出一个错误和错误的堆栈<br /> toString()：以字符串的形式返回1个对异常的描述<br />1．6  session（保存用户信息）<br />作用：分别保存每一个用户的信息<br />session.putValue(“name”,val)<br />session.getValue(“name”)<br />注意<img onmousewheel="return bbimg(this)" alt="" src="http://bbs.ccidnet.com/images/smilies/se.gif" onload="javascript:if(this.width&gt;screen.width-500)this.style.width=screen.width-500;" />ssion中保存和检索的信息不能是基本数据类型，而必须是JAVA的相应的Object对象。<br />方法：<br /> getAttribute(String  name)：获得指定名字的属性，若该属性不存在，将返回null<br /> getattributeNames()：返回session对象中存储的第一个属性对象，结果集是一个Enumeration类的实例<br /> getCreationTime()：返回该session对象创建的时间，以毫秒计，从1970年1月1日起<br /> getId()：每生成一个session对象，服务器都会给其一个不会重复的编号，此方法返回当前session的编号<br /> getLastAccessedTime()：返回当前session对象最后1次被操作的时间，返回自1970年1月1日起至今的毫秒数<br /> getMaxInactiveInterval()：获得session对象的生存时间<br /> removeAttribute(String  name)：删除指定的属性（包括属性名、属性值）<br /> setAttribute(String  name,Java.lang.Object  value)：设定指定名字的属性值，并将其存储在session对象中 </span>
<img src ="http://www.blogjava.net/mayu/aggbug/74725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-12 10:19 <a href="http://www.blogjava.net/mayu/articles/74725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML特殊字符</title><link>http://www.blogjava.net/mayu/articles/74452.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Wed, 11 Oct 2006 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/74452.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/74452.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/74452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/74452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/74452.html</trackback:ping><description><![CDATA[<p>用在模拟器上的网页的显示，比如WAP上需要考虑HTML特殊字符的问题<br><br>非换行空格 &amp;nbsp;<br>&lt; 小于 &amp;lt;<br>&gt; 大于 &amp;gt;<br>&amp; &#8220;&amp;&#8221; 号 &amp;amp;<br>" 双引号 &amp;quot;<br>' 单引号&nbsp; &amp;apos;<br>&#8593; &amp;uarr;<br>&#8595; &amp;darr;<br>￠ cent分 &amp;cent;<br>￡ pound镑 &amp;pound;！<br>&#167; section &amp;sect;<br>&#215; 乘 &amp;times;<br>&#247; division除 &amp;divide;&nbsp;<br>&#169; copyright版权 &amp;copy;<br>&#174; registered 注册trademark &amp;reg;</p>
<img src ="http://www.blogjava.net/mayu/aggbug/74452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-11 10:15 <a href="http://www.blogjava.net/mayu/articles/74452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Onclick里面的小问题</title><link>http://www.blogjava.net/mayu/articles/74104.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Mon, 09 Oct 2006 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/74104.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/74104.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/74104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/74104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/74104.html</trackback:ping><description><![CDATA[前段时间一直没写下来，以后要注意。。。恩<br><br>FORM对象里面<br>&lt;input name="submit2" type="submit" value="提 交" onClick="return CheckAll(this.form)"&gt;<br>&lt;input name="submit2" type="submit" value="提 交" onClick="CheckAll(this.form)"&gt;<br>前者点击提交后就不会跳转到action页面<br>后者反之<br><br>
<img src ="http://www.blogjava.net/mayu/aggbug/74104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-09 16:30 <a href="http://www.blogjava.net/mayu/articles/74104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 纯css菜单生成器</title><link>http://www.blogjava.net/mayu/articles/73881.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Sun, 08 Oct 2006 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/73881.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/73881.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/73881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/73881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/73881.html</trackback:ping><description><![CDATA[官网：<a href="http://www.opencube.com/" target=_blank>http://www.opencube.com/</a><br><br>官网提供下载的压缩包里有几个非常不错的模版以及安装文件，安装软件之后立即运行，会出现一个loading软件界面的提示（java做的？？？），然后你就会看到一个激动人心的软件呈现在你的面前，比DW好太多了......<br>你可以在这里自定义菜单，然后保存到一个html文件里，菜单不仅漂亮，更重要的是纯css的&#8220;绿色代码&#8221;哦。<br><br>
<img src ="http://www.blogjava.net/mayu/aggbug/73881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-10-08 17:51 <a href="http://www.blogjava.net/mayu/articles/73881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dom解析xml</title><link>http://www.blogjava.net/mayu/articles/73052.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Sat, 30 Sep 2006 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/73052.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/73052.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/73052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/73052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/73052.html</trackback:ping><description><![CDATA[一、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前言<br><br><br><br>用Java解析XML文档，最常用的有两种方法：使用基于事件的XML简单API（Simple&nbsp;API&nbsp;for&nbsp;XML）称为SAX和基于树和节点的文档对象模型（Document&nbsp;Object&nbsp;Module）称为DOM。Sun公司提供了Java&nbsp;API&nbsp;for&nbsp;XML&nbsp;Parsing（JAXP）接口来使用SAX和DOM，通过JAXP，我们可以使用任何与JAXP兼容的XML解析器。<br><br>JAXP接口包含了三个包：<br><br>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.w3c.dom&nbsp;&nbsp;W3C推荐的用于XML标准规划文档对象模型的接口。<br><br>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.xml.sax&nbsp;&nbsp;&nbsp;用于对XML进行语法分析的事件驱动的XML简单API（SAX）<br><br>（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javax.xml.parsers解析器工厂工具，程序员获得并配置特殊的特殊语法分析器。<br><br>二、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前提<br><br><br><br>DOM编程不要其它的依赖包，因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax&nbsp;和javax.xml.parsers包就可以满意条件了。<br><br>三、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用DOM解析XML文档<br><br><br><br>我们现在来看看DOM是如何解析XML的吧！同样的，我将从一个简单的不能再简单的例子来说明DOM是如何解析XML文档的，先让我们看看XML是什么内容吧：<br><br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="gb2312"?&gt;<br><br><br><br>&lt;books&gt;<br><br><br><br>&nbsp;&nbsp;&lt;book&nbsp;email="zhoujunhui"&gt;<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;rjzjh&lt;/name&gt;<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price&gt;jjjjjj&lt;/price&gt;<br><br><br><br>&nbsp;&nbsp;&lt;/book&gt;<br><br><br><br>&lt;/books&gt;<br><br><br><br>简单的不能再简单了。但是该有的都有了，根元素、属性、子节点。好了，能反应问题就行了，下面来看看解析这个XML文件的Java代码吧！<br><br>1&nbsp;public&nbsp;class&nbsp;DomParse&nbsp;{<br><br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DomParse(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilderFactory&nbsp;domfac=DocumentBuilderFactory.newInstance();<br><br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br><br>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilder&nbsp;dombuilder=domfac.newDocumentBuilder();<br><br>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is=new&nbsp;FileInputStream("bin/library.xml");<br><br>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc=dombuilder.parse(is);<br><br>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;root=doc.getDocumentElement();<br><br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NodeList&nbsp;books=root.getChildNodes();<br><br>11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(books!=null){<br><br>12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;books.getLength();i++){<br><br>13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;book=books.item(i);<br><br>14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(book.getNodeType()==Node.ELEMENT_NODE){<br><br>15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;email=book.getAttributes().getNamedItem("email").getNodeValue();<br><br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(email);<br><br>17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(Node&nbsp;node=book.getFirstChild();node!=null;node=node.getNextSibling()){<br><br>18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node.getNodeType()==Node.ELEMENT_NODE){<br><br>19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node.getNodeName().equals("name")){<br><br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name=node.getNodeValue();<br><br>21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name1=node.getFirstChild().getNodeValue();<br><br>22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name);<br><br>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name1);<br><br>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node.getNodeName().equals("price")){<br><br>26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;price=node.getFirstChild().getNodeValue();<br><br>27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(price);<br><br>28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(ParserConfigurationException&nbsp;e)&nbsp;{<br><br>35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><br>36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(FileNotFoundException&nbsp;e)&nbsp;{<br><br>37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><br>38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(SAXException&nbsp;e)&nbsp;{<br><br>39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><br>40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{<br><br>41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><br>42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>43&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>44&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br><br>45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;DomParse();<br><br>46&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>47&nbsp;}<br><br>四、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;代码解释<br><br><br><br>先看看这个程序引用类：<br><br>import&nbsp;java.io.FileInputStream;<br><br>import&nbsp;java.io.FileNotFoundException;<br><br>import&nbsp;java.io.IOException;<br><br>import&nbsp;java.io.InputStream;<br><br>import&nbsp;javax.xml.parsers.DocumentBuilder;<br><br>import&nbsp;javax.xml.parsers.DocumentBuilderFactory;<br><br>import&nbsp;javax.xml.parsers.ParserConfigurationException;<br><br>//下面主要是org.xml.sax包的类<br><br>import&nbsp;org.w3c.dom.Document;<br><br>import&nbsp;org.w3c.dom.Element;<br><br>import&nbsp;org.w3c.dom.Node;<br><br>import&nbsp;org.w3c.dom.NodeList;<br><br>import&nbsp;org.xml.sax.SAXException;<br><br>上面那么简单的代码一看就明白了，但是为了介绍个DOM编程的大概还是来看看这个程序吧：<br><br>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;得到DOM解析器的工厂实例<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilderFactory&nbsp;domfac=DocumentBuilderFactory.newInstance();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂<br><br>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从DOM工厂获得DOM解析器<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilder&nbsp;dombuilder=domfac.newDocumentBuilder();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器<br><br>（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把要解析的XML文档转化为输入流，以便DOM解析器解析它<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is=new&nbsp;FileInputStream("bin/library.xml");<br><br>InputStream是一个接口。<br><br>（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解析XML文档的输入流，得到一个Document<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc=dombuilder.parse(is);<br><br>由XML文档的输入流得到一个org.w3c.dom.Document对象，以后的处理都是对Document对象进行的<br><br>（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;得到XML文档的根节点<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;root=doc.getDocumentElement();<br><br>在DOM中只有根节点是一个org.w3c.dom.Element对象。<br><br>（6）得到节点的子节点<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NodeList&nbsp;&nbsp;books=root.getChildNodes();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;books.getLength();i++){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;book=books.item(i);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的，还有一种轮循子节点的方法，后面有介绍<br><br>（7）&nbsp;取得节点的属性值<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;email=book.getAttributes().getNamedItem("email").getNodeValue();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(email);<br><br>注意，节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE<br><br>（8）轮循子节点<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(Node&nbsp;node=book.getFirstChild();node!=null;node=node.getNextSibling()){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node.getNodeType()==Node.ELEMENT_NODE){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node.getNodeName().equals("name")){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name=node.getNodeValue();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name1=node.getFirstChild().getNodeValue();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name1);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(node.getNodeName().equals("price")){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;price=node.getFirstChild().getNodeValue();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(price);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>这段代码的打印输出为：<br><br>null<br><br><br><br>alterrjzjh<br><br><br><br>jjjjjj<br><br>从上面可以看出<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name=node.getNodeValue();&nbsp;&nbsp;&nbsp;是一个空值。而<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name1=node.getFirstChild().getNodeValue();&nbsp;&nbsp;才是真正的值，这是因为DOM把&lt;name&gt;rjzjh&lt;/name&gt;也当作是两层结构的节点，其父节点为&lt;name&gt;节点本身，且它只有一个子节点（如果有属性的话就不止一个了！），子节点是它的值&#8220;rjzjh&#8221;，所以我们看到上面的结果。<br><br>还有，子节点的节点类型也是Node.ELEMENT_NODE型的，node.getNextSibling()方法是取下一个相邻的节点。<br><br>五、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOM结点<br><br><br><br>DOM是一些节点的集合，由于文档中可能包含有不同类型的信息，所以定义了几种不同类型的节点。DOM中最常见的节点类型有：<br><br>（1）元素：<br><br>元素是XML的基本构件。元素的子节点可以是其它元素、文本节点或两者都有。元素节点还可以只含有属性这一唯一类型的节点。<br><br>（2）属性：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;属性节点包含关于元素节点的信息，但它不是元素的子节点<br><br>（3）文本：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文本节点文本信息，或干脆是空白的文本。<br><br>（4）文档：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文档节点是整个文档中所有其它节点的父节点<br><br>元素是一种很重要的类型节点，元素节点可以是其他节点的容器。<br>
<img src ="http://www.blogjava.net/mayu/aggbug/73052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-30 15:37 <a href="http://www.blogjava.net/mayu/articles/73052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在JSP中使用JavaMail</title><link>http://www.blogjava.net/mayu/articles/73051.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Sat, 30 Sep 2006 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/73051.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/73051.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/73051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/73051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/73051.html</trackback:ping><description><![CDATA[<strong>什么是JavaMail</strong> <br><br>　　JavaMail是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。 <br><br>　　虽然JavaMail是Sun的API之一，但它目前还没有被加在标准的java开发工具包中（Java Development Kit），这就意味着你在使用前必须另外下载JavaMail文件。除此以外，你还需要有Sun的JavaBeans Activation Framework （JAF）。JavaBeans Activation Framework的运行很复杂，在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows 2000下使用需要指定这些文件的路径，在其它的操作系统上也类似。 <br><br>　　接下来要讲解的是这篇指南的最难理解的部分。 <br><br>　　这篇指南包括三部分：HTML表格、关于JavaMail、JavaMail和JSP的结合。 <br><br><ccid_nobr></ccid_nobr><strong>第一部分：HTML表格 </strong><br><br>　　第一部分提供了一个最基本的基于HTML的email发送收取程序的例子。第二部分则讲述JavaMail的工作原理。第三部分则介绍将JavaMail加入JSP，创建一个基本的email发送收取程序。 <br><br><ccid_nobr></ccid_nobr>　　划分组件<strong></strong><br><br>　　JSP最重要的特性是能将整个网页划分成一些细小的组件。这里使用的组件包括： <br><br>　　●一个用来将email的信息发送给JSP的HTML表格； <br><br>　　●一个JSP页面用来处理和发送信件。&nbsp;<br>&nbsp;<br>第一步，就是创建一个HTML表格用来给JSP页面发送信息。你可以将以下的HTML代码复制到你的电脑上： <br><br><ccid_nobr></ccid_nobr><strong>用来发送email的HTML源代码 </strong>
<p>&#160;</p>
<ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 align=center borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>&lt;HTML&gt; <br>&lt;BODY&gt; <br>&lt;FORM action="sendmail.jsp" method="post"&gt; <br>&lt;TABLE align="center"&gt; <br>&lt;TR&gt; <br>&lt;TD width="50%"&gt; <br>To:&lt;BR&gt;&lt;INPUT name="to" size="25"&gt; <br>&lt;/TD&gt; <br>&lt;TD width="50%"&gt; <br>From:&lt;BR&gt;&lt;INPUT name="from" size="25"&gt; <br>&lt;/TD&gt; <br>&lt;/TR&gt; <br>&lt;TR&gt; <br>&lt;TD colspan="2"&gt; <br>Subject:&lt;BR&gt;&lt;INPUT name="subject" size="50"&gt; <br>&lt;/TD&gt; <br>&lt;/TR&gt; <br>&lt;TR&gt; <br>&lt;TD colspan="2"&gt; <br>Message:&lt;BR&gt;&lt;TEXTAREA name="text" rows=25 cols=85&gt;&lt;/TEXTAREA&gt; <br>&lt;/TD&gt; <br>&lt;/TR&gt; <br>&lt;/TABLE&gt; <br>&lt;INPUT type="submit" name="cb_submit" value=" Send "&gt; <br>&lt;INPUT type="reset" name="cb_reset" value=" Clear "&gt; <br>&lt;/FORM&gt; <br>&lt;/BODY&gt; <br>&lt;/HTML&gt; </td>
        </tr>
    </tbody>
</table>
<br>　　以上这段程序将创建一个包含email基本信息（例如：收件地址、发送地址、主题和内容）的文件。当然你可以根据你自己的需要来决定这个文件包含那些信息。 <br><br>　　这个HTML文件的使用有两点要求：第一点是生成的文件必须发送给接下来将介绍的程序使用。在这个例子中就是sendmail.jsp，但在你使用时，必须用这个文件在系统里的URL来代替它；第二点是必须有空间来允许用户发送email。 <br><br>　　第二部分将对JavaMail的特征进行一些分析，为在第三部分创建JSP程序作准备。所以接下来我们将学习JavaMail。<br><strong>第二部分：关于JavaMail</strong><br><strong>文档的使用</strong>&nbsp;<br><br>　　下载的JavaMail API中带的文档是很有用的。你可以在JavaMail下的/docs/javadocs/index.html找到它。第二部分主要将分析邮件程序的组件。你可以通过阅读文档来获得更多这方面的信息。 <br><br>　　组件发送邮件需要使用JavaMail，它使对邮件的操作变得简单易用。 <br><br><ccid_nobr></ccid_nobr><strong>属性对象</strong><br><br>　　JavaMail需要创建一个格式为"mail.smtp.host"的文件用来发送信息。 <ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>Properties props = new Properties (); <br>props.put("mail.smtp.host", "smtp.jspinsider.com"); </td>
        </tr>
    </tbody>
</table>
<br><ccid_nobr></ccid_nobr><strong>对话对象</strong><br><br>　　所有的基于JavaMail的程序都至少需要一个或全部的对话目标。 <br><br><ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>Session sendMailSession; <br>sendMailSession = Session.getInstance(props, null); </td>
        </tr>
    </tbody>
</table>
<br><ccid_nobr></ccid_nobr><strong>传输</strong><br><br>　　邮件的传输只有送出或受到两种状态。JavaMail将这两种不同状态描述为传输和储存。传输将送出邮件，而储存将收取邮件。 <br><br><ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>Transport transport; <br>transport = sendMailSession.getTransport("smtp"); </td>
        </tr>
    </tbody>
</table>
<br>　　使用JavaMail能为我们节约大量的时间。JavaMail能代替所有的SMTP的工作。 <br><br>　　注意：JavaMail并不能完全的支持所有的邮件发送收取工作。它目前仅支持IMAP、SMTP和POP3，除此以外你只有等待新的JavaMail版本或自己开发协议。<br><br><strong>信息对象</strong><br><br>　　信息对象将把你所发送的邮件真实的反映出来。 <br><br><ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>Message newMessage = new MimeMessage(sendMailSession); </td>
        </tr>
    </tbody>
</table>
<br>　　这就是我们所需要的全部四个对象。下一步将是如何将对象加入到JSP中。 <br><br><ccid_nobr></ccid_nobr><strong>第三部分：JavaMail和JSP的结合</strong><br><br><ccid_nobr></ccid_nobr><strong>　　创建JSP</strong><br><br>　　下面我们将开始将他们结合在一起。最重要的一点是要确认根据页面指示分类。还要记得在邮件上标注java.util.date。 <br><br><ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>&lt;%@ page <br>import= " javax.mail.*, javax.mail.internet.*, javax.activation.*, java.util.*" <br>%&gt; </td>
        </tr>
    </tbody>
</table>
<br>　　其次，创建邮件发送的确认信息。确认信息可以是任意的，一般常用"你的邮件已经发送出去了（Your mail has been sent）。" <br><br><ccid_nobr></ccid_nobr><strong>信息是如何创建和发送的</strong><br><br>　　我们在第二部分里已经讨论过信息对象的创建。我们下面将对信息进行操作。这就和设置信息对象的属性一样简单。你可以通过下面的程序来实现这项操作。 <br><br><ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>newMessage.setFrom(new InternetAddress(request.getParameter("from"))); <br>newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(request.getParameter("to"))); <br>newMessage.setSubject(request.getParameter("subject")); <br>newMessage.setSentDate(new Date()); <br>newMessage.setText(request.getParameter("text")); </td>
        </tr>
    </tbody>
</table>
<br>现在将开始发送信息。通过JavaMail来实现它非常简单。 <br><br>　　transport.send(newMessage); <br><br><ccid_nobr></ccid_nobr><strong>将所有的组件结合在一起</strong><br><br>　　现在所有的组件都已经齐全了。现在将它们都放在JSP里面。要注意每一个错误信息，并将它反馈给用户。代码如下，你可以通过复制它们直接使用： <br><br><ccid_nobr></ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580 borderColorLight=#000000 border=1>
    <tbody>
        <tr>
            <td class=code bgColor=#e6e6e6>Sample JSP email Utility Using JavaMail <br>&lt;%@ page <br>import=" javax.mail.*, javax.mail.internet.*, javax.activation.*,java.util.*" <br>%&gt; <br>&lt;html&gt; <br>&lt;head&gt; <br>&lt;TITLE&gt;JSP meets JavaMail, what a sweet combo.&lt;/TITLE&gt; <br>&lt;/HEAD&gt; <br>&lt;BODY&gt; <br>&lt;% <br>try{ <br>Properties props = new Properties(); <br>Session sendMailSession; <br>Store store; <br>Transport transport; <br>sendMailSession = Session.getInstance(props, null); <br>props.put("mail.smtp.host", "smtp.jspinsider.com"); <br>Message newMessage = new MimeMessage(sendMailSession); <br>newMessage.setFrom(new InternetAddress(request.getParameter("from"))); <br>newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(request.getParameter("to"))); <br>newMessage.setSubject(request.getParameter("subject")); <br>newMessage.setSentDate(new Date()); <br>newMessage.setText(request.getParameter("text")); <br>transport = sendMailSession.getTransport("smtp"); <br>transport.send(newMessage); <br>%&gt; <br>&lt;P&gt;Your mail has been sent.&lt;/P&gt; <br>&lt;% <br>} <br>catch(MessagingException m) <br>{ <br>out.println(m.toString()); <br>} <br>%&gt; <br>&lt;/BODY&gt; <br>&lt;/HTML&gt; </td>
        </tr>
    </tbody>
</table>
<br>
<img src ="http://www.blogjava.net/mayu/aggbug/73051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-30 15:33 <a href="http://www.blogjava.net/mayu/articles/73051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 配置集锦</title><link>http://www.blogjava.net/mayu/articles/73033.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Sat, 30 Sep 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/73033.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/73033.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/73033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/73033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/73033.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Tomcat 服务器server.xml的关键参数配置说明：以下文字均以tomcat5.0.30为例进行。1，配置tomcat服务器访问端口，只需配置Connector的port端口即可。Tomcat默认为8080，现修改port参数值为80。&lt;!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --&gt;&lt;Conn...&nbsp;&nbsp;<a href='http://www.blogjava.net/mayu/articles/73033.html'>阅读全文</a><img src ="http://www.blogjava.net/mayu/aggbug/73033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-30 14:55 <a href="http://www.blogjava.net/mayu/articles/73033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat 支持中文编码  </title><link>http://www.blogjava.net/mayu/articles/69870.html</link><dc:creator>my</dc:creator><author>my</author><pubDate>Fri, 15 Sep 2006 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/mayu/articles/69870.html</guid><wfw:comment>http://www.blogjava.net/mayu/comments/69870.html</wfw:comment><comments>http://www.blogjava.net/mayu/articles/69870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mayu/comments/commentRss/69870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mayu/services/trackbacks/69870.html</trackback:ping><description><![CDATA[<pre>				<span id=lblsummary>tomcat 支持中文编码 wt &nbsp;说:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Connector port="8080" address="${jboss.bind.address}"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" maxHttpHeaderSize="8192"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minSpareThreads="25" maxSpareThreads="75"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="false" redirectPort="8443" acceptCount="100"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" disableUploadTimeout="true"/&gt;wt&nbsp; 说:这个里面加上一句&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URIEncoding="GBK"&nbsp;</span>
</pre>
<img src ="http://www.blogjava.net/mayu/aggbug/69870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mayu/" target="_blank">my</a> 2006-09-15 13:16 <a href="http://www.blogjava.net/mayu/articles/69870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>