﻿<?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-资料整理-文章分类-Web</title><link>http://www.blogjava.net/savage100/category/12824.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 15:36:38 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 15:36:38 GMT</pubDate><ttl>60</ttl><item><title>Session &amp; Cookies 详解</title><link>http://www.blogjava.net/savage100/articles/67986.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Wed, 06 Sep 2006 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/67986.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/67986.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/67986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/67986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/67986.html</trackback:ping><description><![CDATA[
		<div class="title">[转贴]关于session，你了解多少？</div>
		<div class="about"> </div>
		<div class="content">【摘要】<br /><span class="content">摘要：虽然session机制在web应用程序中被采用已经很长时间了，但是仍然有很多人不清楚session机制的本质，以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。<br /></span><br />【全文】<br />目录：<br />一、术语session<br />二、HTTP协议与状态保持<br />三、理解cookie机制<br />四、理解session机制<br />五、理解javax.servlet.http.HttpSession<br />六、HttpSession常见问题<br />七、跨应用程序的session共享<br />八、总结<br />参考文档<br /><br />一、术语session<br />在我的经验里，session这个词被滥用的程度大概仅次于transaction，更加有趣的是transaction与session在某些语境下的含义是相同的。<br /><br />session，中文经常翻译为会话，其本来的含义是指有始有终的一系列动作/消息，比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。有时候我们可以看到这样的话“在一个浏览器会话期间，...”，这里的会话一词用的就是其本义，是指从一个浏览器窗口打开到关闭这个期间 ①。最混乱的是“用户（客户端）在一次会话期间”这样一句话，它可能指用户的一系列动作（一般情况下是同某个具体目的相关的一系列动作，比如从登录到选购商品到结账登出这样一个网上购物的过程，有时候也被称为一个transaction），然而有时候也可能仅仅是指一次连接，也有可能是指含义①，其中的差别只能靠上下文来推断②。<br /><br />然而当session一词与网络协议相关联时，它又往往隐含了“面向连接”和/或“保持状态”这样两个含义， “面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道，比如打电话，直到对方接了电话通信才能开始，与此相对的是写信，在你把信发出去的时候你并不能确认对方的地址是否正确，通信渠道不一定能建立，但对发信人来说，通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来，使得消息之间可以互相依赖，比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者 “一个POP3 session”③。<br /><br />而到了web服务器蓬勃发展的时代，session在web开发语境下的语义又有了新的扩展，它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构，如“把xxx保存在session 里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持，所以在某种特定语言的语境下，session也被用来指代该语言的解决方案，比如经常把Java里提供的javax.servlet.http.HttpSession简称为session⑥。<br /><br />鉴于这种混乱已不可改变，本文中session一词的运用也会根据上下文有不同的含义，请大家注意分辨。<br />在本文中，使用中文“浏览器会话期间”来表达含义①，使用“session机制”来表达含义④，使用“session”表达含义⑤，使用具体的“HttpSession”来表达含义⑥<br /><br />二、HTTP协议与状态保持<br />HTTP 协议本身是无状态的，这与HTTP协议本来的目的是相符的，客户端只需要简单的向服务器请求下载某些文件，无论是客户端还是服务器都没有必要纪录彼此过去的行为，每一次请求之间都是独立的，好比一个顾客和一个自动售货机或者一个普通的（非会员制）大卖场之间的关系一样。<br /><br />然而聪明（或者贪心？）的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用，就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为，另一方面在服务器端则出现了CGI规范以响应客户端的动态请求，作为传输载体的HTTP协议也添加了文件上载、 cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。<br /><br />让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠，然而一次性消费5杯咖啡的机会微乎其微，这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案：<br />1、该店的店员很厉害，能记住每位顾客的消费数量，只要顾客一走进咖啡店，店员就知道该怎么对待了。这种做法就是协议本身支持状态。<br />2、发给顾客一张卡片，上面记录着消费的数量，一般还有个有效期限。每次消费时，如果顾客出示这张卡片，则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。<br />3、发给顾客一张会员卡，除了卡号之外什么信息也不纪录，每次消费时，如果顾客出示该卡片，则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。<br /><br />由于HTTP协议是无状态的，而出于种种考虑也不希望使之成为有状态的，因此，后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案，而session机制采用的是在服务器端保持状态的方案。同时我们也看到，由于采用服务器端保持状态的方案在客户端也需要保存一个标识，所以session机制可能需要借助于cookie机制来达到保存标识的目的，但实际上它还有其他选择。<br /><br />三、理解cookie机制 <br />cookie机制的基本原理就如上面的例子一样简单，但是还有几个问题需要解决：“会员卡”如何分发；“会员卡”的内容；以及客户如何使用“会员卡”。<br /><br />正统的cookie分发是通过扩展HTTP协议来实现的，服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。<br /><br />而cookie 的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie，如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置，则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示，如果某家分店还发行了自己的会员卡，那么进这家店的时候除了要出示麦当劳的会员卡，还要出示这家店的会员卡。<br /><br />cookie的内容主要包括：名字，值，过期时间，路径和域。<br />其中域可以指定某一个域比如.google.com，相当于总店招牌，比如宝洁公司，也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com，可以用飘柔来做比。<br />路径就是跟在域名后面的URL路径，比如/或者/foo等等，可以用某飘柔专柜做比。<br />路径与域合在一起就构成了cookie的作用范围。<br />如果不设置过期时间，则表示这个cookie的生命期为浏览器会话期间，只要关闭浏览器窗口，cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里，当然这种行为并不是规范规定的。如果设置了过期时间，浏览器就会把cookie保存到硬盘上，关闭后再次打开浏览器，这些cookie仍然有效直到超过设定的过期时间。<br /><br />存储在硬盘上的cookie 可以在不同的浏览器进程间共享，比如两个IE窗口。而对于保存在内存里的cookie，不同的浏览器有不同的处理方式。对于IE，在一个打开的窗口上按 Ctrl-N（或者从文件菜单）打开的窗口可以与原窗口共享，而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie；对于 Mozilla Firefox0.8，所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。<br /><br />下面就是一个goolge设置cookie的响应头的例子<br />HTTP/1.1 302 Found<br />Location: <a href="http://www.google.com/intl/zh-CN/"></a><a href="http://www.google.com/intl/zh-CN/" target="_blank"><font color="#223355">http://www.google.com/intl/zh-CN/</font></a><br />Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com<br />Content-Type: text/html<br /><br /><br /><br /><br />这是使用HTTPLook这个HTTP Sniffer软件来俘获的HTTP通讯纪录的一部分<br /><br /><br /><br /><br />浏览器在再次访问goolge的资源时自动向外发送cookie<br /><br /><br /><br /><br />使用Firefox可以很容易的观察现有的cookie的值<br />使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。<br /><br /><br /><br /><br />IE也可以设置在接受cookie前询问<br /><br /><br /><br /><br />这是一个询问接受cookie的对话框。<br /><br />四、理解session机制<br />session机制是一种服务器端的机制，服务器使用一种类似于散列表的结构（也可能就是使用散列表）来保存信息。<br /><br />当程序需要为某个客户端的请求创建一个session的时候，服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id，如果已包含一个session id则说明以前已经为此客户端创建过session，服务器就按照session id把这个 session检索出来使用（如果检索不到，可能会新建一个），如果客户端请求不包含session id，则为此客户端创建一个session并且生成一个与此session相关联的session id，session id的值应该是一个既不会重复，又不容易被找到规律以仿造的字符串，这个 session id将被在本次响应中返回给客户端保存。<br /><br />保存这个session id的方式可以采用cookie，这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID，而。比如weblogic对于web应用程序生成的cookie，JSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764，它的名字就是 JSESSIONID。<br /><br />由于cookie可以被人为的禁止，必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写，就是把session id直接附加在URL路径的后面，附加方式也有两种，一种是作为URL路径的附加信息，表现形式为<a href="http://...../xxx;jsessionid="></a><a href="http://...../xxx;jsessionid=" target="_blank"><font color="#223355">http://...../xxx;jsessionid=</font></a> ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764<br />另一种是作为查询字符串附加在URL后面，表现形式为<a href="http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"></a><a href="http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764" target="_blank"><font color="#223355">http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764</font></a><br />这两种方式对于用户来说是没有区别的，只是服务器在解析的时候处理的方式不同，采用第一种方式也有利于把session id的信息和正常程序参数区分开来。<br />为了在整个交互过程中始终保持状态，就必须在每个客户端可能请求的路径后面都包含这个session id。<br /><br />另一种技术叫做表单隐藏字段。就是服务器会自动修改表单，添加一个隐藏字段，以便在表单提交时能够把session id传递回服务器。比如下面的表单<br />&lt;form name="testform" action="/xxx"&gt;<br />&lt;input type="text"&gt;<br />&lt;/form&gt;<br />在被传递给客户端之前将被改写成<br />&lt;form name="testform" action="/xxx"&gt;<br />&lt;input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"&gt;<br />&lt;input type="text"&gt;<br />&lt;/form&gt;<br />这种技术现在已较少应用，笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。<br />实际上这种技术可以简单的用对action应用URL重写来代替。<br /><br />在谈论session机制的时候，常常听到这样一种误解“只要关闭浏览器，session就消失了”。其实可以想象一下会员卡的例子，除非顾客主动对店家提出销卡，否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的，除非程序通知服务器删除一个session，否则服务器会一直保留，程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭，因此服务器根本不会有机会知道浏览器已经关闭，之所以会有这种错觉，是大部分session机制都使用会话cookie来保存session id，而关闭浏览器后这个 session id就消失了，再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上，或者使用某种手段改写浏览器发出的HTTP请求头，把原来的session id发送给服务器，则再次打开浏览器仍然能够找到原来的session。<br /><br />恰恰是由于关闭浏览器不会导致session被删除，迫使服务器为seesion设置了一个失效时间，当距离客户端上一次使用session的时间超过这个失效时间时，服务器就可以认为客户端已经停止了活动，才会把session删除以节省存储空间。<br /><br />五、理解javax.servlet.http.HttpSession<br />HttpSession是Java平台对session机制的实现规范，因为它仅仅是个接口，具体到每个web应用服务器的提供商，除了对规范支持之外，仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作为例子来演示。<br /><br />首先，Weblogic Server提供了一系列的参数来控制它的HttpSession的实现，包括使用cookie的开关选项，使用URL重写的开关选项，session持久化的设置，session失效时间的设置，以及针对cookie的各种设置，比如设置cookie的名字、路径、域， cookie的生存时间等。<br /><br />一般情况下，session都是存储在内存里，当服务器进程被停止或者重启的时候，内存里的session也会被清空，如果设置了session的持久化特性，服务器就会把session保存到硬盘上，当服务器进程重新启动或这些信息将能够被再次使用， Weblogic Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制。<br /><br />复制严格说来不算持久化保存，因为session实际上还是保存在内存里，不过同样的信息被复制到各个cluster内的服务器进程中，这样即使某个服务器进程停止工作也仍然可以从其他进程中取得session。<br /><br />cookie生存时间的设置则会影响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解。<br /><br />cookie的路径对于web应用程序来说是一个非常重要的选项，Weblogic Server对这个选项的默认处理方式使得它与其他服务器有明显的区别。后面我们会专题讨论。<br /><br />关于session的设置参考[5] <a href="http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869"></a><a href="http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869" target="_blank"><font color="#223355">http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869</font></a><br /><br />六、HttpSession常见问题<br />（在本小节中session的含义为⑤和⑥的混合）<br /><br /><br />1、session在何时被创建<br />一个常见的误解是以为session在有客户端访问时就被创建，然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建，注意如果JSP没有显示的使用 &lt;% @page session="false"%&gt; 关闭session，则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。<br /><br />由于session会消耗内存资源，因此，如果不打算使用session，应该在所有的JSP中关闭它。<br /><br />2、session何时被删除<br />综合前面的讨论，session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止（非持久session）<br /><br />3、如何做到在浏览器关闭时删除session<br />严格的讲，做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作，然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。<br /><br />4、有个HttpSessionListener是怎么回事<br />你可以创建这样的listener去监控session的创建和销毁事件，使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和销毁动作触发listener，而不是相反。类似的与HttpSession有关的listener还有 HttpSessionBindingListener，HttpSessionActivationListener和 HttpSessionAttributeListener。<br /><br />5、存放在session中的对象必须是可序列化的吗<br />不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Server的session中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果 session中有不可序列化的对象，在session销毁时会有一个Exception，很奇怪。<br /><br />6、如何才能正确的应付客户端禁止cookie的可能性<br />对所有的URL使用URL重写，包括超链接，form的action，和重定向的URL，具体做法参见[6]<br /><a href="http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770"></a><a href="http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770" target="_blank"><font color="#223355">http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770</font></a><br /><br />7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session<br />参见第三小节对cookie的讨论，对session来说是只认id不认人，因此不同的浏览器，不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。<br /><br />8、如何防止用户打开两个浏览器窗口操作导致的session混乱<br />这个问题与防止表单多次提交是类似的，可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端，同时保存在session里，客户端提交表单时必须把这个id也返回服务器，程序首先比较返回的id与保存在session里的值是否一致，如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript window.open打开的窗口，一般不设置这个id，或者使用单独的id，以防主窗口无法操作，建议不要再window.open打开的窗口里做修改操作，这样就可以不用设置。<br /><br />9、为什么在Weblogic Server中改变session的值后要重新调用一次session.setValue<br />做这个动作主要是为了在集群环境中提示Weblogic Server session中的值发生了改变，需要向其他服务器进程复制新的session值。<br /><br />10、为什么session不见了<br />排除session正常失效的因素之外，服务器本身的可能性应该是微乎其微的，虽然笔者在iPlanet6SP1加若干补丁的Solaris版本上倒也遇到过；浏览器插件的可能性次之，笔者也遇到过3721插件造成的问题；理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。<br />出现这一问题的大部分原因都是程序的错误，最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。<br /><br />七、跨应用程序的session共享<br /><br />常常有这样的情况，一个大项目被分割成若干小项目开发，为了能够互不干扰，要求每个小项目作为一个单独的web应用程序开发，可是到了最后突然发现某几个小项目之间需要共享一些信息，或者想使用session来实现SSO(single sign on)，在session中保存login的用户信息，最自然的要求是应用程序间能够访问彼此的session。<br /><br />然而按照Servlet规范，session的作用范围应该仅仅限于当前应用程序下，不同的应用程序之间是不能够互相访问对方的session的。各个应用服务器从实际效果上都遵守了这一规范，但是实现的细节却可能各有不同，因此解决跨应用程序session共享的方法也各不相同。<br /><br />首先来看一下Tomcat是如何实现web应用程序之间session的隔离的，从 Tomcat设置的cookie路径来看，它对不同的应用程序设置的cookie路径是不同的，这样不同的应用程序所用的session id是不同的，因此即使在同一个浏览器窗口里访问不同的应用程序，发送给服务器的session id也可以是不同的。<br /><br /><br />  <br /><br />根据这个特性，我们可以推测Tomcat中session的内存结构大致如下。<br /><br /><br /><br /><br />笔者以前用过的iPlanet也采用的是同样的方式，估计SunONE与iPlanet之间不会有太大的差别。对于这种方式的服务器，解决的思路很简单，实际实行起来也不难。要么让所有的应用程序共享一个session id，要么让应用程序能够获得其他应用程序的session id。<br /><br />iPlanet中有一种很简单的方法来实现共享一个session id，那就是把各个应用程序的cookie路径都设为/（实际上应该是/NASApp，对于应用程序来讲它的作用相当于根）。<br />&lt;session-info&gt;<br />&lt;path&gt;/NASApp&lt;/path&gt;<br />&lt;/session-info&gt;<br /><br />需要注意的是，操作共享的session应该遵循一些编程约定，比如在session attribute名字的前面加上应用程序的前缀，使得 setAttribute("name", "neo")变成setAttribute("app1.name", "neo")，以防止命名空间冲突，导致互相覆盖。<br /><br /><br />在Tomcat中则没有这么方便的选择。在Tomcat版本3上，我们还可以有一些手段来共享session。对于版本4以上的Tomcat，目前笔者尚未发现简单的办法。只能借助于第三方的力量，比如使用文件、数据库、JMS或者客户端cookie，URL参数或者隐藏字段等手段。<br /><br />我们再看一下Weblogic Server是如何处理session的。<br /><br /><br />  <br /><br />从截屏画面上可以看到Weblogic Server对所有的应用程序设置的cookie的路径都是/，这是不是意味着在Weblogic Server中默认的就可以共享session了呢？然而一个小实验即可证明即使不同的应用程序使用的是同一个session，各个应用程序仍然只能访问自己所设置的那些属性。这说明Weblogic Server中的session的内存结构可能如下<br /><br /><br /><br /><br />对于这样一种结构，在 session机制本身上来解决session共享的问题应该是不可能的了。除了借助于第三方的力量，比如使用文件、数据库、JMS或者客户端 cookie，URL参数或者隐藏字段等手段，还有一种较为方便的做法，就是把一个应用程序的session放到ServletContext中，这样另外一个应用程序就可以从ServletContext中取得前一个应用程序的引用。示例代码如下，<br /><br />应用程序A<br />context.setAttribute("appA", session); <br /><br />应用程序B<br />contextA = context.getContext("/appA");<br />HttpSession sessionA = (HttpSession)contextA.getAttribute("appA"); <br /><br />值得注意的是这种用法不可移植，因为根据ServletContext的JavaDoc，应用服务器可以处于安全的原因对于context.getContext("/appA");返回空值，以上做法在Weblogic Server 8.1中通过。<br /><br />那么Weblogic Server为什么要把所有的应用程序的cookie路径都设为/呢？原来是为了SSO，凡是共享这个session的应用程序都可以共享认证的信息。一个简单的实验就可以证明这一点，修改首先登录的那个应用程序的描述符weblogic.xml，把cookie路径修改为/appA 访问另外一个应用程序会重新要求登录，即使是反过来，先访问cookie路径为/的应用程序，再访问修改过路径的这个，虽然不再提示登录，但是登录的用户信息也会丢失。注意做这个实验时认证方式应该使用FORM，因为浏览器和web服务器对basic认证方式有其他的处理方式，第二次请求的认证不是通过 session来实现的。具体请参看[7] secion 14.8 Authorization，你可以修改所附的示例程序来做这些试验。<br /><br />八、总结<br />session机制本身并不复杂，然而其实现和配置上的灵活性却使得具体情况复杂多变。这也要求我们不能把仅仅某一次的经验或者某一个浏览器，服务器的经验当作普遍适用的经验，而是始终需要具体情况具体分析。<br />摘要：虽然session机制在web应用程序中被采用已经很长时间了，但是仍然有很多人不清楚session机制的本质，以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。</div>
