<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>ASP</title><link>http://webuc.net/chinahuman/category/185.aspx</link><description>ASP</description><managingEditor>铁匠</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>铁匠</dc:creator><title>终于解决了组件创建时引起IIS挂掉的问题</title><link>http://webuc.net/chinahuman/archive/2006/08/08/7266.aspx</link><pubDate>Tue, 08 Aug 2006 17:27:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2006/08/08/7266.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/7266.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2006/08/08/7266.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/7266.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/7266.aspx</trackback:ping><description>通过大量的资料查看,才找到问题所在,经过编码和小量的服务器测试(因为出问题的服务器比较少),终于IIS不再挂掉,不过还是一样的会出现创建错误.权限问题还是没有解决好.从一个A类BUG现在变成B类BUG了.&lt;img src ="http://webuc.net/chinahuman/aggbug/7266.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>JS的继承机制</title><link>http://webuc.net/chinahuman/archive/2006/06/23/7139.aspx</link><pubDate>Fri, 23 Jun 2006 17:17:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2006/06/23/7139.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/7139.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2006/06/23/7139.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/7139.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/7139.aspx</trackback:ping><description>&lt;P&gt;现在开始讲讲JS的继承机制，首先让我们来看一下它的继承实现过程：&lt;BR&gt;function BaseClass()&lt;BR&gt;{&lt;BR&gt;BaseClass.prototype.HelloWorld = function()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;alert("hello world from base");&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;BaseClass.prototype.GoodBye = function()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;alert("good by from Base");&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;function ClassA()&lt;BR&gt;{&lt;BR&gt;ClassA.prototype.HelloWorld = function()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;alert("hello world from ClassA");&lt;BR&gt;}&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;ClassA.prototype = new BaseClass();&lt;/P&gt;
&lt;P&gt;可以看出来，JS里面没有关键字class，而是用一个function来说明它是一个对象，无论怎么说都是让人很难于接受它可以封装对象的事实。它的继承机制是通过它的prototype（原型）来实现的，每个function都有一个prototype,很让人迷惑的一个东西，不知道我们是把函数当对象用，还是把对象当函数用了。&lt;BR&gt;它的继承是通过上面代码的最后一句来实现的：ClassA.prototype = new BaseClass(); 注意这里基类会进行一次初始化，所以当我们要是在构造函数里面实倒一些对象的时候，要注意了，千万不要在这里去操作整个页面的DOM，不然可能会造成重复操作。按这样写我想很多人（包含我）已经完全晕了，为什么可以实现继承：new BaseClass()的时候，这个类已经实现成为一个对象，而把这个对象的指针赋给了另一个类的prototype，按照正常编程语言的逻辑已经无法理解了。不过查了些资料，这个prototype想当于是Delphi的class method/class function，而基类实现的是以一个单件的形式来赋给子类的。&lt;BR&gt;再调用测试例子&lt;BR&gt;var obj = new ClassA();&lt;BR&gt;obj.HelloWorld();&lt;BR&gt;obj.GoodBye();&lt;BR&gt;我们得到obj.HelloWorld()，并不是按我们以前所想到的先"hello world from base"再"hello world from ClassA",只有"hello world from ClassA",所以在JS里面的对象继承只能是完全覆盖父类的方法来实现，只能实现有限的对象继承机制。&lt;BR&gt;至于为什么ClassA.prototype = new BaseClass()后，还可以保留ClassA中的HelloWorld方法，这个到现在为止，我还是没有想清楚，只能是猜测JS解析器作了处理。&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/7139.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>JS中关于null和0的判断</title><link>http://webuc.net/chinahuman/archive/2006/06/23/7138.aspx</link><pubDate>Fri, 23 Jun 2006 17:15:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2006/06/23/7138.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/7138.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2006/06/23/7138.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/7138.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/7138.aspx</trackback:ping><description>&lt;P&gt;随着Ajax的流行,JS的OOP也开始变得很流行(虽然是伪OOP).于是对于它的对象的属性判断变得很复杂,先看个例子:比如说我们自己声明了这个对象:&lt;/P&gt;
&lt;P&gt;function TestObj()&lt;BR&gt;{&lt;BR&gt;this.Name = "test";&lt;BR&gt;this.Point = 0;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;因为这是我们自己声明的对象,所以我们知道它有哪些属性,但是如果是从别的地方取过来的对象,我们很可能就需要知道它现在哪些属性支持.通常情况下,我们用下面代码来判断:&lt;/P&gt;
&lt;P&gt;var obj = new TestObj();&lt;/P&gt;
&lt;P&gt;if (obj.Name)&lt;BR&gt;{&lt;BR&gt;alert(obj.Name);&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;但是有时候也会碰到麻烦&lt;/P&gt;
&lt;P&gt;if (obj.Point )&lt;BR&gt;{&lt;BR&gt;alert(obj.Point);&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;却发现它死活找不到这样的属性.要注意,在对象初始化的时候,它的Point被置了0值.在JS的条件判断里面,只要非0的值都是判断为true,估计null也被当成一种特殊的0值处理了.&lt;/P&gt;
&lt;P&gt;所以最保险的判断方法是:&lt;/P&gt;
&lt;P&gt;if (obj.Name!=null)&lt;BR&gt;{&lt;BR&gt;alert(obj.Name);&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;在JS里面null和0经常可以起到相同的作用,但是它们又是不等的.估计null和delphi的point(0)效果是一样的吧.&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/7138.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>在JavaScript中实现枚举</title><link>http://webuc.net/chinahuman/archive/2006/06/01/7081.aspx</link><pubDate>Thu, 01 Jun 2006 14:19:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2006/06/01/7081.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/7081.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2006/06/01/7081.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/7081.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/7081.aspx</trackback:ping><description>&lt;P&gt;JavaScript好像没有枚举类型,所以当有需要枚举的时候,总是感觉不太方便,基于最近大规模地写含有OO的JavaScript代码,突发灵感,于是实现了这样的一个过程.&lt;/P&gt;
&lt;P&gt;先定义一个类,里面的每个属性就是一个枚举类型&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;function&lt;/FONT&gt; DrawTypeEnum()&lt;BR&gt;{&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;this&lt;/FONT&gt;.DrawNone = 0;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawSelect = 1;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawLine&amp;nbsp;&amp;nbsp; = 2;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawPen&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawText&amp;nbsp;&amp;nbsp; = 4;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawErase&amp;nbsp; = 5;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawTransparentRectange = 6;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawTransparentEllipse&amp;nbsp; = 7;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawRectange = 8;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DrawEllipse = 9;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;然后实例华这个类&lt;BR&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; DrawType = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; DrawTypeEnum();&lt;/P&gt;
&lt;P&gt;这样就可以用abc.drawtype = DrawType.DrawPen这样来访问了.&lt;/P&gt;
&lt;P&gt;虽然没有什么实质性的变化,但是至少自己看着爽多了.&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/7081.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>留言本反垃圾的一种另类方法</title><link>http://webuc.net/chinahuman/archive/2006/02/15/6582.aspx</link><pubDate>Wed, 15 Feb 2006 10:04:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2006/02/15/6582.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/6582.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2006/02/15/6582.aspx#Feedback</comments><slash:comments>102</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/6582.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/6582.aspx</trackback:ping><description>&lt;P&gt;不知道什么时候,我的网站的留言本被人盯上了,成天在上面留非法广告。这成了很长时间我头大的问题。于是用内容过滤，模式过滤，甚至加验证码，但是这一切都无效。更加让人失望的是，通过留言内容和时间上来分析，这些都是手工的行为，也就是人家是用手填的，而不是用工具。最后只好用审批制来实现，但是每天成百条的垃圾留言也是很让人头大的：数据库每个月都要长大好多，因为ACCESS里面的数据删除后不会自动释放空间。&lt;/P&gt;
&lt;P&gt;有天无聊上网查：留言本广告机，没有想到被我找到了一个。看了一下里面的实现，这才想起来，他们是根据收集到的地址一一往里面加的。于是我便把地址改了（把原来guestbook.asp改成了guestben.asp），经过几天的试运行，这些垃圾广告终于不见了。不过这个方法只有一段时间内有效，过一段时间肯定会再来的，到时候只好再改名。&lt;/P&gt;
&lt;P&gt;查不到源头，不然去和对方协商一下，如果协商不成，可以展开一些报复性的行为。呵呵，先礼后兵嘛。&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/6582.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>寻找ＡＳＰ组件无法创建的原因</title><link>http://webuc.net/chinahuman/archive/2005/08/31/6158.aspx</link><pubDate>Wed, 31 Aug 2005 12:19:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2005/08/31/6158.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/6158.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2005/08/31/6158.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/6158.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/6158.aspx</trackback:ping><description>&lt;P&gt;用Delphi开发的ASP组件可以说是又快又好，但是投入应用后，发现总有一些问题：在一些服务器上出现了，一访问组件，IIS就被挂起。前两天这个问题又出来了。幸运的是，那个网友很信任地让我上他的服务器进行调试。开始还以为是组件内部的问题，ASP的程序只写了一行创建，可是就是这样，IIS也是被挂起，最后修改了线程模式，甚至写了一个空组件，都无效，看来不是组件的问题了。&lt;/P&gt;
&lt;P&gt;又开始设置权限：把所有的权限都设到最大，问题还是没有解决，而且通过IIS被挂起后，组件还可以被删除，感觉到系统事实上还没有访问到这个DLL文件就已经出错了。通过几个小时痛苦的调试，几乎让人感觉到绝望。甚至生人感到是不是MS留了一个后门，要把Delphi开发的东东全部整死。&lt;/P&gt;
&lt;P&gt;早上临出门的时候，突然想起来平时组件都是注册到System32目录下面的，我何不也试试呢。于是我先把空组件复制到System32下，注册，启动测试页面，成功了！再把组件也如法泡制，竟然成功了！看来平时大家习惯把组件都注册到System32目录下面不是没有理由的。&lt;/P&gt;
&lt;P&gt;考虑原因，说实话，我没有想明白：如果说是没有文件的访问权限，那么在原来的目录里，已经设计了EveryOne的完全控制，System32目录下面只是多了一个System帐户的权限，它应该也是属于Everyone组里面的吧？带着问题继续思考。&lt;/P&gt;
&lt;P&gt;最后要感谢一下这位信任我的网友给我提供的测试平台。&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/6158.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>ASP调试技术</title><link>http://webuc.net/chinahuman/archive/2005/06/30/5760.aspx</link><pubDate>Thu, 30 Jun 2005 21:45:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2005/06/30/5760.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/5760.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2005/06/30/5760.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/5760.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/5760.aspx</trackback:ping><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;近来，一直有网友的程序出错了，而他自己又没有办法找到，所以打算把自己的经验总结一下，希望对大家有所帮助。说是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ASP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;调试技术，其实对于其它的脚本类的开发语言都是适用的，只是我这里是以&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ASP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;为例来说明的。因为&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ASP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等脚本是没有开发的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IDE&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来支持，基本上也没有&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Debuger&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以使用，所以调试起来比其它的程序都要难，但是只要肯花心思去想，还是可以很容易地找到出错的原因的。调试的过程可以分为以下几个步骤：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;1&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、找到出错的地方；&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、分析出错的原因；&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;3&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;修正错误。下面我对这几个步骤一一进行说明。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 38.95pt; TEXT-INDENT: -21pt; tab-stops: list 38.95pt; mso-list: l0 level1 lfo1"&gt;&lt;SPAN lang=EN-US style="mso-bidi-font-family: 宋体"&gt;&lt;SPAN style="mso-list: Ignore"&gt;一、&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;找到出错的地方&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;脚本的错误有两种：运行时错误和语法错误。这个对应于其它的程序的运行时错误和编译器错误。只要在&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IIS&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;上没有禁用掉：向客户端正发送详细的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ASP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;错误码率信息，我们就可以看到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ASP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的运行时错误和语法错误。如果你打开的时候看到的只是写着&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;500&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;服务器内部错误码的页面时，你应该修改你的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IE&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;浏览器的设置了：在&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Internet&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;选项里，选择高级选项卡，把里面的“显示友好的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;HTTP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;错误”前面的勾去掉，重启&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IE&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;就可以看到详细的错误信息。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;让我们看一下错误信息的格式：以下是编译器错误&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=宋体&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;Microsoft VBScript &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;编译器错误&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;错误&lt;SPAN lang=EN-US&gt; '&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="800" UnitName="a"&gt;800a&lt;/st1:chmetcnv&gt;0401'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=宋体&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;语句未结束&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=宋体&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;/play.asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;，行&lt;SPAN lang=EN-US&gt; 2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;&lt;FONT face=宋体&gt;for i = 0 to 20 do&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;&lt;FONT face=宋体&gt;----------------^&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=宋体&gt;运行时错误&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=宋体&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;Microsoft VBScript &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;运行时错误&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;错误&lt;SPAN lang=EN-US&gt; '&lt;st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="800" UnitName="a"&gt;800a&lt;/st1:chmetcnv&gt;0009'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=宋体&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;下标越界&lt;SPAN lang=EN-US&gt;: 'i'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=宋体&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;/play.asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt;，行&lt;SPAN lang=EN-US&gt; 4&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;我们应该注意到，并不是每个版本的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IIS&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;都会给出这么详细的错误信息。但是肯定会给出的三个信息是：是运行时错误还是编译器错误，错误所在的语句行，错误代码。让我们先学习一下怎么看这个错误代码：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;800aXXXX&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;后面四个&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;X&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;表示的是四位的十六进制数，把它转成十进制后，去查&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;VBScript&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的帮助手册，就可以得到详细的错误描述了。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;还有一个要说明的是在调试过程中，尽可能地把&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;on error resume next&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这样的语句干掉，因为它可以把异常吃掉，导致我们无法正确定位到错误所在，很多时候，就是因为这个语句要走很多弯路。&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;On error resume next &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;语句的作用应该是用来捕获异常的，比如说写入文本的时候出错，或是连接数据库的时候发现数据库没有启动，而不是让它去屏蔽你程序中自身引起的运行错误，比如说下标越界等。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;我们还应该注意到，报错所在的行，并不一定是真正出错的地方，而是由于前面的错误，引发了下面的错误，最经常看到的是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;end if &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;找不到前面的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可以匹配，这时候很可能是前面少写了一个&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;或是一个&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;else&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。如果我们有良好的书写习惯，注意缩进，尽量把程序写成小函数的形式，这样的错误还是比较容易看出来的。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;还有一种错误就是执行错误，也就是程序都不报错，但是得不到正确的结果。对于多分支的程序，首先你得判断一下你的流程走过的语句顺序：我是通过设置“停点”来判断的，也就是在你认为应该的流程里写上&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;:response.write a:response.end &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;里面的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;a&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是一个顺序码，可以是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;1,2,3&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;……这样的，目的是为了区别你的所设置的“停点”，找到了一个点后，把这个点去掉，接着找下一个点，以此来判断你的流程是否是和你所想的一致，然后在这些流程中间的关键地方，把中间变量输出：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;response.write &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;变量名&lt;/SPAN&gt; &lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;再查看页面，通过这些变量的中间结果看哪里不正确了。以此来找出错误的地方和错误的原因。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 38.95pt; TEXT-INDENT: -21pt; tab-stops: list 38.95pt; mso-list: l0 level1 lfo1"&gt;&lt;SPAN lang=EN-US style="mso-bidi-font-family: 宋体"&gt;&lt;SPAN style="mso-list: Ignore"&gt;二、&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;分析出错的原因并修正&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;找到了出错的地方后，我们就应该分析为什么出错了。对于编译器的错误，由于是语法错误，应该容易找到原因。对于运行时错误，在前面讲查找错误的地点的时候，也讲了一些了，可以通过错误码来判断出错的原因。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对于执行错误，要认真检查你的代码了，一般比较容易出错的几个地方是：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN lang=EN-US&gt;1&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、如果你的变量是没有定义就用，则很可能存在着局部变量和全局变量冲突的问题。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、还有脚本类的，很多变量都是没有类型的。所以在作判断的时候很容易出错。比如说你的一个变量&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;a&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;从数据库得到的值为&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;5&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，然后用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt; if a = 5 then &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来判断，这时候很可能会得到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;false&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的结果；而用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;if a- 5= 0 then &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这时候才会得到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;true&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的结果。因为前面得到的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;a&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是无类型的，不是数字，所以不会等于&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;5&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;但是经过一次减法运算时，会做类型转换，所以后面可以得到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;True&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN lang=EN-US&gt;3&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、变量在用的过程中没有重新初化，特别是循环里面，如果这个变量不是用于统计循环里面的结果的，则每次用之前要重新初始化，不然上一次的运行结果会影响到这个变量的值，引起不必要的麻烦。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;SQL&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，由于&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ASP&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;大部分是基于数据库来开发应用的，所以&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;SQL&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的错误也不可忽视。很多时候都是通过拼接的方式生成查询所要的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;SQL&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，所以如果出现了问题，基本上第一时间里面要看生成的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;SQL&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是不是我们所需要的，再把它放到查询分析器里面去看，它是否可以正常地执行，能否得到我们所需的结果。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 17.95pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;调试的过程是一项很烦琐的过程，所以要有耐心，也只有在调试的过程中才会让你学习到更多的东西。为了更好地调试，需要有一个良好的书写习惯，我们在写代码的时候，尽量要写小函数，作好缩进，每个变量使用前都要定义等等。&lt;/SPAN&gt;&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/5760.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>WEB编程的学习过程(二)</title><link>http://webuc.net/chinahuman/archive/2004/08/12/1622.aspx</link><pubDate>Thu, 12 Aug 2004 12:13:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2004/08/12/1622.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/1622.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2004/08/12/1622.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/1622.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/1622.aspx</trackback:ping><description>对于WEB编程来说，需要实现的地方有两个：浏览器和服务器。在学习这两个方面的编程的时候，最好有一些其它计算机语言的功底，不过通过学习这个的编程来学习计算机语言也是一种不错的方式：因为越是高级的语言，理解它是越容易的。学习这些语言的时候，不能只是局限在这个语言里面，而更要透过它们去理解它的机制，想透这一层后，学习一门新语言的过程只是一种简单的学习语法还有熟悉新的语法的过程。对于服务器端的编程，当前主流的比较多：asp/asp.net、JSP、PHP等，我就拿我最熟悉的ASP来说吧（虽然ASP门槛很低，有很多弱点，但是还是一门不错的语言，做为一名程序员，应该想的是怎么发挥一门语言的长处，而不是成天去讨论各种语言的好坏）。&lt;br /&gt;我个人感觉说与其说ASP是一门语言，还不如说它是一个平台：它是通过VBscript/Jscript来调用组件来实现所要的各种功能的，其中VBscript是最常用的一种脚本语言，它不是一种面向对象的语言，但是它是一种基于对象的语言，可以调用各种各样的对象来扩展它的功能。对于一门语言来说，有几个要素是不可缺少的：数据类型、顺序结构、分支结构、条件语句、函数和过程。VBScript是一门弱数据类型的语言，很松散的。找本这方面的书，看上一阵子就可以很好地理解这方面的东西了。刚开始的编程，里面的程序基本上都是为了生成浏览器所要的HTML代码来编写的，到后面做一些比较复杂的系统的时候，编的代码就要考虑一些业务逻辑了。所以对HTML和CSS的了解是很必须的！同时，在学习的时候要注意服务器端的程序是无状态的，所谓的无状态就是不象桌面程序那样可以等待你输入一个东西后接着做下一步操作，所以在进行程序设计的时候，要把这部分的操作分离开。大家在学习的时候，早期基本上是一些简单的数据库应用，就是增、删、改、查数据库里面的操作，这时候要学会把一个具体的模型抽象成为一个数据库的模型了。同时这时候可以学习一些SQL（Struct Query Language:结构化查询语言），越复杂的应用，SQL就越显得重要，因为一条好的查询，可以极大地提高系统的性能，而且脚本语言的速度是比不上SQL的执行速度的。当然数据库应用只是最常见的一种应用了，ASP通过组件可以实现很强大的功能的（其实数据库操作也是通过组件来实现的，只是这个组件每台机子上都有而已）。学习一门语言不是要看它能做什么，而是要去想还可以利用它来做什么。只有通过不断地想和实践，这样才能让自己的境界一点点地高起来。同时还应该让自己的知识面广起来，把其它语言的一些优点引入到这里面来，这样才能做到融汇贯通。比如说VBScript不是一门面向对象的语言，但是它也是可以构建类来来封装代码，这样可以使调用的时候更加简洁。&lt;br /&gt;在WEB编程中，另两种技术可以说也是一种常用来增强程序的性能的（易操作性，美观性）那就是DHTML和XML。它们的应用主要是结合其它的语言来实现的，通过它们可以很方便地实现页数据的无刷新更改和提交。WEB编程是一种高度的多种技术混用的过程，应该是要学会把这些技术结合到一起，来满足自己的要求。&lt;br /&gt;在学习的过程中（其它的学习事实上也是一样的）要注意的是技术的积累，每个人都是通过一步一步的积累成长起来的。同时在练习的时候，要注意转换思维，那就是把很多现实中的模型转化成为程序中可以实现的模型，当很熟悉这些过程的时候，就可以在拿到一个项目的时候，很快地把它转化成为对应的模型，理出里面的技术难点，通过研究或是转换思路的方式来攻克它。在这里我觉得对一名程序员来说，转换思路是很重要的，经常可以看到一些问题从正面想，那个算法的复杂程度是超过人的想象能力了，但是换个角度去解决的话，经常只是几行代码就搞定的事情。&lt;br /&gt;学习WEB编程就像《笑傲江湖》中华山派的剑宗和气宗一样的。如果一开始就用Dreamweaver,FrontPage来做，那是会很快就会做出漂亮又实用的页面出来，但是经过几年的实践后，水平基本上不会有很大的提高的；如果一开始就去想一些比较深的问题，也许没有别人做得快，但是假以时日，是会有很大的进步的。同时也要注意学习一些软件工程的知识，这些东西对编程也是很有帮助的。&lt;br /&gt;以上是我这两年多中的一些经验，错漏之处欢迎大家到我的BLOG上去斧正：&lt;A href="http://webuc.net/chinahuman"&gt;http://webuc.net/chinahuman&lt;/a&gt;。希望我写的这些东西对你们有所帮助。&lt;img src ="http://webuc.net/chinahuman/aggbug/1622.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>WEB编程的学习过程(一)</title><link>http://webuc.net/chinahuman/archive/2004/08/06/1538.aspx</link><pubDate>Fri, 06 Aug 2004 12:02:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2004/08/06/1538.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/1538.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2004/08/06/1538.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/1538.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/1538.aspx</trackback:ping><description>因为工作的原因，可能会离开WEB编程，去搞桌面程序的开发了。但是经常还是有不少的人问我该怎么去学习WEB编程，于是用一些时间把一些东西整理一下，希望对他们有帮助。我在这里面主要讲一些学习过程和学习要注意的东西，不会讲某一个东西的详细的实现过程。&lt;br /&gt;无论学习什么东西，兴趣都是很重要的。当时学习编程完全是因为喜欢做网页引起的。其实WEB上的编程，并不是像一些人认为的那样没有什么含量的，事实上深挖后，还是可以学习到不少的东西。什么东西都没有最高的境界，只有更高的境界。做WEB编程和其它编程一样的也是要花很多的精力去学习和实践的，如果有人说我是一个做网页的，我要回答他：对不起，我是一个程序员。&lt;br /&gt;学习WEB上的编程，第一步就是要学习里面的机制了。因为HTML和CSS才是浏览器会认识的东西，所以无论是在服务器上，还是在客户端上，编程的目的就是动态地生成HTML和CSS，让它们在游览器上展现我们的想法。所以个人觉得学习HTML和CSS是很必要的。在学习的早期的时候，可以学习使用手写代码的方式来学习。虽然现在的网页开发工具已经很多了，但是这些可视化的东西，虽然可以作出效果，但是它并不能促进个人在这方面编程的进步。当然一个好的工具是离不开的了，相对于记事本来讲Edit Plus是一个不错的工具了，可以显示行号，可以通过点击按钮完成一些常用的HTML标签，更重要的是它可以进行语法加亮，让你很方便地查看这些HTML代码。&lt;br /&gt;有了一定的HTML和CSS上的积累后，可以学习一些Java Script了。学习JS的方法也是多看，多练。如果发现在网上别人用了一些很好的特效，可以把它的网页保存下来，然后用代码编辑器仔细地研究，认真地领会里面的思想，加上前面学习过的HTML和CSS的知识，还有一些其它语言的学习功底，掌握它还是比较容易的。同时要注意积累，把一些平时看到的好的代码和想法记下来，以后做东西的时候是会很经常用到它们的。同时网上到处是宝库，也有很多热心的人，基本上都会热心地帮你解答你学习中所碰到的问题。其中程序员大本营(&lt;a href="http://www.csdn.net"&gt;http://www.csdn.net&lt;/a&gt;)，无忧脚本(&lt;a href="http://www.51js.com"&gt;http://www.51js.com&lt;/a&gt;)这两个是不错的论坛。但是不能光想着让人帮你解决问题，碰到问题的时候，更多的时候还是要靠自己，努力去思考一个问题所得到的所获是会比别人帮你解决很多个问题的收获要多的，只有当自己想不出来的时候，再去问题别人，这样的问题就会比较有深度，别人比较乐于解答，如果是那种翻一下书就有答案的问题，很多人很快会被问烦的。&lt;br /&gt;对于很多人让我推荐一些书用来学习的，我想不出来有哪些书比较好的，我只知道我看过的书里面，基本上每本都是有错的。对于早期的学习，基本上每本书都是差不多的，因为只是对语法进行了描述，同时举了一些例子。入了门后，我想更多的人更喜欢到网上去看现成的一些技术方面的文章，以及研究别人写过的代码。同时尽信书不如无书，现在的好多计算机书为了赶进度，很少有校验的，所以要对里面的错误要勇敢地怀疑它。里面的测试代码很多没有经过检验就被印到书上去了。回想起以前学ASP的时候，因为书上的错误，害得我光写代码连接数据库，都用了一个星期才搞定（事实上它只是很简单的三行代码：第一行创建数据库连接对象；第二行设置一些连接参数；第三行打开数据库）。&lt;img src ="http://webuc.net/chinahuman/aggbug/1538.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>