<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>leavingme</title>
    <description></description>
    <link>http://leavingme.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>IE8不兼容你的网页 怎么办? - 简单开启兼容模式</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/234434" style="color:red;">http://leavingme.javaeye.com/blog/234434</a>&nbsp;
          发表时间: 2008年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>自从用了IE8 整个世界都变了形.<br />呵呵,问题没那么严重,如果你的网站还来不及修改以适合IE8访问的时候,咱们可以通过非常简单的方法,加几行代码就可以让访问的IE8自动调用IE7的渲染模式</strong>,这样可以保证最大的兼容性,方法如下:<br /></p>
<p>只需要在页面中加入如下HTTP meta-tag: </p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">meta</span> <span class="attr">http-equiv</span><span class="kwrd">="X-UA-Compatible"</span> <span class="attr">content</span><span class="kwrd">="IE=EmulateIE7"</span> <span class="kwrd">/&gt;</span></pre>
<div class="postcontent">
<p>只要IE8一读到这个标签,它就会自动启动IE7兼容模式,保证页面完整展示.<br /><br />还有一种方法是针对整个网站的,在IIS中加入如下描述符就可以有相同的效果,当然这么做范围更广.</p>
<pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">="1.0"</span> <span class="attr">encoding</span><span class="kwrd">="utf-8"</span>?<span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">configuration</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">system.webServer</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">httpProtocol</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">customHeaders</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">name</span><span class="kwrd">="X-UA-Compatible"</span> <span class="attr">value</span><span class="kwrd">="IE=EmulateIE7"</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">customHeaders</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">httpProtocol</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">system.webServer</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">configuration</span><span class="kwrd">&gt;</span> </pre>
<p>或者你还可以使用IIS admin tool来定义,更为简单. </p>
<p><a href="http://blogs.msdn.com/blogfiles/chkoenig/WindowsLiveWriter/ConfiguringApacheforIE8Beta2sIE7Compatib_7BEC/image_2.png"><img title="image" src="http://blogs.msdn.com/blogfiles/chkoenig/WindowsLiveWriter/ConfiguringApacheforIE8Beta2sIE7Compatib_7BEC/image_thumb.png" border="0" height="242" alt="image" style="border-width: 0px;" width="225" /></a></p>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/234434#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Aug 2008 14:43:50 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/234434</link>
        <guid>http://leavingme.javaeye.com/blog/234434</guid>
      </item>
          <item>
        <title>给 JSMin 写了一个 .NET 2.0 的图形界面程序</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/227609" style="color:red;">http://leavingme.javaeye.com/blog/227609</a>&nbsp;
          发表时间: 2008年08月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://www.coolcode.cn/wp-content/upload/jsmingui/jsmingui.png" title="JavaScript 压缩器"><img src="http://www.coolcode.cn/wp-content/upload/jsmingui/jsmingui_small.png" align="right" alt="JavaScript 压缩器" /></a> <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a> 是一个用于移除 JavaScript 文件中的注释和无用空白的过滤器。它可以显著将文件尺寸减半，使下载速度大大加快。 不过这个工具只提供了一个命令行版本，对于不熟悉命令行操作的人来说，这个工具不是很方便，而且如果要将多个文件压缩合并成一个时，也会很麻烦，另外，如果输入输出都是同一个文件的话，这个工具也会有问题。 为了方便自己使用，我利用它给出的 <a href="http://www.crockford.com/javascript/jsmin.cs">C# 算法代码</a>，编写了一个 .NET 2.0 的图形界面程序。这个程序界面虽然很简单，但是功能还是比较全面的。 </p>
<ol>
<li>它可以向命令行版本一样，采用图形界面操作来完成压缩一个 JavaScript 脚本文件。 </li>
<li>输入文件可以和输出文件相同。 </li>
<li>可以选择输入多个 JavaScript 脚本文件，合并压缩为一个 JavaScript 脚本文件。 </li>
<li>当输入多个 JavaScript 脚本文件时，可以指定它们合并的前后顺序。 </li>
<li>输入文件可以直接拖放到列表中，而不必非要用打开对话框添加。 </li>
<li>可自动判断输入文件是否重复添加。 </li>
<li><strong style="color: red;">增加了对注释中条件编译语句压缩的支持。</strong> </li>
</ol>
<p>下载：<a href="http://download.coolcode.cn/jsmingui.zip">jsmingui.zip</a> 注意：需要安装 .NET 2.0 运行库才能运行该程序。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/227609#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Aug 2008 18:04:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/227609</link>
        <guid>http://leavingme.javaeye.com/blog/227609</guid>
      </item>
          <item>
        <title>事件执行顺序 alpha</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/227456" style="color:red;">http://leavingme.javaeye.com/blog/227456</a>&nbsp;
          发表时间: 2008年08月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="js">&lt;script type="text/javascript" language="javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;div id="div1"&gt;
&lt;input type="button" id="btn" name="btn" value="click" /&gt;
&lt;a href="http://www.baidu.com" target="_blank" onclick="test2(event)"&gt;Google&lt;/a&gt;
&lt;input type="button" id="btn1" name="btn1" value="click" onclick="test3(event)" /&gt;
&lt;input type="button" id="reg" name="reg" value="register" /&gt;
&lt;input type="button" id="unreg" name="unreg" value="unregister" /&gt;
&lt;/div&gt;
&lt;div id="status"&gt;&lt;/div&gt;
&lt;script language="javascript"&gt;
document.write(Prototype.Version);

function test(evt) {
	alert($("btn") === Event.element(evt));	
	alert(Event.isLeftClick(evt));
	alert(Event.pointerX(evt) + ", " +  Event.pointerY(evt));
}

function test2(evt) {
	alert("clicked");
	//Event.stop(evt);
}

function test3(evt) {
	alert($('div1') === Event.findElement(evt, "div"))
}

Event.observe('btn', 'click', function(){
		alert('clicked');
	}, false
)

Event.observe('reg', 'click', function(){
		$('btn').onclick = function() {
			alert("1: onclick");
		}
		Event.observe('btn', 'click', test, false);
		Event.observe('btn', 'click', function() {
			alert("2");
		}, false);
		$("status").innerHTML = "event registered";
	}, false
)

Event.observe('unreg', 'click', function(){
		Event.stopObserving('btn', 'click', test, false);
		$("status").innerHTML = "event unregistered";
	}, false
)
&lt;/script&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>可以看出onclick是最先执行的，然后执行的是最后的Event.observe。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/227456#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Aug 2008 09:29:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/227456</link>
        <guid>http://leavingme.javaeye.com/blog/227456</guid>
      </item>
          <item>
        <title>函数的apply、call方法和length属性</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216589" style="color:red;">http://leavingme.javaeye.com/blog/216589</a>&nbsp;
          发表时间: 2008年07月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Verdana"><font face="Verdana">JavaScript为函数对象定义了两个方法：apply和 call，它们的作用都是将函数绑定到另外一个对象上去运行，两者仅在定义参数的方式有所区别： <br />