<img src ="http://www.blogjava.net/savage100/aggbug/67986.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-06 11:33 <a href="http://www.blogjava.net/savage100/articles/67986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>SQL注入技术和跨站脚本攻击的检测 </title><link>http://www.blogjava.net/savage100/articles/58740.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Tue, 18 Jul 2006 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58740.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58740.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58740.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SQL																																注入技术和跨站脚本攻击的检测																																																Posted on 2005-11-10 09:02 loop				阅读				(136) 评论(1)  编辑 收藏收藏至365Key				所...&nbsp;&nbsp;<a href='http://www.blogjava.net/savage100/articles/58740.html'>阅读全文</a><img src ="http://www.blogjava.net/savage100/aggbug/58740.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-18 14:02 <a href="http://www.blogjava.net/savage100/articles/58740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发系统中的常见问题总结</title><link>http://www.blogjava.net/savage100/articles/58737.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Tue, 18 Jul 2006 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58737.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58737.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58737.html</trackback:ping><description><![CDATA[
		<p>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">系统越做越大，问题越来越多，有些彻底解决了，有些凑合解决了，有些还没有办法，现在把碰到的主要问题列出来，给大家前车之覆：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
						<br />1 </span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">跨浏览器布局的问题：</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
				</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">由于浏览器之间的微小差距，在布局复杂的页面时将会碰到麻烦</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
						<br />2 </span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">日期控件</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
				</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如何实现跨浏览器的日期控件，如何设定缺省值，如何实现大范围的日期直接定位？如何自适应多区域格式问题？</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
						<br />3</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、分辨率</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
				</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如何支持常见分辨率，例如</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">800*600 </span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">1024*768</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">1280*1024</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">？表格和层如何自适应？</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
						<br />4</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、防止</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">SQL</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">注入式攻击</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
						<br />5</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">．防止脚本攻击。</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
				</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">有时候需要在页面允许部分</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">html</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">或</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">javascript</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">代码</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">, </span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如显示多行文本。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
						<br />6</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、用户非授权页面访问</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<br />
				</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如何实现每个页面的安全验证，如何防止用户通过直接拷贝具体页面地址等方式，访问系统；</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
				</span>
				<span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">包<br /><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">括没有链接的某些页面和</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">jsp </span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">页面。</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如何控制部分权限，最小控制单元是什么？</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />7</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、重复提交问题</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">功能操作完成后，鼠标右键点击所在页面，选择弹出菜单的刷新功能，容易出现重复提交问题。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">功能操作完成后，通过浏览器的后退键进行重复操作，容易出现重复提交问题。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br />URL</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">没有重定向，刷新页面出现重复提交问题。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">某功能键反应时间延迟时，在短时间内重复点击该功能键，容易出现重复提交问题；</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">某些用户习惯双击按钮，某些用户错误地点了两次按钮，某些鼠标出现故障，导致单击变成双击，结果发生重复提交。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br /></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如果不加处理，这些请求都会被服务器处理，从而导致错误的结果。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />8</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">．如何锁定资源如记录：这是一个老大难问题了，为此还搞了不少东西出来。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />9</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，如何防止浏览器记住数据，某些浏览器能够为每一个</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">URL</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">记住用户输入的数据，在某些情况下是危险的。比如我修改了某些数据，但由于某些原因我想刷新，此时数据已经被其他用户修改，但在浏览器里面你看到的是你修改的数据（你用刷新按钮也不能看到新数据）。如果你再次保存，你认为你没有修改数据，但数据已经被修改了。当页面是脚本动态生成的时候，这个问题更严重。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />10</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，如何防止或侦测客户修改浏览器设置，比如客户在打开页面之后关闭脚本功能。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />11</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，回退问题，对于工作流熟悉的人对这个问题很清楚，某个操作节点如何回到启动点，如何回到上一节点，如何避免硬编码？</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />12</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，校验问题，如何同时实现客户端和服务器端校验，客户端调用服务器端的校验功能。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br /><br />13</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，如何防止数据伪造，如何防止客户使用特殊工具和技术伪造数据提交到服务器。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br />14</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">如何追踪定位错误，如何处理异常？</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br />15</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，如何在两个操作之间传递大量数据，尤其是非存储数据。</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br />16</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">带安全控制的断点续传的上载</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">和下载</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br />17</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，分布式环境的特殊处理，</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br />18</span><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.25pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，如何提高开发效率？</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; LETTER-SPACING: 0.25pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br style="mso-special-character: line-break" /><br style="mso-special-character: line-break" /></span></span>
		</p>
