<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>小废博客之web开发</title>
    <description>小废就是我</description>
    <link>http://xiaofeizm55333.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>javaScript 的 StringBuffer 类</title>
        <author>xiaofeizm55333</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiaofeizm55333.javaeye.com">xiaofeizm55333</a>&nbsp;
          链接：<a href="http://xiaofeizm55333.javaeye.com/blog/103552" style="color:red;">http://xiaofeizm55333.javaeye.com/blog/103552</a>&nbsp;
          发表时间: 2007年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>java 中的字符串拼装一般都不直接用String ，而是使用 StringBuffer，主要是出于性能考虑</p>
<p>javaScript 中也是一样的，直接使用 &ldquo;2&rdquo;+&ldquo;3&rdquo; 这种字符串相加对于性能消耗是很大的。</p>
<p>但是 javaScript 中没有现成的 StringBuffer 类，要自己封装，从网上找了几个，都写得太简单了</p>
<p>于是自己动手改写了一个，封装了一下，提供给大家使用。</p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="comment">/** </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;StringBuffer&nbsp;Class,&nbsp;to&nbsp;join&nbsp;two&nbsp;string&nbsp;is&nbsp;the&nbsp;most&nbsp;use </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;xiaofei&nbsp;2007-7-20&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;StringBuffer() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>._strings&nbsp;=&nbsp;[]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(arguments.length==1) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>._strings.push(arguments[0]); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>StringBuffer.prototype.append&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>._strings.push(str); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>StringBuffer.prototype.toString&nbsp;=&nbsp;</span><span class="keyword">function</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>._strings.join(</span><span class="string">&quot;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="comment">/*&nbsp;返回长度&nbsp;*/</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>StringBuffer.prototype.length&nbsp;=&nbsp;</span><span class="keyword">function</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;str&nbsp;=&nbsp;</span><span class="keyword">this</span><span>._strings.join(</span><span class="string">&quot;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;str.length; &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="comment">/*&nbsp;删除后几位字符&nbsp;*/</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>StringBuffer.prototype.del&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(num) &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;len&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.length(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;str&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.toString(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;str.slice(0,len-num); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>._strings&nbsp;=&nbsp;[]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>._strings.push(str); &nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://xiaofeizm55333.javaeye.com/blog/103552#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 21 Jul 2007 09:01:55 +0800</pubDate>
        <link>http://xiaofeizm55333.javaeye.com/blog/103552</link>
        <guid>http://xiaofeizm55333.javaeye.com/blog/103552</guid>
      </item>
      <item>
        <title>javaScript中的Function对象的说明</title>
        <author>xiaofeizm55333</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiaofeizm55333.javaeye.com">xiaofeizm55333</a>&nbsp;
          链接：<a href="http://xiaofeizm55333.javaeye.com/blog/83591" style="color:red;">http://xiaofeizm55333.javaeye.com/blog/83591</a>&nbsp;
          发表时间: 2007年05月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">很多人都不理解javaScript 中的Function是什么，与function 又有什么区别<br />
简单的说呢 function 是函数，而Function是类</font></p>
<p><font face="Arial">在javaScript 我们声明一个函数，实际上是创建了一个 Function 类的对象。</font></p>
<p><font face="Arial">例如：</font><font face="Arial">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;sayHello(name) &nbsp;&nbsp;</span></span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;alert(</span><span class="string">&quot;Hello&nbsp;&quot;</span><span>+name); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>这是一个最简单的函数，参数为name，然后在参数前加上&quot;Hello &quot;,输出<br />
同样，我们也可以这样声明函数<br />
var sayHello = new Function(&quot;name&quot;,&quot;alert('Hello '+name)&quot;);<br />
在这种形式中,第一个参数是sayHello 函数的参数，第二个参数是sayHello 函数的函数体</p>
<p><font face="Arial">通过这种形式，我们可以很清楚的看出所谓的函数只不过是Function类的一个对象<br />
而函数名只不过是对这个对象的引用。可以简单的把函数名理解成为一个指针，指向所引用的<br />
Function 类的实例。</font></p>
<p><font face="Arial">因为函数名只不过是对象名，所以可以可以把函数名作为参数传递，如下：</font><font face="Arial"><br />
</font><font face="Arial">
<div class="code_title">
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;callSay(funNam,argu) &nbsp;&nbsp;</span></span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;funNam(argu); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>callSay(sayHello,</span><span class="string">&quot;xiaofei&quot;</span><span>); &nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p>ok，看到了，你完全可以把函数名当一个变量名来使用，因为它就是一个变量名。<br />
你也可以这么使用<br />
</p>
<div class="code_title">js 代码</div>
</font><font face="Arial"></font><font face="Arial">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;sayHello() &nbsp;&nbsp;</span></span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;alert(</span><span class="string">&quot;Hello&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;sayBye() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;alert(</span><span class="string">&quot;Bye&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>sayHello&nbsp;=&nbsp;sayBye;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>这样 sayHello 和 sayBye 所指向的就是同一个函数，也就是说他们指向同一个Function类的实例。</p>
<p><font face="Arial">Function类，对于我们实际编程来说，很少使用到，但是理解它，有助于我们对于javaScript中函数的理解。</font></p>
<p><font face="Arial">Ok，既然函数只是Function类的一个对象，一个实例，所以自然地，它就会有方法和属性。<br />
属性：length--代表函数定义的形参个数，prototype--原型属性，相信这是大家都非常熟悉的一个属性，可以用它来实现构造类，还有arguments，constructor，callee，caller等<br />
方法：valueOf()，toString() --这两个方法返回的都是函数的源代码，apply(),call() 这两个方法大同小异，区别就是参数不同。</font></p>
<p><font face="Arial">现在我们应该清楚，函数名就是变量名。</font></p>
</font></p>
</font></p>
<div class="code_title">js 代码</div>
          <br/>
          <span style="color:red;">
            <a href="http://xiaofeizm55333.javaeye.com/blog/83591#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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>Sun, 27 May 2007 17:35:48 +0800</pubDate>
        <link>http://xiaofeizm55333.javaeye.com/blog/83591</link>
        <guid>http://xiaofeizm55333.javaeye.com/blog/83591</guid>
      </item>
      <item>
        <title>ajax jsp 无刷新上传文件</title>
        <author>xiaofeizm55333</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiaofeizm55333.javaeye.com">xiaofeizm55333</a>&nbsp;
          链接：<a href="http://xiaofeizm55333.javaeye.com/blog/81120" style="color:red;">http://xiaofeizm55333.javaeye.com/blog/81120</a>&nbsp;
          发表时间: 2007年05月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; 首先要说的就是 ajax 是无法实现上传文件的，可以想一下ajax与后台通信都是通过传递字符串，怎么能传递文件呢？其实出于安全考虑js是不能操作文件的，所以就不要再说用ajax来实现文件的上传了，这是不可能的。<br />
&nbsp;&nbsp;&nbsp; 而本文实现的文件上传也是无页面刷新的，可以说是一种&quot;类似AJAX&quot;方法。<br />
&nbsp;&nbsp;&nbsp; 开始之前先说两句无关的，其实在ajax出现之前，web应用也可以是无刷新的，那时大多通过IFrame来做到这一点。当然Ajax出现之后，人们一窝蜂地投奔Ajax 的阵营了，iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。ps：Ajax技术基本上可以说是由google公司带起来的，但少Gmail中上传文件用的还是 IFrame，所以说使用IFrame来上传文件是最好的选择。<br />
&nbsp;&nbsp;&nbsp; 我在这里这里用的技术是jsp，其实asp，php等也是一样可以这么实现的<br />
&nbsp;&nbsp;&nbsp; 一共两个文件就可实现：index.html 和 upload.jsp，在这里讲解一下，文后会附上源码<br />
<br />
--index.html<br />
<font color="#800080"><br />
<span><span><span><span></span></span></span></span></font><span>
<div class="code_title">html&nbsp;代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>＜html＞ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>＜body＞ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜form&nbsp;action=</span><span class="string">&quot;upload.jsp&quot;</span><span>&nbsp;id=</span><span class="string">&quot;form1&quot;</span><span>&nbsp;name=</span><span class="string">&quot;form1&quot;</span><span>&nbsp;encType=</span><span class="string">&quot;multipart/form-data&quot;</span><span>&nbsp;&nbsp;method=</span><span class="string">&quot;post&quot;</span><span>&nbsp;target=</span><span class="string">&quot;hidden_frame&quot;</span><span>&nbsp;＞ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜input&nbsp;type=</span><span class="string">&quot;file&quot;</span><span>&nbsp;id=</span><span class="string">&quot;file&quot;</span><span>&nbsp;name=</span><span class="string">&quot;file&quot;</span><span>&nbsp;style=</span><span class="string">&quot;width:450&quot;</span><span>＞ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜INPUT&nbsp;type=</span><span class="string">&quot;submit&quot;</span><span>&nbsp;value=</span><span class="string">&quot;上传文件&quot;</span><span>＞＜span&nbsp;id=</span><span class="string">&quot;msg&quot;</span><span>＞＜/span＞ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜br＞ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜font&nbsp;color=</span><span class="string">&quot;red&quot;</span><span>＞支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传＜/font＞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜iframe&nbsp;name='hidden_frame'&nbsp;id=</span><span class="string">&quot;hidden_frame&quot;</span><span>&nbsp;style='display:none'＞＜/iframe＞ &nbsp;&nbsp;</span></li>
    <li class=""><span>＜/form＞ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜/body＞ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/html＞ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜script&nbsp;type=</span><span class="string">&quot;text/javascript&quot;</span><span>＞ &nbsp;&nbsp;</span></li>
    <li class=""><span>function&nbsp;callback(msg) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">&quot;file&quot;</span><span>).outerHTML&nbsp;=&nbsp;document.getElementById(</span><span class="string">&quot;file&quot;</span><span>).outerHTML; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">&quot;msg&quot;</span><span>).innerHTML&nbsp;=&nbsp;</span><span class="string">&quot;＜font&nbsp;color=red＞&quot;</span><span>+msg+</span><span class="string">&quot;＜/font＞&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/script＞&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
<font color="#000000">&nbsp;index.html 中主要要做的就是写一个 form 和 iframe ，并把 form 的 target 设为 iframe 的名字，注意要把 iframe 设为不可见，其他的都是正常的文件上传的写法，这样刷新的页面就是这个隐藏的 Iframe ，而在 index.html 中是不会有页面刷新的，js的 callback 方法是回调方法。用于清空文件上传框和显示后台信息，注意清空文件上传框的方法，和普通方法有点不一样。</font><br />
<br />
--upload.jsp<br />
<!--page language="java" contentType="text/html; charset=gb2312"--><br />
<!--page import="com.jspsmart.upload.SmartUpload-->
<div class="code_title">jsp 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>＜%@&nbsp;page&nbsp;language=</span><span class="string">&quot;java&quot;</span><span>&nbsp;contentType=</span><span class="string">&quot;text/html;&nbsp;charset=gb2312&quot;</span><span>&nbsp;%＞ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>＜%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">&quot;com.jspsmart.upload.SmartUpload&quot;</span><span>%＞ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜% &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//新建一个SmartUpload对象 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;SmartUpload&nbsp;su&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SmartUpload(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传初始化 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.initialize(pageContext); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;设定上传限制 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//1.限制每个上传文件的最大长度。 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setMaxFileSize(</span><span class="number">10000000</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//2.限制总上传数据的长度。 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setTotalMaxFileSize(</span><span class="number">20000000</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//3.设定允许上传的文件（通过扩展名限制）,仅允许doc,txt文件。 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setAllowedFilesList(</span><span class="string">&quot;doc,txt,jpg,rar,mid,waw,mp3,gif&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;sign&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//4.设定禁止上传的文件（通过扩展名限制）,禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有扩展名的文件。 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.setDeniedFilesList(</span><span class="string">&quot;exe,bat,jsp,htm,html&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.upload(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//将上传文件保存到指定目录 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.save(</span><span class="string">&quot;c:\\&quot;); </span>&nbsp;</li>
    <li class="alt"><span><span class="string"></span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign&nbsp;=&nbsp;false; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;} </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;if(sign==true) </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(&quot;</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;success')＜/script＞</span><span class="string">&quot;); </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}else </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(&quot;</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;error')＜/script＞&quot;); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>%＞ &nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
<br />
<br />
<font color="#000000">upload.jsp 中只要注意最后输出的格式就可以了。其实原理就是输出一段js代码到 iframe 中，然后在iframe中来控制它的父页面。<br />
<br />
&nbsp;&nbsp;&nbsp; OK，至此一个无刷新的页面上传组件就做好了，</font><font color="#800080"><font color="#000000">不要忘了在 WEB-INF/lib 下加上必须的 jspSmartUpload.jar 包</font></font><font color="#800080"><font color="#000000">。<br />
&nbsp;&nbsp;&nbsp; 需要说明的是使用Iframe来上传，状态栏还是会有刷新的，因为iframe 中的页面刷新了嘛，但是外部页面，就是你所看到的页面是没有刷新的，所以也可以说是类似Ajax上传。</font></font></span>
          <br/>
          <span style="color:red;">
            <a href="http://xiaofeizm55333.javaeye.com/blog/81120#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 May 2007 16:48:27 +0800</pubDate>
        <link>http://xiaofeizm55333.javaeye.com/blog/81120</link>
        <guid>http://xiaofeizm55333.javaeye.com/blog/81120</guid>
      </item>
      <item>
        <title>javaScript 中 call 函数的用法说明</title>
        <author>xiaofeizm55333</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiaofeizm55333.javaeye.com">xiaofeizm55333</a>&nbsp;
          链接：<a href="http://xiaofeizm55333.javaeye.com/blog/80913" style="color:red;">http://xiaofeizm55333.javaeye.com/blog/80913</a>&nbsp;
          发表时间: 2007年05月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          javaScript 中的 call() 是一个奇妙的方法，但也是一个让人迷惑的方法，先看一下官方的解释：<br />
<br />
call 方法<br />
请参阅<br />
应用于：Function 对象<br />
要求<br />
版本  5.5<br />
调用一个对象的一个方法，以另一个对象替换当前对象。<br />
<br />
call([thisObj[,arg1[, arg2[,&nbsp;  &nbsp;[,.argN]]]]])<br />
参数<br />
thisObj <br />
可选项。将被用作当前对象的对象。 <br />
arg1, arg2, , argN  <br />
可选项。将被传递方法参数序列。 <br />
说明<br />
call 方法可以用来代替另一个对象调用一个方法。call  方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。<br />
<br />
如果没有提供 thisObj 参数，那么 Global  对象被用作 thisObj。<br />
<br />
-------------------------------------------------------------------------------------------<br />
乍一看，很容易把人看迷胡，先做一些简单的说明<br />
obj1.method1.call(obj2,argument1,argument2)<br />
如上，call的作用就是把obj1的方法放到obj2上使用，后面的argument1..这些做为参数传入．<br />
<br />
举一个具体的例子<br />
<font color="#000000"> f</font><font color="#000000">unction add(a,b)<br />
{<br />
&nbsp;&nbsp;&nbsp; alert(a+b);<br />
}<br />
function sub(a,b)<br />
{<br />
&nbsp;&nbsp;&nbsp; alert(a-b);<br />
}<br />
<br />
add.call(sub,3,1); </font><br />
<br />
这个例子中的意思就是用 add 来替换 sub，add.call(sub,3,1) == add(3,1) ，所以运行结果为：alert(4); // 注意：js 中的函数其实是对象，函数名是对 Function 对象的引用。<br />
<br />
<br />
看一个稍微复杂一点的例子<br />
<br />
function Class1()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.name = &quot;class1&quot;;<br />
<br />
&nbsp;&nbsp;&nbsp; this.showNam = function()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(this.name);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
function Class2()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.name = &quot;class2&quot;;<br />
}<br />
<br />
var c1 = new Class1();<br />
var c2 = new Class2();<br />
<br />
c1.showNam.call(c2);<br />
<br />
注意，call 的意思是把 c1 的方法放到c2上执行，原来c2是没有showNam() 方法，现在是把c1 的showNam()方法放到 c2 上来执行，所以this.name 应该是 class2，执行的结果就是 ：alert（&quot;class2&quot;）;<br />
<br />
怎么样，觉得有意思了吧，可以让a对象来执行b对象的方法，这是java程序员所不敢想的。还有更有趣的，可以用 call 来实现继承<br />
<br />
function Class1()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.showTxt = function(txt)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(txt);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
function Class2()<br />
{<br />
&nbsp;&nbsp;&nbsp; Class1.call(this);<br />
}<br />
<br />
var c2 = new Class2();<br />
<br />
c2.showTxt(&quot;cc&quot;);<br />
<br />
这样 Class2 就继承Class1了，Class1.call(this) 的 意思就是使用 Class1 对象代替this对象，那么 Class2 中不就有Class1 的所有属性和方法了吗，c2 对象就能够直接调用Class1 的方法以及属性了，执行结果就是：alert（&ldquo;cc&rdquo;）;<br />
<br />
对的，就是这样，这就是 javaScript 如何来模拟面向对象中的继承的，还可以实现多重继承。<br />
<br />
function Class10()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.showSub = function(a,b)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(a-b);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
function Class11()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.showAdd = function(a,b)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(a+b);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
function Class2()<br />
{<br />
&nbsp;&nbsp;&nbsp; Class10.call(this);<br />
&nbsp;&nbsp;&nbsp; Class11.call(this);<br />
}<br />
<br />
很简单，使用两个 call 就实现多重继承了<br />
当然，js的继承还有其他方法，例如使用原型链，这个不属于本文的范畴，只是在此说明call 的用法<br />
说了call ，当然还有 apply，这两个方法基本上是一个意思<br />
区别在于 call 的第二个参数可以是任意类型，而apply的第二个参数必须是数组，也可以是arguments<br />
还有 callee，caller，这个和call的 用法就不同了，放到下次讲吧 ，呵呵。
          <br/>
          <span style="color:red;">
            <a href="http://xiaofeizm55333.javaeye.com/blog/80913#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 May 2007 15:49:00 +0800</pubDate>
        <link>http://xiaofeizm55333.javaeye.com/blog/80913</link>
        <guid>http://xiaofeizm55333.javaeye.com/blog/80913</guid>
      </item>
  </channel>
</rss>