Function.prototype.apply(thisArg,argArray); <br />
Function.prototype.call(thisArg[,arg1[,arg2&#8230;]]); <br />
从函数原型可以看到，第一个参数都被取名为 thisArg，也就是说，所有函数内部的 this 指针都会被赋值为 thisArg，这就达到了将函数作为另外一个对象的方法运行的目的。两个方法除了 thisArg 参数，都是为 Function 对象传递的参数。下面的代码说明了 apply 和 call 方法的工作方式： <br />
<div class="cnblogs_code"><span style="color: #008000">//</span><span style="color: #008000">定义一个函数func1，具有属性p和方法A&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;func1(){&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.p</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">func1-</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.A</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">(arg){&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #0000ff">this</span><span style="color: #000000">.p</span><span style="color: #000000">+</span><span style="color: #000000">arg);&nbsp;<br />
&nbsp;&nbsp;}&nbsp;<br />
}&nbsp;<br />
</span><span style="color: #008000">//</span><span style="color: #008000">定义一个函数func2，具有属性p和方法B&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;func2(){&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.p</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">func2-</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.B</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">(arg){&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #0000ff">this</span><span style="color: #000000">.p</span><span style="color: #000000">+</span><span style="color: #000000">arg);&nbsp;<br />
&nbsp;&nbsp;}&nbsp;<br />
}&nbsp;<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;obj1</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;func1();&nbsp;<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;obj2</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;func2();&nbsp;<br />
obj1.A(</span><span style="color: #000000">"</span><span style="color: #000000">byA</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示func1-byA&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">obj2.B(</span><span style="color: #000000">"</span><span style="color: #000000">byB</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示func2-byB&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">obj1.A.apply(obj2,[</span><span style="color: #000000">"</span><span style="color: #000000">byA</span><span style="color: #000000">"</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示func2-byA，其中[&#8220;byA&#8221;]是仅有一个元素的数组，下同&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">obj2.B.apply(obj1,[</span><span style="color: #000000">"</span><span style="color: #000000">byB</span><span style="color: #000000">"</span><span style="color: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示func1-byB&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">obj1.A.call(obj2,</span><span style="color: #000000">"</span><span style="color: #000000">byA</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示func2-byA&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">obj2.B.call(obj1,</span><span style="color: #000000">"</span><span style="color: #000000">byB</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示func1-byB&nbsp;</span></div>
<font face="Verdana">可以看出， obj1的方法A被绑定到obj2运行后， 整个函数A的运行环境就转移到了obj2，即this指针指向了obj2。同样obj2的函数 B也可以绑定到 obj1对象去运行。代码的最后 4 行显示了apply和call函数参数形式的区别。 <br />
与 arguments 的 length属性不同，函数对象的还有一个参数相关的属性 length，它表示函数定义时所指定参数的个数，而非调用时实际传递的参数个数。 例如下面的代码将显示2：&nbsp; <br />
<div class="cnblogs_code"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;sum(a,b){&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;a</span><span style="color: #000000">+</span><span style="color: #000000">b;&nbsp;<br />
}&nbsp;<br />
alert(sum.length);&nbsp;</span></div>
</font></font></font>

          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216589#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 13 Jul 2008 22:29:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216589</link>
        <guid>http://leavingme.javaeye.com/blog/216589</guid>
      </item>
          <item>
        <title>Prototype框架之$$函数</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216590" style="color:red;">http://leavingme.javaeye.com/blog/216590</a>&nbsp;
          发表时间: 2008年05月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          $$是prototype框架里的一个亮点了，也是一种快捷方式，通过它可以根据css样式选择页面中的元素，它支持以下几种css选择方式。 $支持的css选择符
<ul>
    <li>元素标签(tag)。$$("li")
    </li><li>元素ID,id前要加#。$$("#div_test")
    </li><li>css类，类名前加.。$$(".style1")
    </li><li>元素是否具有某个属性。$$("a[class]")
    </li><li>元素的某个属性是否符合特定的条件。$$("a[class='style1']")
    </li><li>以上的css选择符可以自由组合，形成一个复合的css选择符,中间不要有空格。如下：$$("a#link[class='link']")表示id为"link",class为".link"的链接元素（A）。
    <li>不同的css选择符（以上所有）之间用空格分隔，就组成一个多层的css选择符。如：$$(div p[class='js']) </li>
</li></ul>
<p>以上内容的参考：《征服Ajax--dojo、prototype、script.aculo.us框架解析与实例》<br />
<br />
</p>
<p style="text-indent: 21pt">$$()函数是Prototype 1.5新增的一个快捷方式，它允许开发人员通过CSS样式选择页面中的元素。熟悉XPath的读者会发现，CSS选择符在语法形式上和XML文档的XPath十分类似，Prototype支持的CSS选择符包括以下几种类型：</p>
<p style="margin-left: 42pt; text-indent: -21pt">l&nbsp; 元素标签名称，例如：$$(&#8220;li&#8221;)。</p>
<p style="margin-left: 42pt; text-indent: -21pt">l&nbsp; 元素ID，例如：$$(&#8220;#fixtures&#8221;)。</p>
<p style="margin-left: 42pt; text-indent: -21pt">l&nbsp; CSS类名，例如：$$(&#8220;.first&#8221;)。</p>
<p>l&nbsp; 元素是否具有某个属性，例如：$$(&#8220;h1[class]&#8221;)。</p>
<p>l&nbsp; 元素的某个属性是否符合特定的条件，例如：$$('a[href="#"]')、$$('a[class~="internal"]')、$$('a[href!=#]')。</p>
<p>l&nbsp; 上面所有这些CSS选择符的类型可以自由组合，形成一个复合的CSS选择符，例如：$$('li#item_3[class][href!="#"]')。</p>
<p>l&nbsp; 不同的CSS选择符（包括复合CSS选择符）之间用空格分隔，就组成了一个多层的CSS选择符，它通过指定目标元素的父节点甚至更多层父节点的CSS样式属性来定位目标元素。例如：$$('div[style] p[id] strong')。</p>
<p style="text-indent: 21pt">例2-8给出了一个$$()函数的测试页面示例，读者可以在该页面中输入不同的CSS选择符表达式，测试结果。</p>
<p style="text-indent: 21pt">例2-8&nbsp; $$()函数测试页面</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #ff0000">&nbsp;xml:lang</span><span style="color: #0000ff">="en"</span><span style="color: #ff0000">&nbsp;lang</span><span style="color: #0000ff">="en"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">chapter&nbsp;3</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">style&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/css"</span><span style="color: #ff0000">&nbsp;media</span><span style="color: #0000ff">="screen"</span><span style="color: #0000ff">&gt;</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">/*</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;&lt;![CDATA[&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">*/</span><span style="color: #800000; background-color: #f5f5f5">#testcss1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;11px</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;#f00</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#testcss2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;12px</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;#0f0</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;none</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">/*</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;]]&gt;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">*/</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">style</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000">&nbsp;language</span><span style="color: #0000ff">="javascript"</span><span style="color: #ff0000">&nbsp;src</span><span style="color: #0000ff">="prototype.js"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;test()&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;根据输入的CSS选择符，切换相应元素的显示</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$($F(</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">csspath</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">)).each(<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">(item)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element.toggle(item);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="fixtures"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="title"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some&nbsp;title&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">here</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="p"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="first&nbsp;summary"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">strong&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="strong"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">strong</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;is&nbsp;a&nbsp;short&nbsp;blurb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;该页面元素具备&nbsp;first和internal两种CSS样式</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="link_1"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="first&nbsp;internal"</span><span style="color: #ff0000">&nbsp;href</span><span style="color: #0000ff">="#"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">with&nbsp;a&nbsp;link</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;or&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="link_2"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="internal&nbsp;highlight"</span><span style="color: #ff0000">&nbsp;href</span><span style="color: #0000ff">="#"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">em&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="em"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">two</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">em</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ul&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="list"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="item_1"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="first"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="link_3"</span><span style="color: #ff0000">&nbsp;href</span><span style="color: #0000ff">="#"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="external"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="span"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Another&nbsp;link</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="item_2"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Some&nbsp;text</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="item_3"</span><span style="color: #ff0000">&nbsp;xml:lang</span><span style="color: #0000ff">="es-us"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Otra&nbsp;cosa</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=""</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="csspath"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="button"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="click"</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">="test()"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<p style="text-indent: 21pt">例2-8的运行页面如图2-2所示，在文本输入框中输入一个CSS选择符（例如&#8220;.title&#8221;），点击&#8220;click&#8221;按钮即可切换相应的页面元素（即Some title here）的显示/隐藏状态。<br />
<img src="http://book.csdn.net/BookFiles/286/img/image002.jpg" height="247" alt="" width="265" />&nbsp;&nbsp;&nbsp; <img src="http://book.csdn.net/BookFiles/286/img/image003.jpg" height="246" alt="" width="265" /><br />
&nbsp;(a)&nbsp; 在文本输入框中输入CSS选择符&#8220;.title&#8221;&nbsp;(b)&nbsp; 页面元素&#8220;Some title here&#8221;隐藏<br />
<br />
图2-2&nbsp; $$函数应用示例</p>

          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216590#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 May 2008 10:35:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216590</link>
        <guid>http://leavingme.javaeye.com/blog/216590</guid>
      </item>
          <item>
        <title>How to develop firefox extentions?</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216591" style="color:red;">http://leavingme.javaeye.com/blog/216591</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          I found a tutorial with PDF filetype,but there's no Chinese version available.<br />
<br />
1.Development Overview<br />
<a href="http://www.rietta.com/firefox/Tutorial/overview.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/overview.pdf</a><br />
<br />
2.Environment Setup<br />
<a href="http://www.rietta.com/firefox/Tutorial/env.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/env.pdf</a><br />
<br />
3.Configuration Files<br />
<a href="http://www.rietta.com/firefox/Tutorial/conf.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/conf.pdf</a><br />
<br />
4.Creating GUIs<br />
<a href="http://www.rietta.com/firefox/Tutorial/guis.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/guis.pdf</a><br />
<br />
5.The Backend<br />
<a href="http://www.rietta.com/firefox/Tutorial/backend.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/backend.pdf</a><br />
<br />
6.Preferences<br />
<a href="http://www.rietta.com/firefox/Tutorial/prefs.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/prefs.pdf</a><br />
<br />
7.Localization<br />
<a href="http://www.rietta.com/firefox/Tutorial/locale.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/locale.pdf</a><br />
<br />
8.Distribution<br />
<a href="http://www.rietta.com/firefox/Tutorial/dist.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/dist.pdf</a><br />
<br />
9.Security<br />
<a href="http://www.rietta.com/firefox/Tutorial/security.pdf" target="_blank">http://www.rietta.com/firefox/Tutorial/security.pdf</a><br />

          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216591#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 20:49:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216591</link>
        <guid>http://leavingme.javaeye.com/blog/216591</guid>
      </item>
          <item>
        <title>Firefox插件开发－技术和开发网站</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216592" style="color:red;">http://leavingme.javaeye.com/blog/216592</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一、想要编写Firefox插件最简单的技术基础就是XML，JavaScript，剩下的就是稍稍的模仿能力和不知厌倦的尝试精神。</p>
<p>二、需要的工具如下：</p>
<p>1、UltraEdit （编辑相关的文件）</p>
<p>2、1st JavaScript Editor （编写JavaScript）</p>
<p>3、还需要以下Firefox插件用于调试：Chrome List, FireBug。其中尤其以FireBug最为重要，在开发过程中起到的作用实在是太大了。节省了很多查找bug的时间。</p>
<p>三、开发过程中可以参考的网站：</p>
<p><a href="http://www.xulplanet.com/"><u>http://www.xulplanet.com/</u></a><br />
<a href="http://blog.donews.com/limodou/category/35193.aspx"><u>http://blog.donews.com/limodou/category/35193.aspx</u></a><br />
<a href="http://developer.mozilla.org/en/docs/Extensions"><u>http://developer.mozilla.org/en/docs/Extensions</u></a><br />
<a href="http://www.firefox.net.cn/newforum/"><u>http://www.firefox.net.cn/newforum/</u></a><br />
<a href="http://kb.mozillazine.org/Getting_started_with_extension_development"><u>http://kb.mozillazine.org/Getting_started_with_extension_development</u></a><br />
<a href="http://developer.mozilla.org/cn/docs/XUL"><u>http://developer.mozilla.org/cn/docs/XUL</u></a></p>
<p>四、最为有用的例子。因为Firefox的插件都是源代码的打包文件，所以其他的Firefox插件都是很好的例子，在我的开发过程中觉得以下的例子比较有用：ChatZilla， Googlebar Lite， QuickNote， Super DragAndGo.</p>

          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216592#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 20:44:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216592</link>
        <guid>http://leavingme.javaeye.com/blog/216592</guid>
      </item>
          <item>
        <title>javascript中replace()方法</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216593" style="color:red;">http://leavingme.javaeye.com/blog/216593</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Verdana">　　在javascript中，String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力，让我不禁想向大家介绍它。</font></p>
<p><font face="Verdana">　　replace()最简单的算是能力就是简单的字符替换。示例代码如下：</font></p>
<p><font face="Verdana">&lt;script language="javascript"&gt;<br />
var strM = "javascript is a good script language";<br />
//在此我想将字母a替换成字母A<br />
alert(strM.replace("a","A"));<br />
&lt;/script&gt;</font></p>
<p><font face="Verdana">　　我想大家运行后可以看到结果，它只替换了首字母。但如果加上正则表达式结果就不一样了！呵呵，没错。replace()支持正则表达式，它可以按照正则表达式的规则匹配字符或字符串，然后给予替换！</font></p>
<p><font face="Verdana">&lt;script language="javascript"&gt;<br />
var strM = "javascript is a good script language";<br />
//在此我想将字母a替换成字母A<br />
alert(strM.replace(/a/,"A"));<br />
&lt;/script&gt;</font></p>
<p><font face="Verdana">　　呵呵，您一定发现了。这样还是只替换了第一个字母a。如果您熟悉正则，那这就难不住您。稍加修改就OK了。</font></p>
<p><font face="Verdana">&lt;script language="javascript"&gt;<br />
var strM = "javascript is a good script language";<br />
//在此将字母a全部替换成字母A<br />
alert(strM.replace(/a/g,"A"));<br />
&lt;/script&gt;</font></p>
<p><font face="Verdana">　　还可以这样，看看效果！</font></p>
<p><font face="Verdana">&lt;script language="javascript"&gt;<br />
var strM = "javascript is a good script language";<br />
alert(strM.replace(/(javascript)\s*(is)/g,"$1 $2 fun. it $2"));<br />
&lt;/script&gt;</font></p>
<p><font face="Verdana">　　我这儿举的例子都是很简单的应用，replace()在此点上与您使用正则表达式的能力成正比。您正则表达式越强，呵呵，那您就会越疯狂的爱上它。</font></p>
<p><font face="Verdana">　　当然，我这儿推荐replace()的原因并不因为它能与正则表达式合作，而在于它还能与函数进行合作，发挥出强大的功能。</font></p>
<p><font face="Verdana">　　先看看简单例子：将所有单词首字母换成大写。</font></p>
<p><font face="Verdana">&lt;script language="javascript"&gt;<br />
var strM = "javascript is a good script language";<br />
function change(word)<br />
{<br />
　return word.indexOf(0).toUpperCase()+word.substring(1);<br />
}<br />
alert(strM.replace(/\b\w+\b/g,change));<br />
&lt;/script&gt;</font></p>
<p><font face="Verdana">　　由上可知，当正则表达式有"g"标志时，代表将处理整个字符串，即函数change的变换将应用于所有匹配的对象。而该函数有三个或更多参数，具体个数视正则表达式而定。</font></p>
<p><font face="Verdana">　　有了函数与正则表达式的配合，replace()处理字符串的功能空前强大起来了！</font></p>
<p><font face="Verdana">　　最后还举个例子，将字符串所有单词倒序，用replace()处理是如此简单。</font></p>
<p><font face="Verdana">&lt;script language="javascript"&gt;<br />
var strM = "javascript is a good script language";<br />
function change(word)<br />
{<br />
　var result = word.match(/(\w)/g);<br />
if ( result )<br />
{<br />
　var str = "";<br />
　 for ( var i=result.length-1; i&gt;=0; i-- )<br />
　{<br />
　　 str += result;<br />
　}<br />
　return str;<br />
}<br />
else<br />
{<br />
　 return "null";<br />
}<br />
}<br />
alert(strM.replace(/\b(\w)+\b/g,change));<br />
&lt;/script&gt; <br />
&nbsp;<br />
</font></p>

          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216593#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 15:01:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216593</link>
        <guid>http://leavingme.javaeye.com/blog/216593</guid>
      </item>
          <item>
        <title>XTree2</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216594" style="color:red;">http://leavingme.javaeye.com/blog/216594</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Verdana">XTree2</font>

          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216594#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Apr 2008 20:51:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216594</link>
        <guid>http://leavingme.javaeye.com/blog/216594</guid>
      </item>
          <item>
        <title>C# 隐藏文件夹</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216595" style="color:red;">http://leavingme.javaeye.com/blog/216595</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <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"><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.IO;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Data;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Configuration;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.Security;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.WebControls;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.WebControls.WebParts;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.HtmlControls;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">partial</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;getDirectory&nbsp;:&nbsp;System.Web.UI.Page<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Page_Load(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;path&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Request.QueryString[</span><span style="color: #800000">"</span><span style="color: #800000">path</span><span style="color: #800000">"</span><span style="color: #000000">];<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(path&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;path&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">@"</span><span style="color: #800000">C:\Windows</span><span style="color: #800000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectoryInfo&nbsp;TheFolder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DirectoryInfo(path);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">TheFolder.Exists)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DirectoryNotFoundException(</span><span style="color: #800000">"</span><span style="color: #800000">Folder&nbsp;not&nbsp;found:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;path);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;info&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&lt;?xml&nbsp;version=\</span><span style="color: #800000">"</span><span style="color: #800080">1.0</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">?&gt;&lt;tree&gt;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(DirectoryInfo&nbsp;NextFolder&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;TheFolder.GetDirectories())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判读是否是隐藏文件夹<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(NextFolder.Attributes.ToString().IndexOf(</span><span style="color: #800000">"</span><span style="color: #800000">Hidden</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&lt;tree&nbsp;text=\</span><span style="color: #800000">""</span><span style="color: #800000">&nbsp;+&nbsp;NextFolder.Name&nbsp;+&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;src=\</span><span style="color: #800000">""</span><span style="color: #800000">&nbsp;+&nbsp;NextFolder.FullName&nbsp;+&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">/&gt;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&lt;/tree&gt;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.ContentType</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">text/xml</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Charset</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">UTF-8</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(info);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.End();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
 <img src="http://www.cnblogs.com/leavingme/aggbug/1166219.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-04-22 21:05 <a href="http://www.cnblogs.com/leavingme/archive/2008/04/22/1166219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216595#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Apr 2008 21:05:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216595</link>
        <guid>http://leavingme.javaeye.com/blog/216595</guid>
      </item>
          <item>
        <title>关于“回发或回调参数无效”</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216596" style="color:red;">http://leavingme.javaeye.com/blog/216596</a>&nbsp;
          发表时间: 2008年01月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这两天在开发的时候遇到一个这样的问题,<br />
回发或回调参数无效。在配置中使用 &lt;pages enableEventValidation="true"/&gt; 或在页面中使用 &lt;%@ Page EnableEventValidation="true" %&gt; 启用了事件验证。出于安全目的，此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的，则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。</p>
<p>在网上找了两天资料都没有结果<br />
在 剑气潇潇&nbsp;&nbsp; 的文章中看到原因是:</p>
<p>下边引用自:剑气潇潇 的文章http://www.cnblogs.com/asp600/archive/2006/11/04/550216.aspx</p>
<p>目前为止遇到的出现情况有两种：<br />
一是Form嵌套，一个页面只能有一个Form，仔细检查代码就可以解决。<br />
二是在下拉菜单中使用ajax，常见于省市联动菜单，可能是由于在aspx页面赋给了下拉菜单初始Item值，在事件回发时提示该错误，将下拉菜单初始Item值删除，在绑定事件中添加Item项。</p>
<p>后来我自己发现,问题还不是出在那儿.<br />
原因是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字的就行了.<br />
网上还有一种解决办法:把 EnableEventValidation 属性设置为false;但是这样只是没有警告框而已.数据仍然无法传递给服务器,导致SelectedIndex 值一直为零.</p>
<p>最好在web.config中添加如下语句:<br />
&lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/&gt;<br />
结果搞定,现在贴到这里希望对大家能够有所帮助.</p>
<p>看来ajax.net对中文支持有限啊,还是因为要在Web.Config设置一下编码??????</p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166224.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-15 07:13 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/15/1166224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216596#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jan 2008 07:13:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216596</link>
        <guid>http://leavingme.javaeye.com/blog/216596</guid>
      </item>
          <item>
        <title>Lc.exe 已退出，代码 -1 </title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216597" style="color:red;">http://leavingme.javaeye.com/blog/216597</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Verdana">可能的原因是：在你的项目中引用了第三方组件,并且这个第三方组件是个商业组件，他在组件的主使用类定义了LicenseProvider(typeof(LicFileLicenseProvider))<br />
这个Attribute。</font></p>
<p><font face="Verdana">VS2005在编译时检测到这个类的时候，会检查到组件使用的是LicFileLicenseProvider这个属性，表示有组件使用的是把许可的辅助信息保存在license.licx文件中，这个文件保存在vs2005中解决方案资源管理器中的Properties文件夹内。<br />
这个文件的内容实际上是个引用，他保存着你使用的第三方组件主使用类的名称空间+类名+文件名+文化+PublicKeyToken信息，这个文件是自动生成的。<br />
如果这个信息与你使用的组件dll中的实际内容不匹配，则lc.exe就会出现这个错误信息。</font></p>
<p><font face="Verdana">这个信息出现的原因是你在项目中使用了商业组件的测试版，而在发布的时候使用的是哪个商业组件的破解版。大部分的商业组件经过破解的时候，强名称签名就会消失，所以破解的组件与原来的测试版组件的引用信息是完全不同的。故每次编译的时候，vs2005自动调用语言编译器之前会调用lc（许可编译器），就会出现-1错误。</font></p>
<p><font face="Verdana">解决方法就是把Properties文件下的license.licx给删除，重新编译，如果还出现这个问题的话，必须将你的破解版的哪个组件使用lidism给翻译成il语言，然后用ilasm重新编译成dll，在编译的时候加入 /key=[你的强名称文件].snk 参数，自己加入强名称签名，然后使用vs2005重新编译，就可以成功了。</font></p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166226.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-14 05:38 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/14/1166226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216597#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 05:38:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216597</link>
        <guid>http://leavingme.javaeye.com/blog/216597</guid>
      </item>
          <item>
        <title>ASP.NET 2.0 的内部变化</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216598" style="color:red;">http://leavingme.javaeye.com/blog/216598</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://msdn2.microsoft.com/zh-cn/library/ms379581" target="_blank">http://msdn2.microsoft.com/zh-cn/library/ms379581</a>(VS.80).aspx<img src="aggbug/2042263.aspx" height="1" width="1" /><img src="http://www.cnblogs.com/leavingme/aggbug/1166227.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-14 01:53 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/14/1166227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216598#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 01:53:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216598</link>
        <guid>http://leavingme.javaeye.com/blog/216598</guid>
      </item>
          <item>
        <title>ASP.NET 1.1 升级至 ASP.NET 2.0 十个问题总结  </title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216599" style="color:red;">http://leavingme.javaeye.com/blog/216599</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Verdana">出处：CSDN[2006-03-14 15:30:05]&nbsp; 作者：litp&nbsp; </font></p>
<p><font face="Verdana">　　这几天升级了一下原来的1.1项目，发现了一些问题，总结一下放在这里，也提醒还没有来得及升级或准备升级的朋友，升级的过程中少走弯路，少浪费时间。<br />
　　1．Global.asax文件的处理形式不一样<br />
　　转化后将出现错误，在vs2003中Global.asax具有代码后置文件，2.0下, 将代码分离文件移到 App_Code 目录下，以便使其自动变为可通过应用程序中的任意 ASP.NET 页面访问。&#8220;Code-behind&#8221;属性将从 ASAX 文件的指令中删除。vs2005则直接把代码写在Global.asax。所以需要删除转化过来的文件重新加入，并把相应的代码copy过来。<br />
　　2．2.0没有了项目文件。<br />
　　 在 1.1 应用程序中，项目文件包含生成设置、对外部程序集的引用以及项目中的文件列表。而在 2.0 应用程序中，不再需要版本设置和文件列表，因为 Web 项目目录下的所有文件都被视为 Web 项目的一部分。<br />
　　3．代码分离模式。<br />
　　在 ASP.NET 1.1 中，代码分离模式使内容（例如 test.aspx）与代码（例如 test.aspx.cs）分离。内容页面从代码分离页面继承而来，代码分离页面包含用户和设计器生成的代码。<br />
　　ASP.NET 2.0 通过使用局部类来增强代码分离模式，使用 partial 关键字可以将单个类的代码分隔到两个独立的文件中。它允许一个类跨越多个文件。在新的代码分离模式中，内容页面从编译的类继承而来，它由相应的代码分离页面以及自动生成的存根文件组成，存根文件用于为内容页面中使用的控件定义字段声明。此项更改使自动生成的代码与用户的代码分离，并且使代码分离页面显著变小且更加简洁。局部类结构还降低了由于编辑设计器生成的代码而不小心破坏页面的风险。<br />
　　如果出错请检查是否有partial 关键字，否则添加 partial 关键字。<br />
　　4．语法检查。<br />
　　asp.net1.1程序，编译时不会检查aspx、aspcx等文件中的语法错误，而vs2005编译时会检查项目中所有的aspx、aspcx等文件中的语法，所以如果有语法错误，会导致编译无法通过。<br />
　　5．控件声明。<br />
　　如果在 .aspx 页面上声明了所有控件，则从代码分离文件中删除所有控件声明，否则报错：重复定义。<br />
　　6．（仅限于 C#）将事件挂钩代码从代码分离文件的 InitialzeComponent 函数移到 .aspx 页面中。<br />
　　请注意，此操作不适用于自动调用的事件，包括 Page_Init、Page_Load、Page_DataBind、Page_PreRender、Page_Unload、Page_Error、Page_AbortTransaction 和 Page_CommitTransaction。 <br />
　　7． 部署方式（预编译、完整编译、可更新站点等）。<br />
　　在 1.x 中，Web 应用程序是作为一个大型程序集而预编译和部署的。内容页面（*.aspx）不在服务器上编译，但可以在服务器上编辑。借助新的页面编译模式和目录结构，您就可以使用多种不同的配置来部署 ASP.NET 2.0 应用程序。一种情况，您可以预编译所有的 ASPX 页面并部署由完全编译好的程序集组成的 Web 应用程序。在这种模式下，您不能在服务器上轻松地更改该应用程序。另一种情况，您可以在不预编译任何代码的情况下部署应用程序。在这种配置下，您可以直接在服务器上更改该应用程序中的 .aspx 页面、代码分离文件或其他任何代码。当用户请求服务器上的页面时，页面将被动态编译。<br />
　　8．将 .aspx 页面中的所有 CodeBehind 属性更改为 CodeFile 属性<br />
　　CodeBehind: 指定包含与页关联的类的已编译文件的名称。该属性不能在运行时使用。<br />
提供此属性是为了与以前版本的 ASP.NET 的兼容，以实现代码隐藏功能。在 ASP.NET 2.0 版中，应改用 CodeFile 属性指定该源文件的名称，同时使用 Inherits 属性指定该类的完全限定名称。<br />
　　CodeFile <br />
　　指定指向页引用的代码隐藏文件的路径。此属性与 Inherits 属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效。<br />
　　9.将所有独立的代码文件和AssemblyInfo.cs都被移到 App_Code 目录下。 <br />
　　但运行转换向导之后，您可能会发现某些代码分离文件（例如，*.aspx.cs 或 *.ascx.vb）被移到 App_Code 目录下。这表明代码分离文件的内容页面含有格式不正确的 Codebehind 指令，并且没有进行正确设置。也就是说，转换向导不能确定该代码分离文件是否实际绑定到某个特定的 .aspx 页面。<br />
　　10.Web 服务<br />
　　在 ASP.NET 1.x 中，Web 服务 (.asmx) 自动拆分到空白标题页面 (.asmx) 和包含实际方法的代码分离文件中。 <br />
　　Asp.net2.0下：<br />
　　? 将代码分离类移到 App_Code 目录下，以便使其自动变为可通过应用程序中的任意 ASP.NET 页面访问。&nbsp; <br />
? 更改 .asmx 文件中的 CodeBehind 属性，以便指向新位置。<br />
（请注意，代码分离文件不使用局部类，因此继续使用 CodeBehind 属性。）&nbsp; <br />
? 将所有的默认、Friend 和 Internal 范围的声明更改为 Public。 <br />
　　在1.1到2.0的升级过程中，你遇到过什么样的问题呢？可以写下来让大家共同学习，少走弯路。 </font></p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166228.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-14 01:20 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/14/1166228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216599#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 01:20:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216599</link>
        <guid>http://leavingme.javaeye.com/blog/216599</guid>
      </item>
          <item>
        <title>ASP.NET 2.0的部署与1.1的区别 </title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216600" style="color:red;">http://leavingme.javaeye.com/blog/216600</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Verdana">对于熟悉ASP.NET1.1并一直使用VS.NET2003的用户来说，他们已经习惯了.NET1.1的web开发模型，这种&#8220;习惯&#8221;并不仅仅意味这双击Button，系统直接定位到Button按钮的事件处理中，更为主要的是习惯了.NET1.1在部署WEB应用程序的方便：在部署应用程序里，当您将本地开发的程序上传到ISP供应商为你提供的空间里时，您仅仅需要将*.ASPx和bin文件夹下的*.DLL文件拷贝到你的空间就可以了，而对于类似*.ASPx.cs和*.ASPx.resx您可以忽略不计。<br />
&nbsp;&nbsp;&nbsp; 如果您以后想升级应用程序也非常简单，只要将升级后的DLL文件覆盖原来的DLL文件即可。<br />
&nbsp;&nbsp;&nbsp; 然而，在ASP.NET2.0里，正如上篇文件介绍的，*.ASPx文件和*.ASPx.cs文件都是不完全类（partial class），这就使得想在部署web应用程序前预先编译 *.ASPx.cs变得不可能－－－这是由于这个条件的限制使得ASP.NET2.0默认是不能够将后台文件编译为二进制的DLL文件的。所以web开发人员在部署.NET2.0的应用程序时，只能够拷贝所有的源代码。<br />
&nbsp;&nbsp;&nbsp; 因此，当您使用VS.NET2005进行web开发时，默认的，如果您需要将生成的源代码（*.ASPx.cs）连同布局文件（*.ASPx）一同拷贝到服务商给你提供的web空间里。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 现在，您是不是对ASP.NET2.0的模型感觉到遗憾？至少我是，看看类似CommunityStarter、blogs的源代码，他们的源文件是如此的多，如果您拷贝到服务器给你提供的空间，需要非常的费时，而在.NET1.1里，我仅仅需要拷贝几个DLL文件就可以了，看来ASP.NET2.0的框架确实存在很大的局限性。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 不过，别着急，问题出现了总需要解决，这个解决办法就是扩展：ASP.NET1.1的Page指令里也就那几个主要的属性，进入CodeBehind已经由CodeFile取代，那么微软的那些程序员就只好拿Inherits开刀－－继续保留Inherits以便和.NET1.1兼容。－－－－这应该就是为什么.NET2.0仍然保留Inherits关键字的原因。<br />
&nbsp;&nbsp;&nbsp; 但是接下来还有一个问题：对于同样是.ASPX文件，我们知道.NET1.1的页面可以再.net2.0里运行，那么.NET框架怎么识别用户开发的*.ASPX页面是.NET1.1版本的还是.NET2.0版本的呢？<br />
&nbsp;&nbsp;&nbsp; 这个问题就是由Code*解决，如下：<br />
（1）如果您在Page指令里使用了 CodeFile属性，.NET框架自动认为您采用的是.NET2.0技术，后台文件也默认是不完全类<br />
（2）如果您在Page指令里使用了CodeBehind属性，.NET框架自动认为您采用的是.NET1.1技术，后台文件的类直接作为页面的基类<br />
（3）还有一个默认的，就是您的*.ASPx里即没有CodeFile也没有CodeBehind，那么系统如何认为呢？在这种情况下系统仍然认为您是使用.NET1.1的框架技术，其实本人感觉这还是为了考虑兼容性，因为.NET1.1版本里就可以省略CodeBehind,如果让.NET1.1和.NET2.0高度兼容就必须始终以.NET1.1为目标。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 知道了页面如何区分页面后，解下来继续上面的问题，如何解决部署难的问题。在ASP.NET2.0里，提供了一个新命令ASPnet_compiler.exe，默认的您可以在系统盘里找到，例如我的winXP系统里的默认位置在 c:\windows\microsoft.net\framework\版本号 目录里。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ASPnet_compiler.exe的使用较为复杂以后会介绍，以后会介绍，在用它之前先介绍它的基本功能。ASPnet_compiler.exe会将文件全部编译为二进制文件：清注意这里是全部，也就是使用该编译器后*.ASPX和*.ASPX.CS全部编译为*.DLL，原因还是前面介绍的那个规则：不管什么时候，要编译为DLL文件，都必须提供完整的类。<br />
&nbsp;&nbsp;&nbsp; 现在您可以知道ASP.NET2.0的高明了吧，在部署ASP.NET应用程序时，您可以有三种方式：<br />
（1）传统ASP.NET1.1方式：布局代码*.ASPX和编译后的后台bin文件夹下的DLL文件（部分代码+部分二进制）<br />
（2）默认ASP.NET2.0方式：所有布局代码和所有后台文件以源文件的形式存在（全部源代码）<br />
（3）改进后的ASP.NET2.0模式：此时所有布局代码*.ASPX和后台文件*.ASPX.CS都是以DLL的形式存在。（全部二进制）</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 最后，还要说一下全部编译后的二进制的问题，当你编译后可以发现有一个default.ASPx文件，可能你会问既然全部是DLL文件为什么还要default.ASPx文件呢？这个文件也没有内容，会不会是多余的？<br />
&nbsp;&nbsp;&nbsp; 要理解这个问题就需要转到IIS了，换句话说这就不再是ASP.NET2.0的工作范畴了。<br />
对于客户端请求，IIS首先会根据映射检查您所请求的文件存在不存在，如果不存在就直接提示您所请求的文件没有找到。&nbsp;&nbsp;&nbsp; 可以看到此时ASP.NET2.0框架还没有接管呢，解决这个文件最简单的方法就是不用检测文件是否存在，参考下图（，默认检查文件是否存在是选中的，更为详细的原因，可以参考.BLOGS配置），但是这个步骤虽然不复杂，可以对于许多应用程序来说都需要更改显然非常不现实，现在好了只要有了DEFAULT.asxp不用更改IIS配置也可以了<br />
所以，默认还是需要default.ASPx的。&nbsp; </font></p>
<p><font face="Verdana">参考了其它的资料，本人的理解，还可以把asp.net程序编译成aspx文件和dll文件共存的方式，方法是在aspnet_compiler.exe 后加上-u参数。具体这个方法的开关参数的使用方法，请参考另一篇文章。</font></p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166229.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-14 01:17 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/14/1166229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216600#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 01:17:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216600</link>
        <guid>http://leavingme.javaeye.com/blog/216600</guid>
      </item>
          <item>
        <title>ASP.NET从1.1到2.0的变更要点</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216601" style="color:red;">http://leavingme.javaeye.com/blog/216601</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>ASP.NET提供了两种组织代码的方式，不管是ASP.NET1.X还是ASP.NET2.0都是通用的<!--dvnews_ad_begin--><!--dvnews_ad_end--><br />
（1）内置代码分离<br />
这是最基本的一种方式，感觉是为了和传统的ASP兼容才提出的。这种方式同样用于介绍ASP.NET知识点，例如建立一个WebCodeSeparated.ASPx页面，可能的代码如下<br />
WebCodeSeparated.ASPx<br />
&lt;/HTML&gt;<br />
&lt;head&gt;<br />
&lt;script ruant="server"&gt;<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/HTML&gt;<br />
<br />
(2)页面布局和逻辑代码分离的文件，<br />
&nbsp;&nbsp; VS2003就采用的这种思想，例如上面的WebCodeSeparated.ASPx可能为<br />
WebCodeSeparated.ASPx和<br />
WebCodeSeparated.ASPx.cs<br />
为了关联两者关系，可以使用Codebehind和Inherits进行说明&nbsp;<br />
&nbsp;&nbsp; 在VS2005里，提供了parital关键字 <br />
<br />
现在把一个Label控件、一个TextBox控件和一个Button控件托放到WebCodeSeparated.ASPx上，最后生成的Source类似如下：<br />
&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebCodeSeparated.ASPx.cs" Inherits="WebCodeSeparated" %&gt;<br />
<br />
WebCodeSeparated.ASPx</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</p>
<p>&lt;HTML XMLns="http://www.w3.org/1999/xhtml" &gt;<br />
&lt;head runat="server"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;Untitled Page&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Label ID="Label1" runat="server" Text="Label"&gt;&lt;/ASP:Label&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:TextBox ID="TextBox1" runat="server"&gt;&lt;/ASP:TextBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/HTML&gt;</p>
<p>&nbsp;WebCodeSeparated.ASPx.cs<br />
<br />
</p>
<p>public partial class WebCodeSeparated : System.Web.UI.Page<br />
{<br />
&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; protected void Button1_Click(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text = "hello" + TextBox1.Text + "Welcome to ASP.NET2.0";<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p><br />
<br />
那么这段代码有什么特点呢？<br />
和ASP.NET1.1相比，这段代码有什么区别呢？<br />
首先，Page指令由由CodeBehind＝"WebCodeSeparated.ASPx.cs"改成了CodeFile="WebCodeSeparated.ASPx.cs"，为什么会有这样的改变呢？<br />
&nbsp; 这是因为，用CodeBehind的文件是在运行前编译的，而在运行时，其中的逻辑源代码文件可以不再使用。这给页面的的布局带来了非常的不便，请看下面示例子：</p>
<p style="color: #0000ff">&lt;%@ Page Language="C#" AutoEventWireup="true" %&gt;<br />
&nbsp;&lt;script lauguage="c#" runat="server" &gt;<br />
Button1_Click()<br />
{ Label1.Text = "hello" + TextBox1.Text + "Welcome to ASP.NET2.0";}<br />
&lt;/script&gt;<br />
&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Label ID="Label1" runat="server" Text="Label"&gt;&lt;/ASP:Label&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:TextBox ID="TextBox1" runat="server"&gt;&lt;/ASP:TextBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/HTML&gt; </p>
<p>&nbsp;</p>
<p>&nbsp; 这是单一的*.ASPx文件，显示的结果将和上面的一样。但是现在我想更改问候，例如改成如下代码，相当于中文版</p>
<p>&lt;%@ Page Language="C#" AutoEventWireup="true" %&gt;<br />
&nbsp; &lt;script lauguage="c#" runat="server" &gt;<br />
Button1_Click()<br />
{ Label1.Text = "你好" + TextBox1.Text + "欢迎进入ASP.NET2.0";}<br />
&lt;/script&gt;<br />
&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Label ID="Label1" runat="server" Text="Label"&gt;&lt;/ASP:Label&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:TextBox ID="TextBox1" runat="server"&gt;&lt;/ASP:TextBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/HTML&gt;<br />
那么当使用ASP.NET1.1版本在运行时，完全没有问题，显示中文版的问候。</p>
<p>然而，在ASP.NET1.1里，一般都是页面布局和代码分离的，上面代码在用Visual Studio.NET2003开发时，更多的写成如下的形式<br />
&lt;%@ Page Language="C#" AutoEventWireup="false"&nbsp; CodeBehind="*.ASPx.cs"%&gt;<br />
&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Label ID="Label1" runat="server" Text="Label"&gt;&lt;/ASP:Label&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:TextBox ID="TextBox1" runat="server"&gt;&lt;/ASP:TextBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/HTML&gt;&nbsp;<br />
<br />
后台代码文件*.ASPx.cs为<br />
Button1_Click()<br />
{ Label1.Text = "hello" + TextBox1.Text + "Welcome to ASP.NET2.0";}<br />
<br />
在开发时，由于当我们运行时（使用快捷键F5），系统自动将*.ASPx.cs编译为dll文件并放置在bin文件夹，然后供*.ASPx使用，这样以后如果我们需要将该页面部署到远程主机，例如您申请了一个 www.aspxcool.com域名和虚拟主机，你的Internet Server Provider（网络服务供应商）可能给你一个ftp帐户让你把页面文件上传到某个给定的文件夹下（例如wwww目录下），此时你上传时，只要上传*.ASPx和bin文件夹及其下面的dll文件就可以了<strong>，*.ASPx.cs源代码完全不需要（当然上传页可以</strong>），所以你现在应该感觉到了，如果我需要改变输出的问候为中文，该怎么办呢？<br />
直接更改*.ASPx.cs里的代码为<br />
Button1_Click()<br />
{ Label1.Text = "你好" + TextBox1.Text + "欢迎进入ASP.NET2.0";}<br />
可以吗？<br />
当然不可以，事实上该源代码文件你可能都没有上传，你从何处更改，即使上传你更改了也不其作用。没有办法，您只好重新用VS.NET2003打开*.ASPx，并修改*.ASPx.cs的Button1_Click为中文版，然后再用VS.NET2003进行编译，最后把编译好的BIN下面的DLL文件再拷贝到服务商提供的wwww/bin文件夹下，覆盖原有的文件，如此一系列动作可以说是牵一发而动全身，</p>
&nbsp;特别是你部署类似blogs、Community Server这样的大的项目时，更是为了一点的改动而重新编译整个项目，非常的麻烦。<br />
<br />
&nbsp;&nbsp; 现在ASP.NET2.0提供了CodeFile来改变这种情况，它可以使得*.ASPx.cs也是在运行时动态编译。所以在上面的例子里，如果您使用页面布局和逻辑代码分离的形式，在你更改过WebCodeSeparated.ASPx.cs里的源代码为中文版后，页面会在运行时进行显示。
<p>在上面代码里使用了partial，那么时候了该关键字有什么好处呢<br />
在ASP.NET1.1版本里，您应该知道，如果我们在WebForm1上放置了一个控件，例如ID为Button1的按钮则<br />
*.ASPx会做如下记录<br />
&lt;ASP:Button&nbsp; id="Button1" runat="server"&gt;</p>
<p>而*.ASPx.cs会做如下记录<br />
protected Button Button1 ;&nbsp; //定义了一个Button类对象Button1</p>
<p>&nbsp;&nbsp; 由于这种关系，使得系统的维护变的非常困难，特别是在稍微复杂的应用程序中，改动一点有时需要重新编译整个项目。而且更为难办的是，如果你在程序里按照如下使用<br />
*.ASPx<br />
protected Button Button1 ;&nbsp; //定义了一个Button类对象Button1<br />
而忘记在*.ASPx定义Button1，系统还会提示<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;未将对象引用设置为实例&#8221;的错误&nbsp;&nbsp;&nbsp; <br />
为了解决这些问题，.NET2.0才提出了partial 关键字，它使得如下的使用是正确的<br />
你在*.ASPx里定义了一个按钮如<br />
&lt;ASP:Button&nbsp; id="Button2" runat="server"&gt;<br />
这样您在*.ASPx.cs里就可以直接使用Button2，不用再定义类似 Button Button2;这样的对象，系统通过paritial自动将Button2关联起来。所以提高了维护性</p>
<p>（3）AutoEventWireup的属性由"false"改为了false，也就是说VWD2005主要支持隐式的事件代理处理<br />
private void InitializeComponent()<br />
&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;this.SubmitBtn.Click += new System.Web.UI.ImageClickEventHandler(this.SubmitBtn_Click);<br />
&nbsp;&nbsp;&nbsp;this.Load += new System.EventHandler(this.Page_Load);this.Load += new System.EventHandler(this.Page_Load);<br />
&nbsp;&nbsp;}<br />
现在VS更支持隐式的<br />
也就是前面介绍的OnClick的方式。</p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166230.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-14 00:19 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/14/1166230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216601#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 00:19:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216601</link>
        <guid>http://leavingme.javaeye.com/blog/216601</guid>
      </item>
          <item>
        <title>SQL注入攻击再度肆虐殃及大量网站</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216602" style="color:red;">http://leavingme.javaeye.com/blog/216602</a>&nbsp;
          发表时间: 2008年01月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>据研究人员称,上周一个自动SQL注入攻击劫掠了超过70,000个美国网站,并顺带攻击了访问这些网站的大量PC机用户.通过Google可以很容易搜索到受攻击的网站,网页内容千差万别,包括教育网和政府网域,而且几乎全部都是受信任站点.</strong>这是一次规模非常大的攻击行为,由于涉及的网站相当多样化,所以攻击者可能不仅仅是侵入到单组服务器群,而是通过这些网站都具有的漏洞进行攻击.<br />
<br />
</p>
<p>　　攻击者利用了微软SQL Server数据库产品上的漏洞进行SQL注入攻击.该攻击程序可以进入一般无法访问的系统表,受牵连的表告诉黑客程序可以将恶意代码插入到数据库的什么地方.访问者一旦连接到该数据库,就会感染上各种恶意软件,包括在去年十月份发现的RealPlayer漏洞.微软的数据访问组件在十五个月前发现的一个漏洞,虽然在2006年四月就打上了补丁,不过也成为这次攻击的一个目标缺陷.<br />
<br />
　　这些黑客费尽心思准备这次的网站大规模攻击,但使用的却是老得发霉的客户端攻击方法,查找网站上的登录和注册系统,实施注入攻击.大部分的受感染网站很快就把病毒清除干净了.不过让人感到奇怪的并不是黑客攻击的手法,而是攻击涉及的用户面如此广泛.黑客们只是利用了所有类型的网站都放松警惕的方法,复制引擎然后让其疯狂的运行而已.传统的注入攻击能够通过解读网站或应用程序返回来的结果,调整攻击方法.这种强迫且自动的攻击方法,使同时发动多种向量的攻击成为可能.<br />
<br />
　　终端用户很难保护自己免受这类SQL注入攻击.建议用户经常测试自己的系统.市面上又很多工具和服务可以帮助你洞悉系统存在哪些漏洞,帮助你了解这些漏洞的发生原理以及如何防止受到攻击.</p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166232.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-11 02:24 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/11/1166232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216602#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jan 2008 02:24:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216602</link>
        <guid>http://leavingme.javaeye.com/blog/216602</guid>
      </item>
          <item>
        <title>Movie Database（电影数据库）</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216603" style="color:red;">http://leavingme.javaeye.com/blog/216603</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1a. 列出获得不少于30000 votes（选票）的电影． [显示 title, votes]<br />
SELECT title, votes<br />
&nbsp;FROM movie<br />
&nbsp;WHERE votes&gt;=30000<br />
<br />
1b. 电影'Citizen Kane'的首映年份．<br />
SELECT yr FROM movie WHERE title='Citizen Kane'<br />
<br />
1c. 列出包含the Police Academy（警校）字样的title（电影名称）和 score（得分） films.<br />
SELECT title, score FROM movie<br />
&nbsp; WHERE title LIKE 'Police Academy%'<br />
<br />
1d. 列出所有the Star Trek movies（星际系列电影）,显示title（电影标题）和score（得分）. 按电影的发行 yr（年份）排序.<br />
SELECT title, score FROM movie<br />
&nbsp;WHERE title LIKE 'Star Trek%'<br />
&nbsp;ORDER BY yr<br />
<br />
1e. 列出名称中包含'Dog'的电影名和得分．<br />
SELECT title, score FROM movie<br />
&nbsp; WHERE title LIKE '%Dog%'<br />
<br />
2a. 列出id为 1, 2, 3的电影的名称．<br />
SELECT title FROM movie WHERE id IN (1,2,3)<br />
<br />
2b. 电影'Glenn Close' 的ID号是多少?<br />
SELECT id FROM actor WHERE name= 'Glenn Close'<br />
<br />
2c. 电影'Casablanca' 的ID号是多少?<br />
SELECT id FROM movie WHERE title='Casablanca'<br />
<br />
上面几道题基本上是对之前的知识做个回顾。下面正式进入多表连接<br />
3a. 显示id=1的电影'Star Wars'（星球大战）中演员（角色）名单．<br />
SELECT name<br />
&nbsp; FROM casting, actor<br />
&nbsp; WHERE movieid=1<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
<br />
3b. 显示电影'Alien'的演员（角色）名单 ．<br />
SELECT name<br />
&nbsp; FROM movie, casting, actor<br />
&nbsp; WHERE title='Alien'<br />
&nbsp;&nbsp;&nbsp; AND movieid=movie.id<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
这道题将三张表连接起来。表movie和actor是多对多的关系，因此需要一张角色表casting来连接他们，那么他们分别和casting都是一对多的关系，通过外键来进行联系。<br />
<br />
3c. 显示有'Harrison Ford'参演的电影名称．<br />
SELECT title<br />
&nbsp; FROM movie, casting, actor<br />
&nbsp;WHERE name='Harrison Ford'<br />
&nbsp;&nbsp;&nbsp; AND movieid=movie.id<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
<br />
3d. 显示有'Harrison Ford'参演的电影名称，但'Harrison Ford'在该影片中不是主角（即在角色表中不是排名第一）<br />
SELECT title<br />
&nbsp; FROM movie, casting, actor<br />
&nbsp;WHERE name='Harrison Ford'<br />
&nbsp;&nbsp;&nbsp; AND movieid=movie.id<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
&nbsp; AND ord&gt;1<br />
这道题又加上了个ord&gt;1的条件，也就是说列出不是主角的电影名。<br />
<br />
3e. 显示1962年发行的电影以及该影片中主角（即在角色表中排名第一）<br />
SELECT title, name<br />
&nbsp; FROM movie, casting, actor<br />
&nbsp;WHERE yr=1962<br />
&nbsp;&nbsp;&nbsp; AND movieid=movie.id<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
&nbsp;&nbsp;&nbsp; AND ord=1<br />
<br />
下面几道题稍微有点难度。<br />
4a. 'John Travolta'哪一年最忙？ 显示出他每年的出演电影数量．<br />
&nbsp;SELECT yr, COUNT(movie.id)<br />
&nbsp; FROM movie, casting, actor<br />
&nbsp; WHERE name='John Travolta'<br />
&nbsp;&nbsp;&nbsp; AND movieid=movie.id<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
&nbsp;&nbsp;&nbsp; GROUP BY yr<br />
这道题除了连接表之外，还加上了分组。<br />
<br />
4b. 列出有'Julie Andrews'参演的所有电影名称以及该片的主角．<br />
SELECT title, name<br />
&nbsp; FROM movie, casting, actor<br />
&nbsp; WHERE movieid=movie.id<br />
&nbsp;&nbsp;&nbsp; AND actorid=actor.id<br />
&nbsp;&nbsp;&nbsp; AND ord=1<br />
&nbsp;&nbsp;&nbsp; AND movieid IN<br />
&nbsp;&nbsp;&nbsp; (SELECT movieid FROM casting, actor<br />
&nbsp;&nbsp;&nbsp;&nbsp; WHERE actorid=actor.id<br />
&nbsp;&nbsp;&nbsp;&nbsp; AND name='Julie Andrews')<br />
这道题要复杂点。在分析这道题的时候，首先应该从大范围开始考虑，也就是说先将表连接起来后，过滤掉所有没有Julie Andrews'参与的电影，然后再加上显示出该电影主角这一条件。<br />
<br />
4c. 列出那些最起码在10部电影中出任过主角的演员．<br />
SELECT name<br />
&nbsp;&nbsp;&nbsp; FROM casting JOIN actor<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON&nbsp; actorid = actor.id<br />
&nbsp;&nbsp;&nbsp; WHERE ord=1<br />
&nbsp;&nbsp;&nbsp; GROUP BY name<br />
&nbsp;&nbsp;&nbsp; HAVING COUNT(movieid)&gt;=10<br />
<br />
4d. 按演员人数的多少依次列出1978 的电影以及演员数．人数最多排在最前．<br />
SELECT title, COUNT(actorid)<br />
&nbsp; FROM casting, movie<br />
&nbsp; WHERE yr=1978<br />
&nbsp;&nbsp;&nbsp; AND movieid=movie.id<br />
&nbsp; GROUP BY title<br />
&nbsp; ORDER BY 2 DESC<br />
这里2表示查询出来的表中第二列字段<br />
<br />
4e. 列出所有和'Art Garfunkel'合作过的演员（不要列出'Art Garfunkel'他自己）.<br />
SELECT DISTINCT name<br />
&nbsp; FROM actor, casting<br />
&nbsp; WHERE actorid=actor.id<br />
&nbsp;&nbsp;&nbsp; AND movieid IN (<br />
&nbsp;&nbsp;&nbsp; SELECT movieid FROM casting, actor<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE actorid=actor.id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND name='Art Garfunkel'<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp; AND NOT name='Art Garfunkel'&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/leavingme/aggbug/1166233.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-09 04:23 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/09/1166233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216603#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 04:23:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216603</link>
        <guid>http://leavingme.javaeye.com/blog/216603</guid>
      </item>
          <item>
        <title>连接查询_左连接/右连接/全连接的区别</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216604" style="color:red;">http://leavingme.javaeye.com/blog/216604</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>介绍了表连接，更确切的说是inner joins內连接． <br />
內连接仅选出两张表中互相匹配的记录．因此，这会导致有时我们需要的记录没有包含进来。 <br />
为更好的理解这个概念，我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。 <br />
<br />
party(Code,Name,Leader) <br />
Code: 政党代码 <br />
Name: 政党名称 <br />
Leader: 政党领袖 <br />
<br />
msp(Name,Party,Constituency) <br />
Name: 议员名 <br />
Party: 议员所在政党代码 <br />
Constituency: 选区 <br />
<br />
在介绍左连接、右连接和全连接前，有一个数据库中重要的概念要介绍一下，即空值(NULL)。 <br />
<br />
有时表中，更确切的说是某些字段值，可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。 <br />
空值不等同于字符串中的空格，也不是数字类型的0。因此，判断某个字段值是否为空值时不能使用=,&lt;&gt;这些 <br />
判断符。必需有专用的短语：IS NULL 来选出有空值字段的记录，同理，可用 IS NOT NULL 选出不包含空值的记录。 <br />
<br />
例如：下面的语句选出了没有领导者的政党。（不要奇怪，苏格兰议会中确实存在这样的政党） <br />
<br />
SELECT code, name FROM party <br />
WHERE leader IS NULL <br />
<br />
又如：一个议员被开除出党，看看他是谁。(即该议员的政党为空值) <br />
<br />
SELECT name FROM msp <br />
WHERE party IS NULL <br />
<br />
好了，让我们言归正传，看看什么叫左连接、右连接和全连接。 <br />
<br />
A left join（左连接）<font color="#ff0000">包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。 </font><br />
同理，也存在着相同道理的 right join（右连接），即<font color="#ff0000">包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录</font>。 <br />
而<font color="#ff0000">full join(全连接)顾名思义，左右表中所有记录都会选出来</font>。 <br />
<br />
讲到这里，有人可能要问，到底什么叫：包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。 <br />
Ok,我们来看一个实例： <br />
<br />
SELECT msp.name, party.name <br />
FROM msp JOIN party ON party=code <br />
<br />
这个是我们上一节所学的Join(注意：也叫inner join)，这个语句的本意是列出所有议员的名字和他所属政党。 <br />
你可以在　http://sqlzoo.cn/4.htm 亲自执行一下该语句，看看结果是什么。 <br />
<br />
很遗憾，我们发现该查询的结果少了两个议员：Canavan MSP, Dennis。为什么，因为这两个议员不属于任 <br />
和政党，即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了？这是因为空值在 <br />
作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配，即 <br />
FROM msp JOIN party ON party=code　没有把该记录连接起来，而是过滤出去了。 <br />
在该短语中，msp在Join的左边，所有称为左表。party在Join的右边，所有称为右表。 <br />
<br />
Ok,现在再看看这句话，&#8220;包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录&#8221;， <br />
意思应该很明白了吧。执行下面这个语句，那两个没有政党的议员就漏不了了。 <br />
<br />
SELECT msp.name, party.name <br />
FROM msp LEFT JOIN party ON party=code <br />
<br />
关于右连接,看看这个查询就明白了： <br />
<br />
SELECT msp.name, party.name <br />
FROM msp RIGHT JOIN party ON msp.party=party.code <br />
<br />
这个查询的结果列出所有的议员和政党，包含没有议员的政党，但不包含没有政党的议员。 <br />
<br />
那么既要包含没有议员的政党，又要包含没有政党的议员该怎么办呢，对了，全连接(full join)。 <br />
<br />
SELECT msp.name, party.name <br />
FROM msp FULL JOIN party ON msp.party=party.code</p>
<img src="http://www.cnblogs.com/leavingme/aggbug/1166234.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-09 00:06 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/09/1166234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216604#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 00:06:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216604</link>
        <guid>http://leavingme.javaeye.com/blog/216604</guid>
      </item>
          <item>
        <title>ASP.NET与MySQL数据库简明图示入门教程</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216605" style="color:red;">http://leavingme.javaeye.com/blog/216605</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://tech.sina.com.cn/s/2005-05-08/1054600841.shtml" target="_blank">http://tech.sina.com.cn/s/2005-05-08/1054600841.shtml</a><img src="aggbug/2030494.aspx" height="1" width="1" /><img src="http://www.cnblogs.com/leavingme/aggbug/1166235.html" height="1" width="1" /><br /><br /><div align="right"><a href="http://leavingme.cnblogs.com/" target="_blank" style="text-decoration:none;">陈源</a> 2008-01-09 00:03 <a href="http://www.cnblogs.com/leavingme/archive/2008/01/09/1166235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://leavingme.javaeye.com/blog/216605#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 00:03:00 +0800</pubDate>
        <link>http://leavingme.javaeye.com/blog/216605</link>
        <guid>http://leavingme.javaeye.com/blog/216605</guid>
      </item>
          <item>
        <title>软件也忽悠人--揭穿号称内存占用极低的软件的诡计</title>
        <author>leavingme</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://leavingme.javaeye.com">leavingme</a>&nbsp;
                    链接：<a href="http://leavingme.javaeye.com/blog/216606" style="color:red;">http://leavingme.javaeye.com/blog/216606</a>&nbsp;
          发表时间: 2006年11月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">软件也忽悠人--揭穿号称内存占用极低的软件的诡计 </p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">我实在不愿意提起这个话题.后来在网上看到几篇文章,深深感觉到,已经有程序员站出来,揭穿这个忽悠了千百万用户的诡计了...<br />附2篇文章的地址:<br /><a href="http://blog.csdn.net/biku/archive/2006/07/06/886038.aspx">http://blog.csdn.net/biku/archive/2006/07/06/886038.aspx</a><br /><a href="http://blog.csdn.net/zlt982001/archive/2005/08/28/466879.aspx">http://blog.csdn.net/zlt982001/archive/2005/08/28/466879.aspx</a><br />我这篇文章无非是归纳了几篇文章的内容,并深入的阐明恶意使用该技术带来的坏处.<br />请一味追求低内存软件的用户们注意了:什么才应该是选择软件的主要因素.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">物理内存和虚拟内存</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了.看机器配置的时候,看的就是这个物理内存.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">如果执行的程序很大或很多,就会导致物理内存消耗殆尽.为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">一个程序,不可避免地要用到虚拟内存,因为不频繁执行或者已经很久没有执行的代码,没有必要留在物理内存中,只会造成浪费;放在虚拟内存中,等执行这部分代码的时候,再调出来.<br />Windows 的任务管理器可以帮助我们看到进程的虚拟内存.调出任务管理器,点击菜单&#8220;查看&#8221;－&#8220;选择列&#8221;,在出现的窗口中,钩上&#8220;虚拟内存大小&#8221;,如图1:</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console"><br />点&#8220;确定&#8221;,这个时候,进程列表中已经显示各进程的虚拟内存大小,如图2:</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console"><br />一个程序到底应该使用多少虚拟内存呢?不一定,但是应该以恰到好处的符合虚拟内存原本作用为最好.<br />下面将揭穿表面看起来调用了大量图片、大量运行库的程序,为什么才&#8220;占用&#8221;不到 1 MB 的内存的诡计.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">原来是 SetProcessWorkingSetSize 函数</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">MSDN 对该函数的表述(翻译):使用这个函数来设置应用程序最小和最大的运行空间,只会保留需要的内存.当应用程序被闲置或系统内存太低时,操作系统会自动调用这个机制来设置应用程序的内存.应用程序也可以使用 VirtualLock 来锁住一定范围的内存不被系统释放;当你加大运行空间给应用程序,你能够得到的物理内存取决于系统,这会造成其他应用程序降低性能或系统总体降低性能,这也可能导致请求物理内存的操作失败,例如:建立 进程,线程,内核池,就必须小心的使用该函数.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">也就是说,该函数不是节省内存,而是强制把进程的物理内存搬到虚拟内存中.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">另外有一些资料上说,该函数&#8220;将有可能导致缺页中断,严重影响性能&#8221;.<br />函数原型:<br />BOOL SetProcessWorkingSetSize(<br />HANDLE hProcess,<br />SIZE_T dwMinimumWorkingSetSize,<br />SIZE_T dwMaximumWorkingSetSize<br />);<br />我们用 VB 来做这么一个简单的例子,是程序占用 300 KB 内存吧.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">建立一个标准的 VB 工程,在 Form1 中放置一个 Timer1 ,把 Interval 属性设置为 1000 (即 1 秒).然后在代码编辑框中输入以下代码:</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">Private Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal hProcess As Long, ByVal dwMinimumWorkingSetSize As Long, ByVal dwMaximumWorkingSetSize As Long) As Long<br />Private Declare Function GetCurrentProcess Lib "kernel32" () As Long<br />Private Sub Timer1_Timer()<br />SetProcessWorkingSetSize GetCurrentProcess(), 50000, 100000<br />End Sub<br />然后生成 工程1.exe,执行,调出任务管理器查看,发现内存占用才 320 KB.如果把定时器关闭,这进程的内存一般 4 MB左右.<br />必须定时执行该函数,否则虚拟内存会慢慢被调出来,恢复原来的内存大小.<br />如果要使一个本来需要占用大量内存的程序减低到几百 KB ,使用同样的方法即可.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">诡计带来的危害</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">如果 SetProcessWorkingSetSize 函数被正常使用,是非常有用处的.但是为了蒙骗用户的眼睛,每秒,甚至几十毫秒就把大量内存往虚拟内存里面压,就会带来无可预计的危害.看看这篇文章怎么说:&#8220;因为他只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用.如果你强制使用该方法来设置程序占用的内存,那么可能在一定程度上反而会降低系统性能,因为系统需要频繁的进行内存和硬盘间的页面交换.&#8221;.</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">没错,如果你使用了这类软件,意味着你的硬盘将每秒将 I/O 大量数据;硬盘的磁针将拼命旋转...(当然硬盘磁针不可能不旋转^_^,只是选择得更厉害而已).</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">不是说 BT 很伤内存吗?不然,因为现在大多 BT 软件都有缓存技术.且看 Bitcomet 官方对缓存技术的说明:&#8220;传统BT高速下载时硬盘会响得很厉害,这是大量的随机读取造成的.... BitComet可以由用户设置缓存大小.... 可以明显地看出牺牲一小部分内存作缓存对硬盘的保护作用.&#8221;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">是不是有种心寒的感觉?一类软件宁愿牺牲内存,也要减少保护硬盘;而另外一类软件,却为了欺骗用户,让CPU、硬盘更加奔波......</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">抓一个凶手</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">这类软件不少,我以其中一个桌面工具为例,揭穿它的假面具(不点名字了).运行该软件后,随意操作一下,然后打开进程管理器,把虚拟内存列调出来,找到该进程,如图3:</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">OK,20 MB 虚拟内存,而只有 632 KB 物理