<img src ="http://www.blogjava.net/savage100/aggbug/58737.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-18 13:58 <a href="http://www.blogjava.net/savage100/articles/58737.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>防范脚本攻击</title><link>http://www.blogjava.net/savage100/articles/58601.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 17 Jul 2006 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58601.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58601.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58601.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">一. 防范脚本攻击<br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">JS</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; mso-bidi-font-size: 10.5pt">
						</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">HTML</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本攻击的防范其实很简单：</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">server.HTMLEncode</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Str</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）完事。当然你还不要大叫，怎么可能？你让我把全站类似＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">%=uid%</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞都加过滤我还不累死？为了方便的过滤，我们只需要将</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">HTML</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本和</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">JS</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本中的几个关键字符过滤掉就可以了：程序体（</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">1</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）如下：</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
								<br />
								<br />
						</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">‘</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下是过滤函数</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
								<br />
								<br />
						</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">% <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">function CHK(fqyString) <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = replace(fqyString, "</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">", "</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = replace(fqyString, "</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">", "</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = replace(fqyString, "&amp;#", "&amp;") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(32), " ") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(9), " ") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(34), """) <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(39), "'") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(13), "") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(10) &amp; CHR(10), "</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">/P</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">P</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt"> ") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">fqyString = Replace(fqyString, CHR(10), "</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">BR</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt"> ") <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">CHK = fqyString <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">end function <br /><br /></span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				</span>
				<span style="mso-bookmark: part">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">%</span>
				</span>
				<span style="mso-bookmark: part">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				</span>
				<span style="mso-bookmark: part">
				</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<?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">
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<o:p> </o:p>
				</span>
		</p>
		<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
				<p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm">
						<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
								<o:p> </o:p>
						</span>
				</p>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">‘</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下是应用实例</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">%=CHK(Username)%</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Username=CHK(replace(request(“username”),”’”,””)) <br /><br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　使用</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Include</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把函数写在公有页面上，这样效率是最好的。</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　程序体（</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">1</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　另外，值得我们注意的是，很多站点在用户注册，或者是用户资料修改的页面上也缺少脚本的过滤，或者是只在其中之一进行过滤，注册进入后修改资料仍然可以进行脚本攻击。对用户提交的数据进行检测和过滤，程序体（</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">2</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span style="COLOR: black; mso-bidi-font-size: 10.5pt">
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如下：</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">‘</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下是过滤函数</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">If Instr(request("username"),"=")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"%")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),chr(32))</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"?")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"&amp;")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),";")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),",")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"'")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"?")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),chr(34))</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),chr(9))</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"$")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 or <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Instr(request("username"),"""")</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 then <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.write "</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">朋友，你的提交用户名含有非法字符，请更改，谢谢合作</span>
				<span style="COLOR: black; mso-bidi-font-size: 10.5pt">
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">a href='****:window.history.go(-1);'</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞返回＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">/a</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.end <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">end if <br /><br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　程序体（</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">2</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　为了提供工作效率我们再将过滤内容程序化，这样对多个参数的过滤效率将有很大程度上的提高：如</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　程序体（</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">3</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">‘</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下为程序主体</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">dim Bword(18) <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(0)="?" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(1)=";" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(2)="</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(3)="</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(4)="-" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(5)="’" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(6)="””" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(7)="&amp;" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(8)="%" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(9)="$" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(10)="'" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(11)=":" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(12)="</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(13)="(" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(14)=")" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(15)="--" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(16)=" chr(9)" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(17)=" chr(34)" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">Bword(18)=" chr(32)" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">errc=false <br /><br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">‘</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下是应用实例部分</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">for i= 0 to ubound(Bword) <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">if instr(FQYs,Bword(i))</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">0 then <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">errc=true <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">end if <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">next <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">if errc then <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.write "</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">script language=""****""</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.write "parent.alert('</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很抱歉</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">!</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">您的操作违法了</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">);" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.write "history,back();" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.write "</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">/script</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">" <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">response.end <br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">end if <br /><br /></span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　程序体（</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">3</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　有了上面的过滤函数您可以在任何需要过滤的地方应用过滤函数直接使用就可以了。这就使我们的修复工作大大的简化了。</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　另外，我想在这里再次多提醒一下，一些站点的</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">UBB</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在进行小的表情图标转化时也会出现过滤问题，由于很隐蔽所以不容易发现：</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　如：</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　我们标签内的文字进行修改，</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　不知道各位看懂没，前一个单引号用来中和程序提供的左引号，第二个单引号用来中和闭合的右引号，这样程序输出就为：</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　＜</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">img src=’img/0001.gif’ onerror=****:alert(); alt=’’</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＞</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">
						<br />
						<br />
				</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　如果图片不存在，那么将激活</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">onerror</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签执行脚本程序。对于已经过滤了单引号的站点在这里用双引号一样可以完成。对于过滤了</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">****</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字段的，只用</span>
				<span lang="EN-US" style="COLOR: black; mso-bidi-font-size: 10.5pt">alert()</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也完全可以。所以说要过滤就要过滤完全，别给攻击者留下一丝机会。</span>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
