﻿<?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-资料整理-文章分类-流行框架</title><link>http://www.blogjava.net/savage100/category/12619.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 15:57:44 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 15:57:44 GMT</pubDate><ttl>60</ttl><item><title>Struts 中forward之后的路径问题</title><link>http://www.blogjava.net/savage100/articles/67791.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Tue, 05 Sep 2006 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/67791.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/67791.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/67791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/67791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/67791.html</trackback:ping><description><![CDATA[问题出在映射的.do和.jsp不在同一路径下（或路径的同一层次下），它们forward过去相当于带上下文的方法调用，所以设计时的<span style="FONT-WEIGHT: bold">相对路径</span>,运行时是相对于.do的，因此找不到。 <br /><br /><br />方法1：全部改为绝对路径。 <br />方法2：把.do和它要forward的jsp文件映射到同一目录结构下 <br />方法3：html:base(其实生成了base标签） <br />方法4：代码转换 <br /><br />forward跳转后图片不能刷新的问题，在url 后加个随机数 i<br />&lt;img src="aaaa.gif?&lt;%=i%&gt;" width="572" height="69"&gt;<br /><br />另一种方法<br />Internet 选项&gt; 常规&gt; Internet临时文件设置-&gt;检查网页的较新版本中 选择“每次访问此页时检查”<br /><img src ="http://www.blogjava.net/savage100/aggbug/67791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-09-05 13:55 <a href="http://www.blogjava.net/savage100/articles/67791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sturts ---DispatchAction的使用</title><link>http://www.blogjava.net/savage100/articles/64770.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 21 Aug 2006 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/64770.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/64770.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/64770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/64770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/64770.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">Struts心得--DispatchAction使用日记</span>
				<br />
				<!---->
				<br />
		</strong>
		<span class="tpc_content">Struts1.1发布了这么长时间了，我才刚刚开始系统地学习Struts的相关知识，经过前一阵潜心研究，对Struts1.1中已有的类DispatchAction有了进一步的认识。我将在这里总结一下，希望能对大家有所帮助。<br />　　<br />　　在1.0版本中我们通常都是用execute方法来完成我们对业务逻辑的处理及页面的转发。通常在一个Action中我们都只能够完成一种业务逻辑的操作。如果要是完成多个业务逻辑（比如：添加、删除等）功能相近的业务逻辑我们就没有办法了么？答案是否定的，我们可以通过在页面中定义一个隐藏变量，在不同的页面要求处理不同的业务逻辑的时候我们可以赋予这个变量不同的值，并在execute方法中通过对变量值的判断来完成不同的业务逻辑操作。<br />　　<br />　　举例来说，我们首先在页面中定义一个隐藏变量。<br />　　<br />　　&lt;；html：hidden property="operAt"/&gt;<br />　　<br />　　然后定义一个JavaScript函数，我们可以在通过点击提交按钮的时候，在函数体里面修改它的值。<br />　　<br />　　&lt;；SCRIPT&gt;<br />　　<br />　　function set（key） {<br />　　<br />　　with（document.forms[0]）{<br />　　<br />　　operAt.value=key；<br />　　<br />　　}<br />　　<br />　　}<br />　　<br />　　&lt;；/SCRIPT&gt;<br />　　<br />　　当我们点击提交按钮便触发该事件，修改变量的值。<br />　　<br />　　&lt;；html：submit onclick="set（'save'）；"&gt;SAVE&lt;；/html：submit&gt;<br />　　<br />　　那我们在后台execute中又如何处理相关逻辑呢？<br />　　<br />　　String operAt = myForm.getOperAt（）；<br />　　<br />　　if （operAt.equals（"create"）） { ……<br />　　<br />　　if （operAt.equals（"save"）） { ……<br />　　<br />　　很简单吧！虽然说这样做我们可以实现多个业务逻辑在同一个Action中实现，可是带来的代价便是代码的冗长，不易理解。<br />　　<br />　　下面我们就要介绍一下DispatchAction类了。它是Action的一个子类，它可以实现多个业务逻辑在同一个Action当中的实现，而上面的例子在DispatchAction中也就变成了下面的形式：<br />　　<br />　　public ActionForward create（<br />　　<br />　　ActionMapping mapping，<br />　　<br />　　ActionForm form，<br />　　<br />　　HttpServletRequest request，<br />　　<br />　　HttpServletResponse response）<br />　　<br />　　throws Exception { ……<br />　　<br />　　public ActionForward save（<br />　　<br />　　ActionMapping mapping，<br />　　<br />　　ActionForm form，<br />　　<br />　　HttpServletRequest request，<br />　　<br />　　HttpServletResponse response）<br />　　<br />　　throws Exception { ……<br />　　<br />　　每一种业务逻辑都能在DispatchAction当中找到对应的方法。那么我们如何去实现这样的调用呢？DispatchAction中对struts-config.xml的配置比一般的Action配置稍显麻烦，举例来讲：<br />　　<br />　　&lt;；action path="/telConsle"　type="com.meng.action.TelConsleDispatch"<br />　　<br />　　name="telForm" scope="request" validate="false" parameter="method"/&gt;<br />　　<br />　　我们在这里指定了parameter的值为method，而当我们请求Action的时候我们必须指定method的值来确定去我们想要调用哪个Action方法。如：<br />　　<br />　　<a href="http://localhost/" target="_blank">http://localhost</a>：8080/tsss/telConsle.do？method=save<br />　　<br />　　显然，通过显示链接指定参数值的方法可以达到我们调用方法的目的。然而我们如果不想显示调用的话我们应该怎样处理呢？还记得前面讲过的方法么？我们在页面中定义一个隐藏的变量，然后通过对变量的赋值来确定我们来确定我们将要执行的业务方法。在这里我们可不可以一样这样使用呢？<br />　　<br />　　答案是肯定的，我们当然可以通过定义一个类似于&lt;；html：hidden property="operAt"/&gt;的变量，只要对该变量赋上对应DispatchAction中的方法的值来确定我们要调用的业务方法。然而笔者比提倡用Struts标签来定义这样的隐含的变量，因为Struts标签为动态标签，它可能需要在FormBean中定义该属性的get和set方法，而在parameter中定义的值不需要在FormBean当中定义get和set方法。笔者建议用html的标准标签&lt;；input&gt;来定义该隐藏变量。因为该标签为静态标签，如果我们该用Struts标签的话可能导致页面出错。</span>
		<br />
		<span class="tpc_content">
				<br />我们在页面上有多个按钮<br />我们就用那么DispatchAction<br />控制我们想要做的事<br />我们先在页面用其所长&lt;html:hidden property="method " value=""/&gt;来隐葳变量<br />我们用javascript告诉我们要做什么事也就是用户点击了那个钮?\\<br />我想我们用这个就有一点好处就是页面有javaxcript提示出来就是有一点人性化<br />我相我们用他的子类会更好些<br />我认为我们用了javacript以后我们的页面就多了很多代码量<br />我们用lookupdispacthaction也行</span>
<img src ="http://www.blogjava.net/savage100/aggbug/64770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-08-21 13:32 <a href="http://www.blogjava.net/savage100/articles/64770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运用Jakarta Struts的七大实战心法</title><link>http://www.blogjava.net/savage100/articles/64766.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 21 Aug 2006 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/64766.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/64766.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/64766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/64766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/64766.html</trackback:ping><description><![CDATA[
		<center>
				<h4>运用Jakarta Struts的七大实战心法</h4>
		</center>
		<br />(原文 http://www.onjava.com/pub/a/onjava/2002/10/30/jakarta.html?page=1) <br />(作者Chuck Cavaness, 编译 邱文宇) <br /><br /><br />编者按：当作者 Chuck Cavaness（著有《Programming Jakarta Struts》一书）所在的网络公司决定采用Struts框架之后，Chuck曾经花费了好几个月来研究如何用它来构建公司的应用系统。本文叙述的正是作者在运用Struts过程中来之不易的若干经验和心得。如果你是个负责通过jsp和servlet开发Web应用的Java程序员，并且也正在考虑采用基于Struts的构建方法的话，那么你会在这里发现很多颇有见地同时也很有价值的信息。<br /><br />1. 只在必要的时候才考虑扩展Struts框架 <br /><br />一个好的framework有很多优点，首先，它必须能够满足用户的可预见的需求。为此 Struts为Web 应用提供了一个通用的架构，这样开发人员可以把精力集中在如何解决实际业务问题上。其次，一个好的framework还必须能够在适当的地方提供扩展接口，以便应用程序能扩展该框架来更好的适应使用者的实际需要。<br /><br />如果Struts framework在任何场合，任何项目中都能很好的满足需求，那真是太棒了。但是实际上，没有一个框架声称能做到这一点。一定会有一些特定的应用需求是框架的开发者们无法预见到的。因此，最好的办法就是提供足够的扩展接口，使得开发工程师能够调整struts来更好的符合他们的特殊要求。<br /><br />在Struts framework中有很多地方可供扩展和定制。几乎所有的配置类都能被替换为某个用户定制的版本，这只要简单的修改一下Struts的配置文件就可以做到。<br /><br />其他组件如ActionServlet和 RequestProcessor 也能用自定义的版本代替. 甚至连Struts 1.1里才有的新特性也是按照扩展的原则来设计的。例如，在异常处理机制中就允许用户定制异常处理的句柄，以便更好的对应用系统发生的错误做出响应。<br /><br />作为框架的这种可调整特性在它更适合你的应用的同时也在很大的程度上影响了项目开发的效果。首先，由于您的应用是基于一个现有的成熟的、稳定的framework如Struts，测试过程中发现的错误数量将会大大减少，同时也能缩短开发时间和减少资源的投入。因为你不再需要投入开发力量用于编写基础框架的代码了。<br /><br />然而, 实现更多的功能是要花费更大的代价的。我们必须小心避免不必要的滥用扩展性能， Struts是由核心包加上很多工具包构成的，它们已经提供了很多已经实现的功能。因此不要盲目的扩展Struts框架，要先确定能不能采用其他方法使用现有的功能来实现。 在决定编写扩展代码前务必要确认Struts的确没有实现你要的功能。否则重复的功能会导致混乱将来还得花费额外的精力清除它。<br /><br />2. 使用异常处理声明<br /><br />要定义应用程序的逻辑流程，成熟的经验是推荐在代码之外，用配置的方法来实现，而不是写死在程序代码中的。在J2EE中，这样的例子比比皆是。从实现EJB的安全性和事务性行为到描述JMS消息和目的地之间的关系，很多运行时的处理流程都是可以在程序之外定义的。<br /><br />Struts 创建者从一开始就采用这种方法，通过配置Struts的配置文件来定制应用系统运行时的各个方面。这一点在版本1.1的新特性上得到延续，包括新的异常处理功能。在Struts framework以前的版本中，开发人员不得不自己处理Struts应用中发生的错误情况。在最新的版本中，情况大大的改观了，Struts Framework提供了内置的一个称为 ExceptionHandler 的类， 用于系统缺省处理action类运行中产生的错误。这也是在上一个技巧中我们提到的framework许多可扩展接口之一。<br /><br />Struts缺省的 ExceptionHandler类会生成一个ActionError对象并保存在适当的范围（scope）对象中。这样就允许JSP页面使用错误类来提醒用户出现什么问题。如果你认为这不能满足你的需求，那么可以很方便的实现你自己的ExcepionHandler类。<br /><br />具体定制异常处理的方法和机制<br /><br />要定制自己的异常处理机制，第一步是继承org.apache.struts.action.ExceptionHandler类。这个类有2个方法可以覆盖，一个是excute()另外一个是storeException(). 在多数情况下，只需要覆盖其中的excute()方法。下面是ExceptionHandler类的excute()方法声明：<br /><br /><br /><br />正如你看到的，该方法有好几个参数，其中包括原始的异常。方法返回一个ActionForward对象，用于异常处理结束后将controller类带到请求必须转发的地方去。<br /><br />当然您可以实现任何处理，但一般而言，我们必须检查抛出的异常,并针对该类型的异常进行特定的处理。缺省的，系统的异常处理功能是创建一个出错信息，同时把请求转发到配置文件中指定的地方去。 定制异常处理的一个常见的例子是处理嵌套异常。假设该异常包含有嵌套异常，这些嵌套异常又包含了其他异常，因此我们必须覆盖原来的execute()方法，对每个异常编写出错信息。<br /><br />一旦你创建了自己的ExceptionHandler 类，就应该在Struts配置文件中的部分声明这个类，以便让Struts知道改用你自定义的异常处理取代缺省的异常处理. <br /><br />可以配置你自己的ExceptionHandler 类是用于Action Mapping特定的部分还是所有的Action对象。如果是用于Action Mapping特定的部分就在&lt;action&gt;元素中配置。如果想让这个类可用于所有的Action对象,可以在&lt;global-sections&gt; 元素中指定。例如，假设我们创建了异常处理类CustomizedExceptionHandler用于所有的Action类, &lt;global-exceptions&gt;元素定义如下所示：<br /><br /><br /><br />在&lt;exception /&gt;元素中可以对很多属性进行设置。在本文中，最重要的属性莫过于handler属性, handler属性的值就是自定义的继承了ExceptionHandler类的子类的全名。 假如该属性没有定义，Struts会采用自己的缺省值。当然，其他的属性也很重要，但如果想覆盖缺省的异常处理的话，handler无疑是最重要的属性。<br /><br />最后必须指出的一点是，你可以有不同的异常处理类来处理不同的异常。在上面的例子中，CustomizedExceptionHandler用来处理任何java.lang.Exception的子类. 其实，你也可以定义多个异常处理类，每一个专门处理不同的异常树。下面的XML片断解释了如何配置以实现这一点。<br /><br /><br /><br />在这里，一旦有异常抛出，struts framework将试图在配置文件中找到ExceptionHandler，如果没有找到，那么struts将沿着该异常的父类链一层层往上找直到发现匹配的为止。因此，我们可以定义一个层次型的异常处理关系结构，在配置文件中已经体现了这一点。<br /><br />3. 使用应用模块（Application Modules）<br /><br />Struts 1.1的一个新特性是应用模块的概念。应用模块允许将单个Struts应用划分成几个模块，每个模块有自己的Struts配置文件，JSP页面，Action等等。这个新特性是为了解决大中型的开发队伍抱怨最多的一个问题，即为了更好的支持并行开发允许多个配置文件而不是单个配置文件。<br /><br />注：在早期的beta版本中，该特性被称为子应用（sub-applications），最近的改名目的是为了更多地反映它们在逻辑上的分工。<br /><br />显然，当很多开发人员一起参加一个项目时，单个的Struts配置文件很容易引起资源冲突。应用模块允许Struts按照功能要求进行划分，许多情况已经证明这样更贴近实际。例如，假设我们要开发一个典型的商店应用程序。可以将组成部分划分成模块比如catalog（商品目录）, customer（顾客）, customer service（顾客服务）, order（订单）等。每个模块可以分布到不同的目录下，这样各部分的资源很容易定位，有助于开发和部署。图1 显示了该应用的目录结构。 <br /><br />图 1. 一个典型的商店应用程序的目录结构<br /><img src="http://www.huihoo.com/framework/struts/jakarta1.jpg" /><br /><br /><br />注：如果你无需将项目划分成多个模块，Struts框架支持一个缺省的应用模块。这就使得应用程序也可以在1.0版本下创建，具有可移植性，因为应用程序会自动作为缺省的应用模块。<br /><br />为了使用多应用模块功能，必须执行以下几个准备步骤：<br /><br />&amp;#8226; 为每个应用模块创建独立的Struts配置文件。<br /><br />&amp;#8226; 配置Web 部署描述符 Web.xml文件。<br /><br />&amp;#8226; 使用org.apache.struts.actions.SwitchAction 来实现程序在模块之间的跳转. <br /><br />创建独立的Struts配置文件<br /><br />每个Struts应用模块必须拥有自己的配置文件。允许创建自己的独立于其他模块的Action，ActionForm，异常处理甚至更多。<br /><br />继续以上面的商店应用程序为例，我们可以创建以下的配置文件：一个文件名为struts-config-catalog.xml，包含catalog（商品目录）、items(商品清单)、和其它与库存相关的功能的配置信息；另一个文件名为struts- config-order.xml, 包含对order（订单）和order tracking（订单跟踪）的设置。第三个配置文件是struts-config.xml,其中含有属于缺省的应用模块中的一般性的功能。<br /><br />配置Web部署描述符 <br /><br />在Struts的早期版本中，我们在Web.xml中指定Struts配置文件的路径。好在这点没变，有助于向后兼容。但对于多个应用模块，我们需要在Web部署描述符中增加新的配置文件的设定。<br /><br />对于缺省的应用（包括Struts的早期版本），Struts framework 在Web.xml文件中查找带有config的元素&lt;init-param&gt;，用于载入Action mapping 和其它的应用程序设定。作为例子，以下的XML片断展现一个典型的&lt;init-param&gt;元素：<br /><br /><br /><br />注：如果在现有的&lt;init-param&gt;元素中找不到"config"关键字，Struts framework将缺省地使用/WEB/struts-config.xml<br /><br />为了支持多个应用模块(Struts 1.1的新特性)，必须增加附加的&lt;init-param&gt;元素。与缺省的&lt;init-param&gt;元素不同的是，附加的&lt;init-param&gt;元素与每个应用模块对应，必须以config/xxx的形式命名，其中字符串xxx代表该模块唯一的名字。例如，在商店应用程序的例子中，&lt;init-param&gt;元素可定义如下（注意粗体字部分）：<br /><br />第一个 &lt;init-param&gt;元素对应缺省的应用模块。第二和第三个元素分别代表非缺省应用模块catalog 和 order。<br /><br />当Struts载入应用程序时，它首先载入缺省应用模块的配置文件。然后查找带有字符串config/xxx 形式的附加的初始化参数。对每个附加的配置文件也进行解析并载入内存。这一步完成后，用户就可以很随意地用config/后面的字符串也就是名字来调用相应的应用模块。<br /><br />多个应用模块之间调用Action类<br /><br />在为每个应用模块创建独立的配置文件之后，我们就有可能需要调用不同的模块中Action。为此必须使用Struts框架提供的SwitchAction类。Struts 会自动将应用模块的名字添加到URL,就如Struts 自动添加应用程序的名字加到URL一样。应用模块是对框架的一个新的扩充，有助于进行并行的团队开发。如果你的团队很小那就没必要用到这个特性，不必进行模块化。当然，就算是只有一个模块，系统还是一样的运作。<br /><br />4. 把JSP放到WEB-INF后以保护JSP源代码<br /><br />为了更好地保护你的JSP避免未经授权的访问和窥视， 一个好办法是将页面文件存放在Web应用的WEB-INF目录下。<br /><br />通常JSP开发人员会把他们的页面文件存放在Web应用相应的子目录下。一个典型的商店应用程序的目录结构如图2所示。跟catalog （商品目录）相关的JSP被保存在catalog子目录下。跟customer相关的JSP，跟订单相关的JSP等都按照这种方法存放。<br /><br /><br /><br />图 2.基于不同的功能 JSP 被放置在不同的目录下<br /><img src="http://www.huihoo.com/framework/struts/jakarta2.jpg" /><br /><br /><br />这种方法的问题是这些页面文件容易被偷看到源代码，或被直接调用。某些场合下这可能不是个大问题，可是在特定情形中却可能构成安全隐患。用户可以绕过Struts的controller直接调用JSP同样也是个问题。<br /><br />为了减少风险，可以把这些页面文件移到WEB-INF 目录下。基于Servlet的声明，WEB-INF不作为Web应用的公共文档树的一部分。因此，WEB-INF 目录下的资源不是为客户直接服务的。我们仍然可以使用WEB-INF目录下的JSP页面来提供视图给客户，客户却不能直接请求访问JSP。<br /><br />采用前面的例子，图3显示将JSP页面移到WEB-INF 目录下后的目录结构<br /><br />图 3. JSP存放在 WEB-INF 目录下更为安全<br /><img src="http://www.huihoo.com/framework/struts/jakarta3.jpg" /><br /><br />如果把这些JSP页面文件移到WEB-INF 目录下，在调用页面的时候就必须把"WEB-INF"添加到URL中。例如，在一个Struts配置文件中为一个logoff action写一个Action mapping。其中JSP的路径必须以"WEB-INF"开头。如下所示：请注意粗体部分.<br /><br />这个方法在任何情况下都不失为Struts实践中的一个好方法。是唯一要注意的技巧是你必须把JSP和一个Struts action联系起来。即使该Action只是一个很基本的很简单JSP，也总是要调用一个Action，再由它调用JSP。<br /><br />最后要说明的是，并不是所有的容器都能支持这个特性。WebLogic早期的版本不能解释Servlet声明，因此无法提供支持，据报道在新版本中已经改进了。总之使用之前先检查一下你的Servlet容器。<br /><br />5. 使用 Prebuilt Action类提升开发效率<br /><br />Struts framework带有好几个prebuilt Action类，使用它们可以大大节省开发时间。其中最有用的是org.apache.struts.actions.ForwardAction 和 org.apache.struts.actions.DispatchAction.<br /><br />使用 ForwardAction<br /><br />在应用程序中，可能会经常出现只要将Action对象转发到某个JSP的情况。在上一点中曾提到总是由Action调用JSP是个好习惯。如果我们不必在Action中执行任何业务逻辑，却又想遵循从Action访问页面的话，就可以使用ForwardAction，它可以使你免去创建许多空的Action类。运用ForwardAction的好处是不必创建自己的Action类，你需要做的仅仅是在Struts配置文件中配置一个Action mapping。<br /><br />举个例子，假定你有一个JSP文件index.jsp ，而且不能直接调用该页面，必须让程序通过一个Action类调用，那么，你可以建立以下的Action mapping来实现这一点：<br /><br />正如你看到的，当 /home 被调用时, 就会调用ForwardAction 并把请求转发到 index.jsp 页面.<br /><br />再讨论一下不通过一个Action类直接转发到某个页面的情况，必须注意我们仍然使用&lt;action&gt;元素中的forward属性来实现转发的目标。这时&lt;action&gt;元素定义如下：<br /><br />以上两种方法都可以节省你的时间，并有助于减少一个应用所需的文件数。<br /><br />使用 DispatchAction<br /><br />DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。与其它Action类仅提供单个execute()方法实现单个业务不同，DispatchAction允许你在单个Action类中编写多个与业务相关的方法。这样可以减少Action类的数量，并且把相关的业务方法集合在一起使得维护起来更容易。<br /><br />要使用DispatchAction的功能，需要自己创建一个类，通过继承抽象的DispatchAction得到。对每个要提供的业务方法必须有特定的方法signature。例如，我们想要提供一个方法来实现对购物车添加商品清单，创建了一个类ShoppingCartDispatchAction提供以下的方法：<br /><br />那么，这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单，还有clearCart()方法清除购物车等等。这时我们就可以把这些方法集合在单个Action类，不用为每个方法都提供一个Action类。<br /><br />在调用ShoppingCartDispatchAction里的某个方法时，只需在URL中提供方法名作为参数值。就是说，调用addItem()方法的 URL看起来可能类似于：<br /><br />http://myhost/storefront/action/cart?method=addItem<br /><br />其中method参数指定ShoppingCartDispatchAction中要调用的方法。参数的名称可以任意配置，这里使用的"method"只是一个例子。参数的名称可以在Struts配置文件中自行设定。<br /><br />6.使用动态ActionForm<br /><br />在Struts framework中，ActionForm对象用来包装HTML表格数据（包括请求），并返回返回动态显示给用户的数据。它们必须是完全的JavaBean，并继承.Struts　里面的ActionForm类，同时，用户可以有选择地覆盖两个缺省方法。<br /><br />该特性能节省很多时间，因为它可以协助进行自动的表现层的验证。ActionForm的唯一缺点是必须为不同的HTML表格生成多个ActionForm 类以保存数据。例如，如果有一个页面含有用户的注册信息，另一个页面则含有用户的介绍人的信息，那么就需要有两个不同的ActionForm类。这在大的应用系统中就会导致过多的ActionForm类。Struts 1.1对此做出了很好的改进，引入了动态ActionForm类概念<br /><br />通过Struts framework中的DynaActionForm类及其子类可以实现动态的ActionForm ，动态的ActionForm允许你通过Struts的配置文件完成ActionForm的全部配置；再也没有必要在应用程序中创建具体的ActionForm类。具体配置方法是：在Struts的配置文件通过增加一个&lt;form-bean&gt;元素，将type属性设定成DynaActionForm或它的某个子类的全名。下面的例子创建了一个动态的ActionForm名为logonForm，它包含两个实例变量：username 和 password.<br /><br /><br /><br />动态的ActionForm可以用于Action类和JSP，使用方法跟普通的ActionForm相同，只有一个小差别。如果使用普通的ActionForm对象则需要提供get 和 set方法取得和设置数据。以上面的例子而言，我们需要提供getUsername() 和 setUsername()方法取得和设置username变量，同样地有一对方法用于取得和设置password变量.<br /><br />这里我们使用的是DynaActionForm，它将变量保存在一个Map类对象中，所以必须使用DynaActionForm 类中的get(name) 和 set(name)方法，其中参数name是要访问的实例变量名。例如要访问DynaActionForm中username的值，可以采用类似的代码：<br /><br />String username = (String)form.get("username");<br /><br />由于值存放在一个Map对象，所以要记得对get()方法返回的Object对象做强制性类型转换。<br /><br />DynaActionForm有好几个很有用的子类。其中最重要的是DynaValidatorForm ，这个动态的ActionForm和Validator 一起利用公共的Validator包来提供自动验证。这个特性使你得以在程序代码之外指定验证规则。将两个特性结合使用对开发人员来说将非常有吸引力。<br /><br />7. 使用可视化工具<br /><br />自从Struts 1.0 分布以来，就出现了不少可视化工具用于协助创建，修改和维护Struts的配置文件。配置文件本身是基于XML格式，在大中型的开发应用中会增大变得很笨拙。为了更方便的管理这些文件，一旦文件大到你无法一目了然的时候，建议试着采用其中的一种GUI 工具协助开发。商业性的和开放源代码的工具都有不少，表1列出了可用的工具和其相关链接，从那里可以获取更多信息。<br /><br />表 1. Struts GUI 工具<br /><table cellspacing="0" cellpadding="4" border="1"><tbody><tr bgcolor="#cccccc"><th align="left">应用程序</th><th align="left">性质</th><th align="left">网址</th></tr><tr><td>Adalon</td><td>商业软件</td><td><a href="http://www.synthis.com/products/adalon">http://www.synthis.com/products/adalon</a></td></tr><tr><td>Easy Struts</td><td>开放源码</td><td><a href="http://easystruts.sourceforge.net/">http://easystruts.sourceforge.net/</a></td></tr><tr><td>Struts Console</td><td>免费</td><td><a href="http://www.jamesholmes.com/struts/console">http://www.jamesholmes.com/struts/console</a></td></tr><tr><td>JForms</td><td>商业软件</td><td><a href="http://www.solanasoft.com/">http://www.solanasoft.com/</a></td></tr><tr><td>Camino</td><td>商业软件</td><td><a href="http://www.scioworks.com/scioworks_camino.html">http://www.scioworks.com/scioworks_camino.html</a></td></tr><tr><td>Struts Builder</td><td>开放源码</td><td><a href="http://sourceforge.net/projects/rivernorth/">http://sourceforge.net/projects/rivernorth/</a></td></tr><tr><td>StrutsGUI</td><td>免费</td><td><a href="http://www.alien-factory.co.uk/struts/struts-index.html">http://www.alien-factory.co.uk/struts/struts-index.html</a></td></tr></tbody></table><img src ="http://www.blogjava.net/savage100/aggbug/64766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-08-21 13:21 <a href="http://www.blogjava.net/savage100/articles/64766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSON 入门与JavaScript提高(原创)</title><link>http://www.blogjava.net/savage100/articles/60754.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Sat, 29 Jul 2006 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/60754.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/60754.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/60754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/60754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/60754.html</trackback:ping><description><![CDATA[原文 Quick guide to somewhat advanced JavaScript tour of some OO features<br />出处 <a href="http://www.sergiopereira.com/articles/advjs.html">http://www.sergiopereira.com/articles/advjs.html</a><br /><br /><br />什么是JSON？ JavaScript Object Notation -------javascript对象符号,一个Ajax中砰然出现的新话题.其实它就是javascript中申明对象的方法。让我们来看一个示例<br /><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"><img id="Codehighlighter1_12_125_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_125_Open_Text.style.display='none'; Codehighlighter1_12_125_Closed_Image.style.display='inline'; Codehighlighter1_12_125_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_12_125_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_125_Closed_Text.style.display='none'; Codehighlighter1_12_125_Open_Image.style.display='inline'; Codehighlighter1_12_125_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> myPet </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_12_125_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"><br /></span><span id="Codehighlighter1_12_125_Open_Text"><span style="COLOR: #000000">{ <br />   color: 'black', <br />   leg_count: </span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">, <br />   communicate: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(repeatCount)</span><span id="Codehighlighter1_78_123_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"></span><span id="Codehighlighter1_78_123_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">repeatCount;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) alert('Woof</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">');}</span></span><span style="COLOR: #000000"> <br />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />这里我们就创建了一个对象引用，这个对象包含了2个属性(color,leg_count)和一个方法(communicate),<br />在myPet对象的列表中不难看出，这些属性和方法之间都是用逗号","分隔开来的。属性很好理解，而方法的创建则是由一个匿名function标记的。<br /><br />在该对象被创建以后并且以myPet变量声明了以后我们就可以这样使用了：<br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">alert('my pet is ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> myPet.color);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert('my pet has ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> myPet.legCount </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> ' legs');<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">if you are a dog, bark three times:</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">myPet.communicate(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />大家可以看到，JSON可以漂亮地应用到javascript中任何一个地方，作为function参数、返回值、服务器响应...<br /><br /><font color="#000000" size="5">你理解了吗？function同样也是一个对象。<br />---------------------------------------------------------------<br /><font size="3">或许JS程序员中有些人从来就不这么认为，但是function确实也是一个Object。下面我们可以做个实验来验证一下，将你的function给你的另一个function做为参数传递，就传一个String一样。<br /><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"><img id="Codehighlighter1_12_54_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_54_Open_Text.style.display='none'; Codehighlighter1_12_54_Closed_Image.style.display='inline'; Codehighlighter1_12_54_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_12_54_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_54_Closed_Text.style.display='none'; Codehighlighter1_12_54_Open_Image.style.display='inline'; Codehighlighter1_12_54_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> myDog </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_12_54_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"></span><span id="Codehighlighter1_12_54_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_31_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_52_Open_Text.style.display='none'; Codehighlighter1_31_52_Closed_Image.style.display='inline'; Codehighlighter1_31_52_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_31_52_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_52_Closed_Text.style.display='none'; Codehighlighter1_31_52_Open_Image.style.display='inline'; Codehighlighter1_31_52_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    bark: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_31_52_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_31_52_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert('Woof</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">');<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_70_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_148_Open_Text.style.display='none'; Codehighlighter1_70_148_Closed_Image.style.display='inline'; Codehighlighter1_70_148_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_70_148_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_148_Closed_Text.style.display='none'; Codehighlighter1_70_148_Open_Image.style.display='inline'; Codehighlighter1_70_148_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> myCat </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_70_148_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_70_148_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_89_146_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_146_Open_Text.style.display='none'; Codehighlighter1_89_146_Closed_Image.style.display='inline'; Codehighlighter1_89_146_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_89_146_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_146_Closed_Text.style.display='none'; Codehighlighter1_89_146_Open_Image.style.display='inline'; Codehighlighter1_89_146_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    meow: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_89_146_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_89_146_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert('I am a lazy cat. I will not meow </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> you.');<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img id="Codehighlighter1_186_237_Open_Image" onclick="this.style.display='none'; Codehighlighter1_186_237_Open_Text.style.display='none'; Codehighlighter1_186_237_Closed_Image.style.display='inline'; Codehighlighter1_186_237_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_186_237_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_237_Closed_Text.style.display='none'; Codehighlighter1_186_237_Open_Image.style.display='inline'; Codehighlighter1_186_237_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> annoyThePet(petFunction)</span><span id="Codehighlighter1_186_237_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_186_237_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">let's see what the pet can do</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    petFunction();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">annoy the dog:</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">annoyThePet(myDog.bark);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">annoy the cat:</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">annoyThePet(myCat.meow);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />在这里我们传递了myDog.bark和myCat.meow给annoyThePet。注意它们后面都没有带括号<font color="#ff0000">"()"</font><font color="#000000">，如果不这样做的话我们传递的将不是"方法",而是该方法的返回值（在此例中为<font color="#ff0000">"Undefine"</font>）。<br /><br />如果你想我的懒猫学狗狗叫，你可以这样做：<br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">myCat.meow </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> myDog.bark;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />myCat.meow(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">alerts 'Woof!'</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /> <br /></font><font color="#a52a2a" size="5">Arrays, items 和对象成员object members<br /><font color="#000000" size="3">请看下面2行<br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Array();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p></p></font></font></font></font> 
<p>你可以在array中添加items:<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ['first', 'second', 'third'];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> v1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> v2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> v3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p>但是你在声明时对索引不做数量限制，你将可以通过它的名字访问这个JS对象中的任何成员,就象这样，创建一个空的对象，然后就可以不停地添加了：<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"><img id="Codehighlighter1_10_11_Open_Image" onclick="this.style.display='none'; Codehighlighter1_10_11_Open_Text.style.display='none'; Codehighlighter1_10_11_Closed_Image.style.display='inline'; Codehighlighter1_10_11_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_10_11_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_11_Closed_Text.style.display='none'; Codehighlighter1_10_11_Open_Image.style.display='inline'; Codehighlighter1_10_11_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_10_11_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_10_11_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">new, empty object</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">obj['member_1'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> is the member value';<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj['flag_2'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_136_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_156_Open_Text.style.display='none'; Codehighlighter1_136_156_Closed_Image.style.display='inline'; Codehighlighter1_136_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_136_156_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_136_156_Closed_Text.style.display='none'; Codehighlighter1_136_156_Open_Image.style.display='inline'; Codehighlighter1_136_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />obj['some_function'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_136_156_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_136_156_Open_Text"><span style="COLOR: #000000">{ </span><span id="Codehighlighter1_138_155_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">/**/</span><span id="Codehighlighter1_138_155_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> do something </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span></div>等价于:<br /><br /><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"><img id="Codehighlighter1_10_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_10_114_Open_Text.style.display='none'; Codehighlighter1_10_114_Closed_Image.style.display='inline'; Codehighlighter1_10_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_10_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_114_Closed_Text.style.display='none'; Codehighlighter1_10_114_Open_Image.style.display='inline'; Codehighlighter1_10_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_10_114_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_10_114_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    member_1:'</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> is the member value',<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    flag_2: </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,<br /><img id="Codehighlighter1_92_112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_112_Open_Text.style.display='none'; Codehighlighter1_92_112_Closed_Image.style.display='inline'; Codehighlighter1_92_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_92_112_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_112_Closed_Text.style.display='none'; Codehighlighter1_92_112_Open_Image.style.display='inline'; Codehighlighter1_92_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    some_function: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_92_112_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_92_112_Open_Text"><span style="COLOR: #000000">{ </span><span id="Codehighlighter1_94_111_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">/**/</span><span id="Codehighlighter1_94_111_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> do something </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p>在JS中，对象和关系型数组（hashes）两个概念通常是没有区别，下面的这两行代码是等价的：<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj.some_function();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj['some_function']();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p><br /><font color="#a52a2a" size="5">等了这么久，我可以拥有自己的Class了么？<br /><font color="#000000" size="3">OO的强大力量来自于类Class。当然了我们的JavaScript同样也可以做到这一点，请看吧:<br /></font></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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">defining a new class called Pet</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_66_107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_107_Open_Text.style.display='none'; Codehighlighter1_66_107_Closed_Image.style.display='inline'; Codehighlighter1_66_107_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_66_107_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_107_Closed_Text.style.display='none'; Codehighlighter1_66_107_Open_Image.style.display='inline'; Codehighlighter1_66_107_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> Pet </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(petName, age)</span><span id="Codehighlighter1_66_107_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_66_107_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> petName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.age </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> age;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">let's create an object of the Pet class</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> famousDog </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Pet('Santa\'s Little Helper', </span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert('This pet is called ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> famousDog.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />但是我们如何能够将方法加到我们的Pet  Class中来呢。我们可以为我们所有的类定义一个prototype属性。prototype属性其实也是一个对象，它包含一个类所拥有的一切其他对象。甚至默认JS类（Date,String,Number）也可以拥有prototype对象，使得各种新的方法和属性能扩充其中，让基础类获得更多的特性。<br /><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"><img id="Codehighlighter1_38_113_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_113_Open_Text.style.display='none'; Codehighlighter1_38_113_Closed_Image.style.display='inline'; Codehighlighter1_38_113_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_38_113_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_113_Closed_Text.style.display='none'; Codehighlighter1_38_113_Open_Image.style.display='inline'; Codehighlighter1_38_113_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #000000">Pet.prototype.communicate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_38_113_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_38_113_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert('I </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"> not know what I should say, but my name is ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>别忘了，我们得先导入 prototype.js才行。<br />ps: 个人认为象下面创建类，可能更简洁一点。<br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> Pet </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Class.create();<br /><img id="Codehighlighter1_42_251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_251_Open_Text.style.display='none'; Codehighlighter1_42_251_Closed_Image.style.display='inline'; Codehighlighter1_42_251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_251_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_251_Closed_Text.style.display='none'; Codehighlighter1_42_251_Open_Image.style.display='inline'; Codehighlighter1_42_251_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />Pet.prototype </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_42_251_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_42_251_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">our 'constructor'</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_100_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_144_Open_Text.style.display='none'; Codehighlighter1_100_144_Closed_Image.style.display='inline'; Codehighlighter1_100_144_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_100_144_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_144_Closed_Text.style.display='none'; Codehighlighter1_100_144_Open_Image.style.display='inline'; Codehighlighter1_100_144_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">    initialize: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(petName, age)</span><span id="Codehighlighter1_100_144_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_100_144_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> petName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.age </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> age;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000">,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_173_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_173_249_Open_Text.style.display='none'; Codehighlighter1_173_249_Closed_Image.style.display='inline'; Codehighlighter1_173_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_173_249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_173_249_Closed_Text.style.display='none'; Codehighlighter1_173_249_Open_Image.style.display='inline'; Codehighlighter1_173_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    communicate: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_173_249_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_173_249_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert('I </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"> not know what I should say, but my name is ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><font color="#a52a2a" size="5">将方法做为参数<br /><font color="#000000" size="3">如果你没有使用过支持closure的语言，象Ruby,C#，你会发现象这样的语法真是太有趣了:<br /><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> myArray </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ['first', 'second', 'third'];<br /><img id="Codehighlighter1_79_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_143_Open_Text.style.display='none'; Codehighlighter1_79_143_Closed_Image.style.display='inline'; Codehighlighter1_79_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_79_143_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_143_Closed_Text.style.display='none'; Codehighlighter1_79_143_Open_Image.style.display='inline'; Codehighlighter1_79_143_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />myArray.each( </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(item, index)</span><span id="Codehighlighter1_79_143_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_79_143_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert('The item </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> the position #' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> index </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> ' is:' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> item);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />未完带续.........</font></font><img src ="http://www.blogjava.net/savage100/aggbug/60754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-29 15:13 <a href="http://www.blogjava.net/savage100/articles/60754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sturts中的常见异常</title><link>http://www.blogjava.net/savage100/articles/58605.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 17 Jul 2006 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58605.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58605.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58605.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58605.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left">
				<span lang="EN-US">Sturts</span>
				<span 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; TEXT-ALIGN: left" align="left">
				<span lang="EN-US">1 </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常</span>
				<span lang="EN-US"> javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">/Login</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是你的</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">名字）</span>
				<span lang="EN-US"> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能原因</span>
				<span lang="EN-US">:action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有再</span>
				<span lang="EN-US">struts-config.xml </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中定义，或没有找到匹配的</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，例如在</span>
				<span lang="EN-US">JSP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中使用</span>
				<span lang="EN-US"> &lt;HTML:FORM&amp;NBSP;ACTION="LOGIN.DO".</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将表单提交给</span>
				<span lang="EN-US">LOGIN.DO<br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处理</span>
				<span lang="EN-US">:</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果出现上述异常，请查看</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的定义部分，有时可能是打错了字符或者是某些不符合规则，可以使用</span>
				<span lang="EN-US">struts console</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具来检查。</span>
				<span lang="EN-US"> <br /><br />2 </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常</span>
				<span lang="EN-US"> org.apache.jasper.JasperException: Cannot retrieve definition for form bean null <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能原因</span>
				<span lang="EN-US">:  </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个异常是因为</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span lang="EN-US">mapping</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有找到</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">期望的</span>
				<span lang="EN-US">form bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。大部分的情况可能是因为在</span>
				<span lang="EN-US">form-bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中设置的</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性和</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中设置的</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性不匹配所致。换句话说，</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">form</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都应该各自有一个</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性，并且要精确匹配，包括大小写。这个错误当没有</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性和</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关联时也会发生，如果没有在</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中指定</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性，那么就没有</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性和</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关联。当然当</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">制作某些控制时，譬如根据参数值跳转到相应的</span>
				<span lang="EN-US">jsp</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面，而不是处理表单数据，这是就不用</span>
				<span lang="EN-US">name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性，这也是</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用方法之一。</span>
				<span lang="EN-US">
						<br />
						<br />3 </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常</span>
				<span lang="EN-US"> No action instance for path /xxxx could be created <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能原因</span>
				<span lang="EN-US"> <br /> </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">特别提示：因为有很多中情况会导致这个错误的发生，所以推荐大家调高你的</span>
				<span lang="EN-US">web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器的日志</span>
				<span lang="EN-US">/</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调试级别，这样可以从更多的信息中看到潜在的、在试图创建</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类时发生的错误，这个</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类你已经在</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中设置了关联（即添加了标签）。</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中通过</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签的</span>
				<span lang="EN-US">class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性指定的</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类不能被找到有很多种原因，例如：</span>
				<span lang="EN-US"> <br /><br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定位编译后的</span>
				<span lang="EN-US">.class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件失败。</span>
				<span lang="EN-US">Failure to place compiled .class file for the action in the classpath (</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发中，</span>
				<span lang="EN-US">class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的的位置在</span>
				<span lang="EN-US">r WEB-INF/classes</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，所以你的</span>
				<span lang="EN-US">action class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须要在这个目录下。例如你的</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类位于</span>
				<span lang="EN-US">WEB-INF/classes/action/Login.class,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么在</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中设置</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的属性</span>
				<span lang="EN-US">type</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时就是</span>
				<span lang="EN-US">action.Login). <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">拼写错误，这个也时有发生，并且不易找到，特别注意第一个字母的大小写和包的名称。</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中指定的</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类没有继承自</span>
				<span lang="EN-US">Stuts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">Action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类，或者你自定义的</span>
				<span lang="EN-US">Action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类没有继承自</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的</span>
				<span lang="EN-US">Action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类。</span>
				<span lang="EN-US"> <br /><br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你的</span>
				<span lang="EN-US">action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类必须继承自</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的</span>
				<span lang="EN-US">Action</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类。</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你的</span>
				<span lang="EN-US">classpath</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的问题。例如</span>
				<span lang="EN-US">web server</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有发现你的资源文件，资源文件必须在</span>
				<span lang="EN-US">WEB-INF/classes/</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下。</span>
				<span lang="EN-US"> <br /> <br />4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异</span>
				<span lang="EN-US">
						<span style="mso-spacerun: yes">                                                                                                         </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常</span>
				<span lang="EN-US"> javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能原因</span>
				<span lang="EN-US"> <br /> </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有位</span>
				<span lang="EN-US">form bean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的某个变量定义</span>
				<span lang="EN-US">getter </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个错误主要发生在表单提交的</span>
				<span lang="EN-US">FormBean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，用</span>
				<span lang="EN-US">struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标记</span>
				<span lang="EN-US">&lt;HTML:TEXT&amp;NBSP;PROPERTY=”USERNAME”&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，在</span>
				<span lang="EN-US">FormBean</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中必须有一个</span>
				<span lang="EN-US">getUsername()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法。注意字母“</span>
				<span lang="EN-US">U</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”。</span>
				<span lang="EN-US"> <br />5 Exception  javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能原因</span>
				<span lang="EN-US"> <br /> </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不是标识</span>
				<span lang="EN-US">Struts actionServlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的标记就是映射</span>
				<span lang="EN-US">.do</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">扩展名的标记或者两者都没有在</span>
				<span lang="EN-US">web.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中声明。</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号</span>
				<span lang="EN-US">/&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。最好使用</span>
				<span lang="EN-US">struts console</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具检查一下。</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外，</span>
				<span lang="EN-US">load-on-startup</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须在</span>
				<span lang="EN-US">web.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中声明，这要么是一个空标记，要么指定一个数值，这个数值用来表</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行的优先级，数值越大优先级越低。</span>
				<span lang="EN-US"> <br /> <br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还有一个和使用</span>
				<span lang="EN-US">load-on-startup</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有关的是使用</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译</span>
				<span lang="EN-US">JSP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件时也可能导致这个异常。</span>
				<span lang="EN-US"> <br /><br />6 Exception <br /> javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope <br /> Probable Causes <br /> </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">试图在</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">form</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标记外使用</span>
				<span lang="EN-US">form</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的子元素。这常常发生在你在后面使用</span>
				<span lang="EN-US">Struts</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">html</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标记。</span>
				<span lang="EN-US">
						<br />
						<br />
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外要注意可能你不经意使用的无主体的标记，如</span>
				<span lang="EN-US">&lt;HTML:FORM&amp;NBSP;…&amp;NBSP; /&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这样</span>
				<span lang="EN-US">web </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器解析时就当作一个无主体的标记，随后使用的所有标记都被认为是在这个标记之外的，如又使用了</span>
				<span lang="EN-US">&lt;HTML:TEXT&amp;NBSP;PROPERTY=”ID”&gt;<br /><br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还有就是在使用</span>
				<span lang="EN-US">taglib</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">引入</span>
				<span lang="EN-US">HTML</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标记库时，你使用的</span>
				<span lang="EN-US">prefix</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的值不是</span>
				<span lang="EN-US">html</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.4pt; TEXT-INDENT: -35.4pt; mso-char-indent-count: -3.37">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.4pt; TEXT-INDENT: -35.4pt; mso-char-indent-count: -3.37">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/savage100/aggbug/58605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-17 17:02 <a href="http://www.blogjava.net/savage100/articles/58605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 常见异常</title><link>http://www.blogjava.net/savage100/articles/58602.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 17 Jul 2006 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58602.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58602.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58602.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd">
				<span lang="EN-US" style="COLOR: black; LETTER-SPACING: 0.3pt">Hibernate</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.3pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常见错误</span>
				<span lang="EN-US" style="COLOR: black; LETTER-SPACING: 0.3pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">常见错误：<span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">1</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence. <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明你的<span lang="EN-US"><a href="http://dev.21tx.com/web/xml/" target="_blank">XML</a></span>配置文件有不规范的字符，检查下。 <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">2</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明你的<span lang="EN-US">hibernate</span>的<span lang="EN-US">XML</span>配置文件有错 <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">3</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明<span lang="EN-US">hibernate</span>的<span lang="EN-US">XML</span>配置文件没有找到，你应该把<span lang="EN-US">XML</span>文件放在与你的类文件同个目录下<span lang="EN-US">,</span>本文中是放在<span lang="EN-US">hibernate\classes\hibernate\</span>目录下，也就是跟<span lang="EN-US">Hello_Bean.class</span>类文件一起。 <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">4</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明你的<span lang="EN-US">xml</span>文件里设置的字段名<span lang="EN-US">name</span>的值与<span lang="EN-US">Hello_Bean.<a href="http://dev.21tx.com/java/" target="_blank">Java</a></span>类里的<span lang="EN-US">getXXX</span>或<span lang="EN-US">setXXX</span>方法不一致。<span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">5</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.HibernateException: <a href="http://dev.21tx.com/java/adv/jdbc/" target="_blank">JDBC</a> Driver class not found: org.gjt.mm.mysql.Driver <br /><o:p></o:p></span></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 42pt; mso-para-margin-left: 1.71gd; mso-char-indent-count: 4.0">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<br />6.The database returned no natively generated identity value</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-spacerun: yes">     </span>
				</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">主键没有添加增量</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/savage100/aggbug/58602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-17 16:59 <a href="http://www.blogjava.net/savage100/articles/58602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用站点</title><link>http://www.blogjava.net/savage100/articles/56979.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Thu, 06 Jul 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/56979.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/56979.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/56979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/56979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/56979.html</trackback:ping><description><![CDATA[
		<font color="#7fffd4">
				<font size="6">
						<font color="#a52a2a">Ajax</font>
						<br />
				</font>
		</font>dojo         <a href="http://download.dojotoolkit.org/">http://download.dojotoolkit.org/</a><br />dwr          <a href="http://getahead.ltd.uk/dwr/download"><font color="#bbbb99" size="2">http://getahead.ltd.uk/dwr/download</font></a><br />prototype  <a href="http://prototype.conio.net/">http://prototype.conio.net/</a><br />prototype 在线学习指南   <a href="http://www.sergiopereira.com/articles/prototype.js.html">http://www.sergiopereira.com/articles/prototype.js.html</a><br />prototype 1.4中文手册(hot!!!)  <a href="http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html">http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html</a><br /><font color="#000000">wiki.script.aculo.us API <br /></font><a href="http://wiki.script.aculo.us/scriptaculous/show/Prototype">http://wiki.script.aculo.us/scriptaculous/show/Prototype</a><br />某prototype 笔记   <a href="https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html">https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html</a>  <br /><br />json  指南: Quick guide to somewhat advanced JavaScript  tour of some OO features<br /><a href="http://www.sergiopereira.com/articles/advjs.html">http://www.sergiopereira.com/articles/advjs.html</a><br />《征服Ajax web2.0详解》作者的blog<br /><a href="http://www.x2blog.cn/supNate/#sid.0/page.1/">http://www.x2blog.cn/supNate/#sid.0/page.1/</a><br /><font color="#a52a2a" size="5">Eclipse</font><br />eclipse     <a href="http://www.eclipse.org/">http://www.eclipse.org</a><br />csdn文章中心        <a href="http://kb.csdn.net/java/Articles/200606/7105353e-2f75-4398-9282-119b58937764.html">http://kb.csdn.net/java/Articles/200606/7105353e-2f75-4398-9282-119b58937764.html</a><br />JSEclipse 插件下载地址       <a href="http://www.apple.com/downloads/macosx/development_tools/jseclipse.html">http://www.apple.com/downloads/macosx/development_tools/jseclipse.html</a><br />JSEclipse 插件官方地址       <a href="http://www.interaktonline.com/">http://www.interaktonline.com/</a><br />视频教程                              <a href="http://www.interaktonline.com/Products/Eclipse/JSEclipse/Flash-Demos/">http://www.interaktonline.com/Products/Eclipse/JSEclipse/Flash-Demos/</a><br />java视线                 <a href="http://www.hibernate.org.cn/">http://www.hibernate.org.cn</a><br />曹晓刚满江红        <a href="http://www.redsaga.com/mambo/content/view/42/2/">http://www.redsaga.com/mambo/content/view/42/2/</a><br /><br />在线javascript手册   <a href="http://www.8esky.com/handbook/JavaScript/index.html">http://www.8esky.com/handbook/JavaScript/index.html</a><br />Mysql 手册         <a href="http://www.uplinux.com/download/doc/mysql/mysql4/index.html">http://www.uplinux.com/download/doc/mysql/mysql4/index.html</a><br />CVSclient入门     <a href="http://www.redsaga.com/CVS_newbie_win32/">http://www.redsaga.com/CVS_newbie_win32/</a><br />一个不错的Ajax Blog      <a href="https://blueprints.dev.java.net/ajax-faq-zh.html#ajax-libraries">https://blueprints.dev.java.net/ajax-faq-zh.html#ajax-libraries</a><br />框架视频教程   <a href="/oksonic/archive/2005/11/06/18370.aspx">http://www.blogjava.net/oksonic/archive/2005/11/06/18370.aspx</a><br /><font color="#a52a2a" size="5"><br />Java开源</font><br /><br />开源站点 <a href="http://sourceforge.net/new/">http://sourceforge.net/new/</a><br />一个国内的java开源站点 HOT  <a href="http://www.ideagrace.com/sf/bloggers/">http://www.ideagrace.com/sf/bloggers/</a> <br />java自由人   <a href="http://www.javayou.com/">http://www.javayou.com/</a><br />开发工具下载站点  <a href="http://www.topdownloads.org/software/view.php?id=75020">http://www.topdownloads.org/software/view.php?id=75020</a><img src ="http://www.blogjava.net/savage100/aggbug/56979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-06 16:55 <a href="http://www.blogjava.net/savage100/articles/56979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>