<img src ="http://www.blogjava.net/savage100/aggbug/58601.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:54 <a href="http://www.blogjava.net/savage100/articles/58601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中文问题的处理方法</title><link>http://www.blogjava.net/savage100/articles/58096.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Fri, 14 Jul 2006 01:09:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58096.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58096.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58096.html</trackback:ping><description><![CDATA[
		<font face="宋体">
				<p>第一部分:  jsp  ---&gt; java/servlet<br /><br />对于流行的<span lang="EN-US">Tomcat</span>来说，有以下三种解决方法：</p>
				<p>　　<span lang="EN-US">1) </span>更改<span lang="EN-US"> D:\Tomcat\conf\server.xml</span>，指定浏览器的编码格式为<span lang="EN-US">“</span>简体中文<span lang="EN-US">”</span>：</p>
				<p>　　方法是找到<span lang="EN-US"> server.xml </span>中的</p>
				<p>
						<span lang="EN-US">    &lt;Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />    enableLookups="false" redirectPort="8443" acceptCount="100"<br />    connectionTimeout="20000" disableUploadTimeout="true" <strong><span style="FONT-FAMILY: 宋体">URIEncoding='GBK'</span></strong> /&gt;</span>
				</p>
				<p>　　标记，粗体字是我添加的。</p>
				<p>　　可以这样验证你的更改是否成功：在更改前，在你出现乱码的页面的<span lang="EN-US">IE</span>浏览器，点击菜单<span lang="EN-US">“</span>查看｜编码<span lang="EN-US">”</span>，会发现<span lang="EN-US">“</span>西欧<span lang="EN-US">(ISO)”</span>处于选中状态。而更改后，点击菜单<span lang="EN-US">“</span>查看｜编码<span lang="EN-US">”</span>，会发现<span lang="EN-US">“</span>简体中文<span lang="EN-US">(GB2312)”</span>处于选中状态。注意你的Tomcat的common下要有"endorsed"和"i18n"文件夹，其中包含编码所需的lib<br /></p>
				<p>   <br />　　<span lang="EN-US">2)</span>更该<span lang="EN-US"> Java </span>程序，<br /><span lang="EN-US"> public class ThreeParams extends HttpServlet {<br />  public void doGet(HttpServletRequest request, HttpServletResponse response)<br />   throws ServletException, IOException {<br />      <strong><span style="FONT-FAMILY: 宋体">response.setContentType("text/html; charset=GBK");</span></strong><b><br /></b>      ...<br />  }  <br />}</span></p>
				<p>　　粗体字是必需要有的，它的作用是让浏览器把<span lang="EN-US">Unicode</span>字符转换为<span lang="EN-US">GBK</span>字符。这样页面的内容和浏览器的显示模式都设成了<span lang="EN-US">GBK</span>，就不会乱码了。</p>
				<p>   <br /><br /><br /><br /><br />第二部分    java/servlet   ----&gt;   mysql<br />mysql和Hibernate中的中文问题解决方法<br />另一种解决方法(mysql-4.1.11).低版本的mysql似乎没出现过中文问题(mysql-4.0.17). :)</p>
				<p>1.添加一个过滤器,将字符集编码设为GBK.<br />修改web.xml:</p>
				<p> &lt;filter&gt;<br />  &lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;<br />  &lt;filter-class&gt;hxz.filter.SetEncodingFilter&lt;/filter-class&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;encoding&lt;/param-name&gt;<br />   &lt;param-value&gt;GBK&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br /> &lt;/filter&gt;<br /> <br /> &lt;filter-mapping&gt;<br />  &lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;<br />  &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br /> &lt;/filter-mapping&gt;</p>
				<p>新建一个过滤器:<br />package hxz.filter;</p>
				<p>import java.io.IOException;</p>
				<p>import javax.servlet.*;</p>
				<p>public class SetEncodingFilter implements Filter {<br /> <br /> // default character encoding<br /> String defaultEncoding = "GBK"; <br /> <br /> public void init(FilterConfig config) throws ServletException {<br />  String encoding = config.getInitParameter("encoding");<br />  if (encoding != null) {<br />   defaultEncoding = encoding;<br />  }<br /> }</p>
				<p> public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {<br />  request.setCharacterEncoding(defaultEncoding);<br />  chain.doFilter(request, response);<br /> }</p>
				<p> public void destroy() {<br />  defaultEncoding = null;<br /> }</p>
				<p>}</p>
				<p>2.修改hibernate配置文件:<br />&lt;property name="url"&gt;<br />  &lt;value&gt;jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=GBK&lt;/value&gt;<br />&lt;/property&gt;<br />注意后面的:useUnicode=true&amp;amp;characterEncoding=GBK, 在xml中&amp;要改为;amp;</p>
				<p>3.在新版本中mysql建表时,你可以选择一种字符集,将它设为GBK.<br />jsp或servlet中把字符集改为GBK.</p>
				<p> </p>
		</font>
<img src ="http://www.blogjava.net/savage100/aggbug/58096.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-14 09:09 <a href="http://www.blogjava.net/savage100/articles/58096.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><item><title>修改默认的tomcat的welcomePage </title><link>http://www.blogjava.net/savage100/articles/56965.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Thu, 06 Jul 2006 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/56965.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/56965.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/56965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/56965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/56965.html</trackback:ping><description><![CDATA[
		<p>修改tomcat的默认首页有2种方法，<br />      1&gt;删除root目录<br />      2&gt;替换root下的index.jsp<br /><br /><br />方法2.直接用一个index.jsp代替root下的index.jsp<br /><br />隐藏主页URL后面路径的方法，直接将自己的subindex.jsp作为iframe插入index.jsp中就可以了<br /> <br />   &lt;table width="1124" height="768" cellspacing="0" cellspacing="0" &gt;<br />     &lt;tr valign="top" &gt;<br />      &lt;td width="100%" height="100%"&gt;&lt;iframe height="100%" width="100%"  frameborder="1" src="index.jsp" scrolling="no"&gt;&lt;/iframe&gt;&lt;/td&gt;<br />  &lt;/tr&gt;<br />   &lt;/table &gt;</p>
<img src ="http://www.blogjava.net/savage100/aggbug/56965.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 15:51 <a href="http://www.blogjava.net/savage100/articles/56965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>