??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成AV人片在线播放无码,亚洲日韩AV一区二区三区四区,亚洲国产精品尤物YW在线观看http://www.tkk7.com/wuxufeng8080/category/12327.html弱水三千Q只取一瓢,便能解Q佛法无边,奉行一法,便能得益?/description>zh-cnSat, 05 Sep 2009 02:40:28 GMTSat, 05 Sep 2009 02:40:28 GMT60HTMLҎ字符~码对照?/title><link>http://www.tkk7.com/wuxufeng8080/articles/293901.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Fri, 04 Sep 2009 08:47:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/293901.html</guid><wfw:comment>http://www.tkk7.com/wuxufeng8080/comments/293901.html</wfw:comment><comments>http://www.tkk7.com/wuxufeng8080/articles/293901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wuxufeng8080/comments/commentRss/293901.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wuxufeng8080/services/trackbacks/293901.html</trackback:ping><description><![CDATA[     摘要:   字母~码 数字~码 效果 说明 ...  <a href='http://www.tkk7.com/wuxufeng8080/articles/293901.html'>阅读全文</a><img src ="http://www.tkk7.com/wuxufeng8080/aggbug/293901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2009-09-04 16:47 <a href="http://www.tkk7.com/wuxufeng8080/articles/293901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE中HTML打印时实现每都有的表头和打印分?/title><link>http://www.tkk7.com/wuxufeng8080/articles/185746.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Wed, 12 Mar 2008 08:58:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/185746.html</guid><wfw:comment>http://www.tkk7.com/wuxufeng8080/comments/185746.html</wfw:comment><comments>http://www.tkk7.com/wuxufeng8080/articles/185746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wuxufeng8080/comments/commentRss/185746.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wuxufeng8080/services/trackbacks/185746.html</trackback:ping><description><![CDATA[<p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /> <html><br /> <head><br /> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br /> <title>无标题文?lt;/title><br /> <style><br /> @media print{<br /> INPUT {display:none}<br /> }<br /> </style><br /> </head></p> <p><body></p> <p><TABLE border="0" style="font-size:9pt;" width="300px" align="center"><br /> <THEAD style="display:table-header-group;font-weight:bold"><br /> <TR><TD colspan="2" align="center" style="font-weight:bold;border:3px double red">每页都有的表?lt;/TD></TR><br /> </THEAD><br /> <TBODY style="text-align:center""><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR style="page-break-after:always;"><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR><TD>表格内容</TD><TD>表格内容</TD></TR><br /> <TR style="page-break-after:always;"><TD>表格内容</TD><TD>表格内容</TD></TR><br /> </TBODY><br /> <TFOOT style="display:table-footer-group;font-weight:bold"><br /> <TR><br /> <TD colspan="2" align="center" style="font-weight:bold;border:3px double blue">每页都有的表?lt;/TD><br /> </TR><br /> </TFOOT><br /> </TABLE><br /> <input type=button value=" ??" onclick=javascript:window.print()><br /> </body><br /> </html></p> 重点是里面的css讑֮<br /> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/185746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2008-03-12 16:58 <a href="http://www.tkk7.com/wuxufeng8080/articles/185746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文g下蝲中文q问题http://www.tkk7.com/wuxufeng8080/articles/172474.html风h?/dc:creator>风h?/author>Thu, 03 Jan 2008 06:21:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/172474.htmlhttp://www.tkk7.com/wuxufeng8080/comments/172474.htmlhttp://www.tkk7.com/wuxufeng8080/articles/172474.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/172474.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/172474.html

问题如下Q客L论坛pȝ里中文文件名的附件无法下载。我同事们用他们的IE6L试,实无法下蝲Q待我连到客LpȝQ发现附件的文g名相当长Q差不多30个字。但我的IE却可以下载,只不q文件名头部被截断了?br />
    关于中文文g下蝲的问题,|上的咨询和{疑已经很多Q我原来处理下蝲的代码如下:
    
    response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

     下蝲的程序里有了q句Q一般在IE6的下载提C框上将正确昄文g的名字,无论是简体中文,q是日文。不q当时确实没有仔l测试文件名很长的中文文件名?先如今经q仔l测试,发现文字只要过17个字Q就不能下蝲了。经q好一番google和反复测试,ȝ对这个问题有了系l的认识Q分列如下:

    . 通过我原来的方式Q也是先用URLEncoder~码Q当中文文字过17个时QIE6 无法下蝲文g。这是IE的bugQ参见微软的知识库文?KB816868 。原因可能是因ؓie在处?Response Header 的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8?个字节,那么17个字便是153个字节,所以便会报错。微软提供了一个补丁,可以?q里 下蝲。这个补丁需要先安装ie6 sp1。因为我qx勤打补丁Q我的IE6版本h 6.0.2800.1106.xpsp2_xxxxx。所以我可能已经安装q了补丁Q从而可以下载,但仍然出现文件名被截断的现象。微软让我们{待IE?一个service pack的发布。我今天也上|看C好消息,q于firefox的压力,IE7可能在年中发布。另外,Firefox 不支持这L方式Q将把编码后?xx%xx直接作ؓ文g名显C?br />

    ?/strong>. 我尝试?javamail 的MimeUtility.encode()Ҏ来编码文件名Q也是~码?=?gb2312?B?xxxxxxxx?= q样的Ş式,q从 RFC1522 中找到对应的标准支持。不q很遗憾QIE6q不支持q一个标准。我试了一下,Firefox是支持的?br />
    ?/strong>. 按网上很多h提供的解x案:文件名~码成ISO8859-1g是有效的解决ҎQ代码如下:
    
    response.setHeader( "Content-Disposition", "attachment;filename="  + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );
    
    在确保附件文件名都是 体中文字的情况下Q那么这个办法确实是最有效的,不用让客户逐个的升UIE。如果台湑֐胞用Q把gb2312Ҏbig5p。但现在的系l通常都加入了 国际化的支持Q普遍用UTF-8。如果文件名中又有简体中文字Q又有繁体中文,q有日文。那么ؕ码便产生了。另外,在我的电脑上Firefox (v1.0-en)下蝲也是q?br />
    折中考虑Q我l合了一、三的方式,代码片断如下Q?br />
        String fileName = URLEncoder.encode(atta.getFileName(), "UTF-8");
        /*
         * see http://support.microsoft.com/default.aspx?kbid=816868
         */
        if (fileName.length() > 150) {
            String guessCharset = xxxx /*Ҏrequest的locale 得出可能的编码,中文操作pȝ通常是gb2312*/
            fileName = new String(atta.getFileName().getBytes(guessCharset), "ISO8859-1");
        }
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
        
    暂且不考虑 Firefox 是因为它目前gq没有有力R食到IE的企业用户市场。媄响客户买单的常常是进度,而不是兼容度?

]]>
FckEdit使用Ҏ(ZT)http://www.tkk7.com/wuxufeng8080/articles/163139.html风h?/dc:creator>风h?/author>Mon, 26 Nov 2007 05:08:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/163139.htmlhttp://www.tkk7.com/wuxufeng8080/comments/163139.htmlhttp://www.tkk7.com/wuxufeng8080/articles/163139.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/163139.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/163139.html先down一个FckEdit源文件压~包.
  • 其解压~到你的|站目录的文件夹?我用的是tomcat,则解压到webapps/的某个文件夹?特别要注意的是解压完了要看一下你解压的包中的那个fckeditor.js在什么位|?
  • 在网中创徏一个textarea,一定要命名其id.
  • 应用Fckeditor.
    <script language="javascript" type="text/javascript" src="你的fckeditor.js所在的位置/fckeditor.js"></script>
       <script language="javascript" type="text/javascript">
       window.onload = function() {
        var oEditor = new FCKeditor('你命名的Textarea的Id','700px','300px') ;
        oEditor.BasePath= 'FCKeditor所处的相对站点的\?/font>/FCKeditor/' ;
        oEditor.ToolbarSet="讄工具?/font>";//可选的参数可以?font color="#000000">fckeditor.js位置相同的文件夹?/font>?font color="#000000">fckconfig.js?/font>扑ֈ也可以设|自己需要的Toolbar
        oEditor.ReplaceTextarea() ;
       }
       function copyIt(){
        var oEditor = FCKeditorAPI.GetInstance('你命名的Textarea的Id');
        oEditor.UpdateLinkedField();
        window.clipboardData.setData("Text", document.getElementById("你命名的Textarea的Id").innerHTML);
       }  </script>


  • ]]>
    几个不太常用但很有用的HTML Tag(ZT)http://www.tkk7.com/wuxufeng8080/articles/162209.html风h?/dc:creator>风h?/author>Wed, 21 Nov 2007 13:03:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/162209.htmlhttp://www.tkk7.com/wuxufeng8080/comments/162209.htmlhttp://www.tkk7.com/wuxufeng8080/articles/162209.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/162209.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/162209.html
    1. Label

    Label是用来标记Input元素的提C的。例如:

    <label for="id_name">Name</label><br />
    <input type="text" name="name" id="id_name" size="20"/>


    Label?#8220;For”属性要和Input元素的ID怸致?br />
    好处Q点LC文字,p动Focus对应的输入元素。对于RadioQCheckboxq类点击区域特别的控g特别有用Q?br /> Color:<br />
    <input type="checkbox"  name="color" id="color_r" value="red"><label for="color_r">&nbsp;red</label><br>
    <input type="checkbox"  name="color" id="color_g" value="green"><label for="color_g">&nbsp;green</label><br>
    <input type="checkbox"  name="color" id="color_b" value="blue"><label for="color_x">&nbsp;blue</label><br><!--如果For和ID不匹配,点击文字是没有用?->

     red
     green
     blue
     

    2. FieldSet & Legend

    FieldSet用来明确把一lInput控g归成一l(相当于VB/VC里面的Group控gQ,而Legend则是l的标题(相当于Group控g的标??例如Q?br />
    <fieldset style="width:20%">
      <legend>Person</legend>
      <label for="name">Name</label><input type="text" id="name" />
      <fieldset>
        <legend>Gender</legend>
        <input type="radio" name="gender" id="male" /><label for="male">Male</label><br>
        <input type="radio" name="gender" id="female" /><label for="female">Female</label>
      </fieldset>
    </fieldset>
    PersonName GenderMale
    Female

    3. Optgroup

    用于Select里面的option的分l。例如:

    <select name="age">
      <optgroup label="baby">
        <option>0-2</option>
        <option>3-5</option>
      </optgroup>
      <optgroup label="kid">
        <option>6-10</option>
        <option>10-15</option>
      </optgroup>
      <optgroup label="adult">
        <option>16-30</option>
        <option>31-40</option>
        <option>41-60</option>
      </optgroup>
    </select>


    ]]>
    如何指定tomcat中sessionq期旉http://www.tkk7.com/wuxufeng8080/articles/145062.html风h?/dc:creator>风h?/author>Fri, 14 Sep 2007 02:26:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/145062.htmlhttp://www.tkk7.com/wuxufeng8080/comments/145062.htmlhttp://www.tkk7.com/wuxufeng8080/articles/145062.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/145062.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/145062.html
    1. 在server.xml中定义context旉用如下定义:

    <Context path="/livsorder" docBase="/home/httpd/html/livsorder"   
      defaultSessionTimeOut="3600" isWARExpanded="true"   
      isWARValidated="false" isInvokerEnabled="true"   
      isWorkDirPersistent="false"/>

    2. 在web.xml中通过参数指定Q?

    <session-config> 
        <session-timeout>30</session-timeout>   
    </session-config>

    其中30表示30分钟

    3. 在程序中通过servlet api直接修改
    HttpSession ses = request.getSession();
    ses.setMaxInactiveInterval(10);
    讄单位为秒Q设|ؓ-1怸q期?nbsp;


    ]]>
    tomcat启动时自动加载servlet http://www.tkk7.com/wuxufeng8080/articles/144973.html风h?/dc:creator>风h?/author>Thu, 13 Sep 2007 13:21:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/144973.htmlhttp://www.tkk7.com/wuxufeng8080/comments/144973.htmlhttp://www.tkk7.com/wuxufeng8080/articles/144973.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/144973.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/144973.html比如我要启动时加载的servlet叫WebServiceStarter

    在web.xml中增?br /> <servlet>
       <servlet-name>WebServiceStarter</servlet-name>
       <servlet-class>WebServiceStarter</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    卛_

    ]]>
    按IE后退按钮时让JSP不读~存(Zt)http://www.tkk7.com/wuxufeng8080/articles/123617.html风h?/dc:creator>风h?/author>Tue, 12 Jun 2007 07:17:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/123617.html<% 
    response.setHeader("Pragma","No-cache"); 
    response.setHeader("Cache-Control","no-cache"); 
    response.setDateHeader("Expires", 0); 
    %> 
    2, 使用HTML标记Q如下面Q?nbsp;
    <HEAD> 
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Expires" CONTENT="0"> 
    </HEAD>


    ]]>
    JSTL--foreach q代Map对象(ZT)http://www.tkk7.com/wuxufeng8080/articles/98285.html风h?/dc:creator>风h?/author>Tue, 06 Feb 2007 05:54:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/98285.html
    以前都用forEach标签q代ListQSet对象Q今天需要用它来q代Map对象Q就研究了一下?/p>

    以下是试验代码:

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*" %>
    <%@ taglib prefix="c" uri="<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文?lt;/title>
    </head>
    <%!
     public static class TTT{
      private String name;
      public TTT(String name){
       this.name = name;
      }
      public String getName(){
       return name;
      }
     }
    %>
    <%
     Map map = new LinkedHashMap();
     map.put(new TTT("111"),"aaaaaa");
     map.put(new TTT("222"),"bbbbbb");
     request.setAttribute("map",map);
    %>
    <body>
    <c:forEach items="${map}" var="item">
    ${item.key.name}-${item.value}<br/>
    </c:forEach>
    </body>
    </html>

    item内保存的是java.util.Map.Entry对象q个对象有getKey,setKey,getValue,setValueҎQ这样就可以在forEach内部使用map的key和value了?/p>

    ]]>
    JSP文g下蝲及getOutputStream() has already been的解冻IZTQ?/title><link>http://www.tkk7.com/wuxufeng8080/articles/92172.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Sat, 06 Jan 2007 05:38:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/92172.html</guid><description><![CDATA[ <h2 class="diaryTitle">JSP文g下蝲及getOutputStream() has already been的解? -</h2> <p>                                       </p> <p> </p> <div onload="this.style.overflowX='auto';">JSP文g下蝲及出现getOutputStream() has already been called for this response的解x?br /><br /><a >http://iamin.blogdriver.com/iamin/1072546.html</a></div> <div onload="this.style.overflowX='auto';"> <br />一、采用RequestDispatcher的方式进?br /><br />1、web.xml文g中增?br />  <mime-mapping><br />    <extension>doc</extension><br />    <mime-type>application/vnd.ms-word</mime-type><br />  </mime-mapping><br /><br /><br />2、程序如下:<br /><br /><%@page language="java" import="java.net.*" pageEncoding="gb2312"%><br /><%<br />    response.setContentType("application/x-download");//讄Z载application/x-download<br />    String filenamedownload = "/pȝ解决Ҏ.doc";//卛_下蝲的文件的相对路径<br />    String filenamedisplay = "pȝ解决Ҏ.doc";//下蝲文g时显C的文g保存名称<br />    filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");<br />    response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);<br />    <br />    try<br />    {<br />        RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload);<br />        if(dispatcher != null)<br />        {<br />            dispatcher.forward(request,response);<br />        }<br />        response.flushBuffer();<br />    }<br />    catch(Exception e)<br />    {<br />        e.printStackTrace();<br />    }<br />    finally<br />    {<br />    <br />    }<br />%><br /><br /><br />二、采用文件流输出的方式下?br /><br />1、web.xml文g中增?br />  <mime-mapping><br />    <extension>doc</extension><br />    <mime-type>application/vnd.ms-word</mime-type><br />  </mime-mapping><br /><br /><br />2、程序如下:<br /><br /><%@page language="java" contentType="application/x-msdownload" import="java.io.*,java.net.*" pageEncoding="gb2312"%><%<br />    //关于文g下蝲旉用文件流输出的方式处理:<br />    //加上response.reset()Qƈ且所有的Q?gt;后面不要换行Q包括最后一个;<br />    //因ؓApplication Server在处理编译jsp时对于%>?lt;Q之间的内容一般是原样输出Q而且默认是PrintWriterQ?br />    //而你却要q行输出:ServletOutputStreamQ这样做相当于试囑֜Servlet中用两U输出机Ӟ<br />    //׃发生QgetOutputStream() has already been called for this response的错?br />    //详细误《More Java Pitfill》一书的W二部分 Web层Item 33Q试囑֜Servlet中用两U输出机?270<br />    //而且如果有换行,对于文本文g没有什么问题,但是对于其它格式Q比如AutoCAD、Word、Excel{文?br />    //下蝲下来的文件中׃多出一些换行符0x0d?x0aQ这样可能导致某些格式的文g无法打开Q有些也可以正常打开?br /><br />    response.reset();//可以加也可以不加<br />    response.setContentType("application/x-download");//讄Z载application/x-download<br />    // /../../退WEB-INF/classes两到应用的根目录下去,注意Tomcat与WebLogic下面q一句得到的路径不同QWebLogic中\径最后没?<br />    System.out.println(this.getClass().getClassLoader().getResource("/").getPath());<br />    String filenamedownload = this.getClass().getClassLoader().getResource("/").getPath() + "/../../pȝ解决Ҏ.doc";<br />    String filenamedisplay = "pȝ解决Ҏ.doc";//pȝ解决Ҏ.txt<br />    filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");<br />    response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);<br /><br />    OutputStream output = null;<br />    FileInputStream fis = null;<br />    try<br />    {<br />        output  = response.getOutputStream();<br />        fis = new FileInputStream(filenamedownload);<br /><br />        byte[] b = new byte[1024];<br />        int i = 0;<br /><br />        while((i = fis.read(b)) > 0)<br />        {<br />            output.write(b, 0, i);<br />        }<br />        output.flush();<br />    }<br />    catch(Exception e)<br />    {<br />        System.out.println("Error!");<br />        e.printStackTrace();<br />    }<br />    finally<br />    {<br />        if(fis != null)<br />        {<br />            fis.close();<br />            fis = null;<br />        }<br />        if(output != null)<br />        {<br />            output.close();<br />            output = null;<br />        }<br />    }<br />%><br /></div> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/92172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2007-01-06 13:38 <a href="http://www.tkk7.com/wuxufeng8080/articles/92172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSONQ数据传递的另一U模?ZT)http://www.tkk7.com/wuxufeng8080/articles/59818.html风h?/dc:creator>风h?/author>Mon, 24 Jul 2006 07:24:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/59818.htmlJSON(Javascript Object Notation) 是一U轻量的数据交换格式。易于h阅读和编写。同时也易于机器解析和生成。它ZJavascript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语a的文本格式,但是也用了cM于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python{)。这些特性JSON成ؓ理想的数据交换语a?/p>

    JSON概念很简单,是服务器直接生成Javascript语句Q客L获取后直接用evalҎ来获得这个对象,q样可以省去解析XML的性损失?/p>

    例如Q?/p>

    使用XML表示Q?/p>

    代码: [ 复制到剪贴板 ]
    <items>
     <item>
      <id>1</id>
      <author>Jackson</author>
      <url>http://www.richweb.cn</url>
      <content>Welcome to RichWeb.cn</content>
     </item>
     <item>
      <id>2</id>
      <author>Relkn</author>
      <url>http://www.richweb.cn</url>
      <content>RichWeb.cnx互联|新技?lt;/content>
     </item>
     <item>
      <id>3</id>
      <author>Kvogend</author>
      <url>http://www.richweb.cn</url>
      <content>RichWeb.cnxWEB2.0</content>
     </item>
    </items>

    使用JSONQ?/p>

    代码: [ 复制到剪贴板 ]
    {items:[
     {
      id:1,
      author:\"Jackson\",
      url:\"http://www.richweb.cn\",
      content:\"Welcome to RichWeb.cn\"
     },
     {
      id:2,
      author:\"Relkn\",
      url:\"http://www.richweb.cn\",
      content:\"RichWeb.cnx互联|新技术\"
     },
     {
      id:3,
      author:\"Kvogend\",
      url:\"http://www.richweb.cn\",
      content:\"RichWeb.cnxWEB2.0\"
     }
    ]};

    JSON不仅减少了解析XML解析带来的性能问题和兼Ҏ问题,而且对于Javascript来说非常Ҏ使用Q可以方便的通过遍历数组以及讉K对象属性来获取数据Q其可读性也不错Q基本具备了l构化数据的性质。不得不说是一个很好的办法Q而且事实上google maps没有采用XML传递数据,而是采用了JSONҎ?/p>

    JSON的另外一个优势是"跨域?Q例如你?a target="_blank">www.richweb.cn的网里使用

    <script type="text/javascript" src="" target="_blank">http://www.yyy.com/some.js">

    是完全可行的Q这意味着你可以跨域传递信息。而用XMLHttpRequest却获取不了跨域的信息Q这是Javascript内部的安全性质所限制的?/p>

    JSON能完全取代XML吗?当然不能Q原因就在于XML的优势:通用性。要使服务器端生语法合格的Javascript代码q不是很Ҏ做到的,q主要发生在比较庞大的系l,服务器端和客L有不同的开发h员。它们必d商对象的格式Q这很容易造成错误?/p>

    引自Q?a >http://www.richweb.cn/showthread.php?t=5



    ]]>
    全面了解和解析! Blog和RSS的含?/title><link>http://www.tkk7.com/wuxufeng8080/articles/57113.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Fri, 07 Jul 2006 05:08:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/57113.html</guid><description><![CDATA[ <p> <strong>什么是 BlogQ?/strong> </p> <p>   “Blog”是 Web Log 的简Uͼ译者注Q也?是网?中国大陆也叫博客)?/p> <p>它是一U作者与读者以日志风格q行交互的中介。在软gC֌Qh们以|志形式来共享观念与思想变得来流行。如Qhttp://blogs.ccw.com.cn是CCW上的一?blogging。    </p> <p>   建立|志最L的方法是什么?    </p> <p>   要想建立自己的网志,最Ҏ的方法是到类?blogger.com q样的站Ҏ册一个新用户Q它提供一个创定义|志?Web 界面Qƈ且可以立即用所创徏的网志。类?blogger.com 的站Ҏ很多Q它们都提供对网志特性的支持?如果你想更多地控制网志的基础l构或者想要在自己的服务器上徏立网志服务系l。你可在以下最行的几U网志应用商业品中选择其一QRadio Userland、Manila ?Movable Type。还有些易用的免?.NET |志应用可以使用Q最行的有Q?TEXT ?dasBlog。只要把它们下蝲下来Q然后按照安装说明进行安装与讄Q分分钟便可建立起一个可q行的网志服务系l?</p> <p>  从功能上Ԍq两个基?.NET 的网志应用系l不怸下。其主要区别在于 .TEXT 需要数据库QSQL Server 或?MSDEQ而dasBlog 所有信息都存储?XML 文g中(它基于原来一些微软公司开发h员创建的 BlogX 框架Q,另一个差别是 .TEXT 在单个安装配|中可支持多个网志(比如现在?http://blogs.msdn.com 是如此Q,?dasBlog 要支持多个网志,必须q行多次安装。但 dasBlog 有一个很H出的特性,那就是“Mail to Weblog”,它允怽通过邮g来发布新信息?</p> <p>  新的 MSDN |志服务站点?PDC Bloggers 都是开始查扑օ于Y件开发主题的很好d。只要浏览这些站点之一便可阅读其经q聚合的预定内容。其预定的摘要会向你公开许多个h|志Q渐渐的你会自然而然地发C些你比较喜欢阅读的内宏V这P你便可以直接预定你最喜欢的个人网志摘要?</p> <p>  对于专门讨论 XML ?Web 服务的网志,h?MSDN Web Services Developer Center 上的清单Q我个h要花很多旉上这些网志站炏V    </p> <p>  <strong> 什么是 Feed</strong>Q以下称为提要)Q如何预定它Q    </p> <p>   |志?RSS 文 </p> <p>  形式为其内容提供一个提要,?RSS 文档可以通过众所周知 URL 获得。RSS 文档是一?XML 文gQ它包含大量L的新闻项Q如某个|志中的入口(RSS 提要的例子参?Figure 1Q。由?RSS ?XML 格式文gQ所以它很容易被其它E序所使用?</p> <p>  RSS 聚合器是一个读?RSS 文q显C新闻项的程序。大多数聚合器只要输?RSS ?URLQ得预定提要成为可能?</p> <p>  RSS 佉Kȝ志便得容易。大多数l常阅读|志的开发h员都使用某种cd的聚合器来帮助他们有效地{选提要内宏V聚合器使得阅读|志的感觉就象是在阅ȝ子邮Ӟ因ؓ它们H出新闻ƈ新闻项q行~冲处理以便ȝ阅读Q参?Figure 2Q?</p> <p>  q有一些在U?RSS 聚合器将 RSS 提要捆绑到某个单独的|站。其优点是易于设|ƈ且可以从M计算机存取你的提要内宏V当Ӟ其缺点也是显而易见的Q那是在阅L必须始终保持q接?</p> <p>  RSS 是网志成ZU强大的新型信息交流形式之根本所在。在|志出现之前Q大多数开发h员ؓ了要查找到需要的内容Q通常要花大量旉来筛选掉那些令h讨厌的无关的信息?</p> <p>  |志通过让读者选择所要阅ȝ提要Q将控制权交l读者,从而有效地构徏自己的个性化内容?</p> <p>  其它cd的站点也能利?RSS 的优Ҏ聚合内容。例如,多数L的新ȝ点包?Wired、CNet、Yahoo ?NPR News 都提?RSS 提要。访?Blogdigger ?Syndic8Q你可以扑ֈ一些支?RSS 的站炏V?</p> <p>    微Y?MSDN 提供 RSS 提要QRSS feedsQ来聚合新添加到站点的技术内宏VMSDN ?Just Published提要是一U保?MSDN 新文章和下蝲的主要方式。甚?MSDN MagazineQMSDN 杂志Q都有其自己?RSS 提要Q可以预定:http://msdn.microsoft.com/msdnmag/rss/recent.xml 获得每月的更C便查看本期有何内容?目前有许多种 RSS 聚合器可供选择Q在 http://blogs.law.harvard.edu/tech/directory/5/aggregators 上可以找C个相当完整的列表。其中一些是在线聚合器,而另外一些是桌面应用E序。有些是免费的,另外一些需要付Ҏ能用?/p> <p> <strong>哪个 RSS 版本是最通用的?</strong>    </p> <p>  q个问题的答案要看你问的是谁QRSS </p> <p>  的版本有好多个,0.90?.91?.92?.93?.94?.0 ?2.0。要弄清楚这些版本之间的差别是巨大的挑战之一。理解它们需要了解一些有兛_们的历史背景。Netscape 创徏?RSS 的最初版?0.90Qv初的名字是“RDF Site Summary”或者“Rich Site Summary”(规范中说前者是正式名称Q。Netscape 创徏 RSS 0.90 用于?Web 门户Q这个时候,其他人看C RSS 的用潜力。Userland Software 是第一个开始将 RSS 用于其网志商业品者之一?</p> <p>  版本 0.90 在很大程度上Z W3C ?Resource Description Framework (RDF)。许多h都认?RDF q于复杂Q因此都Z个免费的化版?0.91。这个Q务恰好就l了 Userland Software。Userland Software 便l发?RSS 的简化版本,随后出台的版本包括:0.92?.93 ?0.94。ؓ了强调其所做的化工作,他们?RSS 的全U定为“Really Simple Syndication”?</p> <p>  正当 Userland Software l箋专注于其化工作时Q另外一l开发h员在复兴最初的 RDF 版本Q?.90Q,因ؓ RSS L自己更灵zR他们最l发布了一?RSS 1.0 的版本,其正式名U还是“RDF Site Summary”。由于?RDFQ这个版本完全不同于 Userland Software 所控制的版本。Userland Software 当然不太愿意看到 RSS 1.0 g要取代其 0.94 版本的事实,于是Z一个新版本Qƈ版本号一下子跛_?2.0?</p> <p>  q就是今天的q种局面,形成了两个主要的竞争版本Q一个基?RDF 1.0Q而另一个则不是Q?.0Q,但它们两个都q相同的名字。这是一U可怕的混ؕQ因为版本号DZ误认?2.0 ?1.0 的改q版本,而实际上它们是两个目标完全不同的规范。另一l开发h员已l下狠心着手解册U؜乱问题,通过定义新的摘要QsyndicationQ规范来?RSS 名字的随意性决裂。这个解x案称?AtomQ原子)目。本文稍后将会详l讨论?</p> <p>  使用哪个版本其实是无关痛痒的Q大多数 RSS 聚合机制支持所有的 RSS 版本Q有些甚x?AtomQ。最l的军_取决于你是否想?RDFQ可谓萝卜白菜,各有所爱,它完全要看某人所信奉?Semantic Web 概念而定?</p> <p>  <strong>RSS 1.0 ?RSS 2.0 各是什么样子?</strong>    </p> <p>  RSS 1.0 </p> <p>  ?2.0 格式所包含的核心信息相同,但其l构不一栗我提供了一?RSS 1.0 文Q参?Figure 1Q以及一个同{的 RSS 2.0Q参?Figure 2Q用于对照?</p> <p>  你会注意到顶行右边开始的根元素的差异QRSS 1.0 的根元素?rdf:RDFQ?RSS 2.0 的根元素?rss。rss q包含一个强制版本属性用以表C所用的RSS的准格式(可能的值包括:0.91, 0.94 {)。另一个主要差别是 RSS 1.0 文有名字空间限定,RSS 2.0 的文档就没有。不怎样Q包含在两个文中的信息本质上是一L?</p> <p>  两个版本都包?channel 元素Q?channel 元素又包含三个必ȝ元素Qtitle、description ?linkQ其代码如下Q?</p> <p>  QchannelQ?</p> <p>   QtitleQ<!?channel 的标?–>Q?titleQ?</p> <p>   QdescriptionQ<!?要描q?–>Q?descriptionQ?</p> <p>   QlinkQ<!?channel ?URL –>Q?linkQ?</p> <p>   Q??可?可扩展元?–> </p> <p>  Q?channelQ?</p> <p>    除了q些必须的元素外QRSS 1.0 q定义了三个附加元素Qimage、items ?textinputQ其中,image ?textinput 是可选的。另一斚wQRSS 2.0 提供?16 个附加元素,其中也包?image、items ?textinputQ此外还?language、copyright、managingEditor、pubDate ?category。RSS 1.0 允许通过定义在单独的 XML 名字I间中的可扩展元素来创徏q种cd的元数据?</p> <p>    q两U格式在l构上的主要区别必须要看?item、image ?textinput 节点的表CŞ式。RSS 1.0 中,channel 元素包含?item、image ?textinput 节点的引用,q些节点存在?channel 节点本n之外。这样在 channel ?所引用的节点之间徏立了一U?RDF 兌。如 Figure 1 所C,channel 元素与一?image 元素以及两个 item 元素兌。RSS 2.0 中,item 元素只是?channel 元素中连l排放(?Figure 2 所C)。item 元素包含实际的新闻项信息。item 的结构在两个版本中是相同的。item 元素通常包含 title、link ?description 元素Q如下代码所C: </p> <p>   </p> <p>  QitemQ?</p> <p>   QtitleQ<!?Ҏ?–>Q?titleQ?</p> <p>   QlinkQ<!??URL –>Q?linkQ?</p> <p>   QdescriptionQ<!?要描q?–>Q?descriptionQ?</p> <p>   Q??可选的/可扩展的元素 –> </p> <p>  Q?itemQ?</p> <p>    ?RSS 1.0 中,title ?link 是必ȝQdescription 是可选的。而在 RSS 2.0 中,title ?description 必须提供其中的一个;其它均可选。这些只是定义在 RSS 1.0 中的 item 元素。RSS 2.0 提供几个其它可选元素,其中?author、category、comments、enclosure、guid、pubDate ?source。RSS 1.0 获取q样的元数据是通过定义在单独的 XML 名字I间中称?RSS 模块的可扩展元素来实现的。例如,?Figure 1 中,item 的日期是?Dublic Core 模块?Qdc:dateQ?元素表示的?br /> <br />  有关不同格式的完整信息请参?RSS 1.0 ?2.0 规范?/p> <p> <strong>那么Q何?AtomQ  </strong>  </p> <p>   前面我提到过QAtom 乃一目的名字,主要是开发一个新的网志摘要格式以解决目前 RSS 存在的问题(混ؕ的版本号Q不是一个真正的开放标准,表示Ҏ的不一_定义贫乏{等Q。Atom 希望提供一个清晰的版本以解x个h的需要,其设计完全不依赖于供货商QQ何h都可以对之进行自由扩展,完整详细说明?</p> <p>  当今许多 Blog 引擎已经支持当前的摘要格式。Figure 3 是一个Atom 0.3 提要例子Q它与前q?Figure 1 ?Figure 2 RSS 提要{同。注?Atom 提要用名字空间限定的Q但它不使用 RDF。这使得 Atom ?RSS 1.0 ?RSS 2.0 在某些地Ҏ怼之处。Atom 在未来是否能被接受,Z拭目以待?</p> <p>  除了定义新的摘要格式之外QAtom q希望定义一个标准的案文g格式和一个标准的|志~辑 APIQAtom APIQ。有?Atom 详细规范以及其它 Atom 资源误?The Atom Project?</p> <p>  <strong>什么是 blogrollQ?</strong></p> <p>   blogroll 是网志提要的集合Q?</p> <p>  大多?bloggerQ博客)在其个h|志上都提供 blogroll。这允许读者连接到其他味和写作风格相投的人的|志上。Blogroll 方便了网l上的沟通。通过使用Outline Processor Markup Language QOPMLQ,Z可以?XML 格式文g交换 blogroll。Figure 4 ?blogroll 的一个例子?</p> <p>    大多数网志引擎都自己理 blogrollQ每当读者请?blogroll 旉自己产生相应?XML 格式。同P大多数聚合器都能导入 blogroll q自动预定所包含的摘要。有?OPML 更多的信息参?http://opml.scripting.com?</p> <p>  <strong>能解?referrers、trackbacks ?pingbacks 是什么吗Q?</strong></p> <p>   大多数网志Y仉能让读者添加网志评论。但更常见的做法是让读者在其自q|志d一个入口回铑ֈ原来的帖子。博客们QBloggersQ都乐于跟踪q接发生的时间以便新读者能理解整个会话内容?</p> <p>  所?referrer 是一个外部站点,用户单击该站点上一个超链接便可以到达你的网站。许多网志引擎当读者导航到你的|志的某个入口时都能自动保持跟踪。大多数引擎都会在网志入口底部显CZ?referrers 清单Q以便读者能往回导航到 referrer 的站点,q清楚他们关于该入口要说些什么,q基于一个假设,那就是如果他们链接到它,可能此会写些什么。referrer 存在的问题是必须要有q个假设才成??没有_的信息说明是否引用的面事实上包含有关信息。实际上Q垃圾信息的发布者ؓ了营销企图已经利用了这个漏z来重定向读者?br />  Trackback ?pingback 同一个规范,被用来I补上q问题的Ҏ。?trackback ?pingbackQ其他博客们能自动发送一?ping C的网志以明确表示他们已经写了一个引用特定帖子的入口?/p> <p>  q种cd的反铑օ怽的网志以更明昄方式昄所有评论的清单。当今大多数|志软g支持所有这些技术。参?TrackBack Technical Specification ?Pingback 1.0?/p> <p>如何为我的站点?RSS 提要Q    </p> <p>   Figure 5 举例说明?</p> <p>  如何?asp:Repeater 控g?.aspx 面中生?RSS 2.0 提要。该面假设你已l在后端代码文g中将控g?DataSource 属性设|成对应的数据库l果集。    </p> <p>   我想聚合几个 RSS 提要q将信息昄在个人网站上Q能解释一下如何实现吗Q    </p> <p>   因ؓ RSS 提要?XML 文gQ作为练习,你可以用自己最擅长?XML APIQ比如,Microsoft .NET Framework 中的 System.XmlQFigure 6 中包?ASP.NET Web 用户控g代码Q它是我~写用来聚合 blogroll 文g中(.opmlQ所列出?RSS 提要的一D代码。这D代码假?opml 元素包含 numberToDisplay 属性,以表CZ打算昄的每个提要有多少V?</p> <p>  <img alt="" src="http://photocdn.sohu.com/20050411/Img225123736.gif" /></p> <p>  Figure 7 ASP.NET Web 用户控g<br /> <br />  你可以将控g拖到M .aspx 面中,它将昄 blogroll 文g中列出的不同提要的项QFigure 7 昄?Utah .NET User Group |站使用q个控g的效果画面?</p> <p>  有没有与|志交互?Web Services APIsQ?br />  </p> <p>   许多|志引擎都提供属于自q Web service 接口Q通过~程与网志交互,但目前还没有出现一U标准化的东ѝ?</p> <p>  .Text ?dasBlog 两者都提供某些 .asmx 端点Q可以通过 SOAP 来实现编辑功能,但其接口是不同的。Blogger.com 提供Z XML-RPC 的交互式 API QBlogger APIQ。Userland Software 对Blogger API 的功能进行了增强Qƈ把它叫做 MetaWeblog API。这些可能是当今公认的网?APIsQ但仍然不是所有网志引擎都支持的。还有一个用于添加评论的独力?API 叫做 Comment APIQ同P它也不是被普遍支持?</p> <p>    Atom l正在努力解册些问题,Atom API 定义了一个标准的|志 API 用于发布和编辑网志内宏V有关信息请参?The Atom Project |站</p> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/57113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-07-07 13:08 <a href="http://www.tkk7.com/wuxufeng8080/articles/57113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Javascript 验证表单提交 http://www.tkk7.com/wuxufeng8080/articles/56790.html风h?/dc:creator>风h?/author>Wed, 05 Jul 2006 08:10:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/56790.html

    首先要确定在那个 form 里验?/span> , 我们要做的事情是 :

    <form  method="post" action="" name="f"LANGUAGE="javascript"onsubmit="return f_submit()" >

     

    q里分析一?/span> ,

    1.   name="f" 一般我们验证的时候不需要给 form 命名 , 可是q里?/span> , Z?/span> , 需要验证的是那个表单的那个 textfield?

    2.   LANGUAGE="javascript" q里要指出验证的脚本语言是什?/span> , 不区分大写

    3.   onsubmit= "return f_submit()" q里 ,return 的值非帔R?/span> , 它会用在 javascript 脚本语言里面 , 不可以和脚本里的不符?/span> ! 前面?/span> onsubmit 必须写全 , 写成 submit 不可?/span> , 写成别的更不可以 !

    接着我们?/span> javascript

    <script language="javascript">

     

    function f_submit() {

    if(document.f.title.value=="")

    {

    alert("Sorry, 信息沒有輸入 ")

    document.f.title.focus()

    return false

    }

     else if(document.frmAddLink.content.value=="")

    {

    alert("Sorry, 說明沒有輸入 ")

    document.frmAddLink.content.focus()

    return false

    }

    }

     

    </script>

    1.   注意 function f_submit() 严格区分大小?/span> ! function 写成 Function 是不可以?/span> , 至于 f_submit(), form 里要 onsubmit ?/span> return 的?/span> , 当然 , 照抄可?/span> , 大小写当然区?/span> !

    2.   下面 f.title 代表表单的?/span> , 要和 textfield 相匹?/span> !

    3.   java/c 语言都在每句后面加分?/span> , 可是 javascript 不可以加 ! q里很不习惯 , 我L喜欢加分?/span> . 其它语句看大意就能理?/span> .



    ]]>
    d解决中文名文件下载和下蝲文g内容q问题Q{载)http://www.tkk7.com/wuxufeng8080/articles/56725.html风h?/dc:creator>风h?/author>Wed, 05 Jul 2006 06:10:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/56725.html文g上传:
    -----------------------------------------
    准备工作:导入著名的SmartUpload.jarlg?br />upload.jsp文g
    ---------------------------------------------------------
    <%@ page contentType="text/html; charset=gb2312" %>
    <%
     request.setCharacterEncoding("gb2312"); // q句话很重要Q否则遇C文就出错~
    %>
    <HTML><HEAD><TITLE>上传</TITLE>
    <META content="text/html; charset=gb2312" http-equiv=Content-Type>
    </HEAD>
    <BODY leftMargin=0 topMargin=0>
    <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#DEE7EF">
      <tr>
        <td align="center">
          <FORM action="upload_ok.jsp" method=post name="Upload" enctype="multipart/form-data">
            <br>
            误入附件文件的所在\?lt;FONT color=red> * </FONT>为必填项?lt;br>
            <br>
            <TABLE width="317" border=0 cellPadding=0>
              <TBODY>
                <TR>
                  <TD align=right vAlign=center nowrap>附g路径Q?lt;/TD>
                  <TD><input type="file" name="file" style="border: 1px #FFFFFF solid;background:#efefef" > <FONT color=red>*</FONT></TD>
                </TR>
                <TR align="center">
                  <TD height=60 colspan="2" vAlign=center nowrap> <INPUT style="height:22px" name=B1 type=submit value=" ??" >
    <INPUT style="height:22px" name=B2 type=reset value=" ??" >
                  </TD>
                </TR>
              </TBODY>
            </TABLE>
          </FORM>
    </td>
      </tr>
    </table>
    </BODY></HTML>
    ---------------------------------------------------------
    upload_ok.jsp文g
    ---------------------------------------------------------
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ page import="com.jspsmart.upload.*" %>
    <HTML><HEAD><TITLE>上传成功!</TITLE>
    <META content="text/html; charset=gb2312" http-equiv=Content-Type>
    </HEAD>
    <BODY leftMargin=0 topMargin=0>
    <jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
    <table width="80%"  border="0" cellpadding="0" cellspacing="0" bgcolor="#DEE7EF">
      <tr>
        <td align="center">
    <%
     int count=0;
     String fileName = null;
     mySmartUpload.initialize(pageContext);
     mySmartUpload.upload();
     com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
     if (!myFile.isMissing()) {
      //String ext=myFile.getFileExt();//得到后缀  
      fileName = myFile.getFileName();
                myFile.saveAs("/files/" + fileName);//你要存放文g所在文件夹的相对\?br />     out.println("文g:<b>"+fileName+"</b>上传成功!<br>文g大小:" + myFile.getSize() + "kb<BR>");
         }
    %>
    </BODY></HTML>
    ---------------------------------------------------------

    文g下蝲:
    -----------------------------------------
    文g的超q接写法范例:
    <% String fname ="中文试.xsl"; //假设你的文g名是:中文试.xsl
    %>
    <A target="_blank" href="Download.jsp?filename=<%=fname%>">??lt;/A>
    文g的超q接写法范例-2 重新用utf-8Ҏ件名~码:
    <%@ page contentType="text/html;charset=gb2312" session="true"%>
    <%  String name=java.net.URLEncoder.encode("世界文化.doc","UTF-8"));%>  <a href="c:\<%=name%>">世界文化.doc</a>

    Download.jsp文g
    ---------------------------------------------------------
    <%
      java.io.BufferedInputStream bis=null;
      java.io.BufferedOutputStream  bos=null;
    try{
     String filename=request.getParameter("filename");
     filename=new String(filename.getBytes("iso8859-1"),"gb2312");
     response.setContentType("application/x-msdownload");
     response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
     bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("files/" + filename)));
     bos=new java.io.BufferedOutputStream(response.getOutputStream());
     byte[] buff = new byte[2048];
     int bytesRead;
     while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
      bos.write(buff,0,bytesRead);
     }
    }
    catch(Exception e){
     e.printStackTrace();
    }
    finally {
     if (bis != null)bis.close();
     if (bos != null)bos.close();
    }
    %>

     



    ]]>
    Java FTP libraries 比较http://www.tkk7.com/wuxufeng8080/articles/56371.html风h?/dc:creator>风h?/author>Mon, 03 Jul 2006 08:32:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/56371.html摘要:q篇文章是徏立在"Java FTP Client Libraries Reviewed"上的Q是用于研究JAVAq_上对FTP的支持。在性能斚wQ对大文件的传输l果比较怼。对于小文g传输试QEnterpriseDT's edtFTPj, Calvin Tai's FtpBean,和Glub Tech's Secure FTP Bean是最好的选择Q然而SUN的JDK需要解决下载数不能过200个文件的BUG.

    正如我以前在JavaWorld上发表的文章Java FTP Client Libraries Reviewed中讨论的一P2003q?月)QJDK对FTP的支持ƈ不完全的W合FTP规范。(FTP规范?59条项目)比如JDK不允许在服务器端创徏文gҎ者FTPq接对同一个文件打开两个相同的连接。所以当和RFC959比较Ӟ证明JDKq不是完全o人满意的。而且Q当使用JDK所支持的FTPӞFTP服务器端q回的是无格式的字符Ԍ而不是方便的java对象。ؓ了完全的获得RFC959的支持和提供方便的方法,java开发者们必须求助于市面上的第三方?br />许多的JAVA FTP库都可以在网上找刎ͼ他们有:

    --JScape's Secure FTP Factory
    --Enterprise Distributed Technologies' FTPj
    --JFtp
    --Jakarta Commons/Net
    --Sun JDK
    --Florent Cueto's JavaFTP API
    --Bea Petrovicova's jvFTP
    --The Globus Alliance's Java CoG Kit
    --Glub Tech's Secure FTP Bean
    --Calvin Tai's FtpBean


    q个列表非常的长Q所以对q些库进行比较非常的不直观。甚臌些库都实现各自不同的Ҏ,不同的h|而且水^的质量和使用条款也不同。所以选择一个和具体需求细节有关的库文仉常的ȝ。ؓ了帮助决{者选择一个适合他们需求的库,q篇文章对这些库q行比较和评仗?br />
    版权声明QQ何获得Matrix授权的网站,转蝲时请务必保留以下作者信息和链接
    作?Jean-Pierre Norguet ;tain198127(作者的blog:http://blog.matrix.org.cn/page/tain198127)
    原文:http://www.javaworld.com/javaworld/jw-03-2006/jw-0306-ftp.html
    Matrix:http://www.matrix.org.cn/resource/article/44/44480_Java+FTP+libraries.html
    关键?Java;FTP;libraries

    q些比较采用了一pd的标准,包括所支持的特性,提供者的商业斚wQ还有文件传输性能。我采用了一些Java FTP Client Libraries Reviewed中的标准。请查阅该文章进行回。ؓ了进行评估而徏立的新标准是“安全支持标准”还有“文件传输性能标准”。“安全支持标准”指明这些库是否实现了FTP的g伸安全性。“文件传输性能标准”是比较q些库的传输速度
    关于FTP的“安全支持标准”在Internet Engineering Task Force's reference document RFC2228中有定义。根据徏议FTP“安全支持标准”主要是两种cd。隐式的和显式的。隐式的FTP“安全支持标准”实际就是在建立在安全传输层的FTP协议Q采用直接的SSLq接Q默认通过990端口。显式FTP“安全支持标准”,是徏立在SSL上的FTPQ但是用隐降牧犹娲酥苯拥腟SLq接Q它是先采用普通的FTP协议q接到服务器Q然后再用AUTHSSL 或者AUTH TLS命o转换到SSL安全q接来{换到SSL安全模式的。显式SSL和隐式SSL都是典型的提交到FTPS的。FTP“安全支持标准”还可以实现SSH子协议的方式实现QSSH是安全外I。这U实现是提交到SFTP的。尽协议的名字和功能类|但是他和前面提到的模式是完全不一L。Java FTP Client Libraries Reviewed中比较明指Z每个库文件支持的FTP标准到底是SFTPq是FTPS?br />
    库的“文件传输性能标准”比较表是基于两U传输标准的。第一U标准描q的是传输一个大型文件的速度q标明数据通过|络传输到对方的旉。第二种标准用来量传输许多型文g的速度Qƈ指明该库用于q接服务端的旉。在Ҏ具体的应用程序选择最合适的文gӞq两U标准会起到帮助。例如:在ؓ视频传输的应用中应以该库的传输大数据的得分ؓ标准Q而ؓ那些用户和FTP服务器进行许多交互的应用上,p以其传输许多数据的得分为标准?br />
    试验

    试验常用的测量方法列在后面:在FTP服务器端创徏一个大文g和许多小文gQ这些文Ӟ大文件和文Ӟ是用来分别测量服务器传输大文件和文件的速度的。这些数据的数量和大被设计成相同的数据量。而且是采用两台相似的机器通过TCP/IP|络协议q行试的。ؓ了保证测试数据的正确性,在测试过E中M其他的网l传输都被排斥在外了。而且Qؓ了保证所数据均匀分布Q我做了10ơ测量,再取其^均倹{?br />
    试验的设|如下:传输数据量是10MB。所以,大文件大就?0MB。小文g大小?KQ数量是10000。网l测量单位是10 Mbits/s Ethernet network。客L是IBM的VisualAge for Java4.0Q系l是windows xp. 服务器端是RedHat Linux Fedora Core 2.服务器Y件是vsFTDd for Linux。结果,其测试代码Java FTP Client Libraries Reviewed内有详细描述Q也可以到Resourcesq行下蝲?br />
    Z重现试验Q你可以Ҏ以下操作q行试Q从Resources下蝲试代码QBenchmark.java。测试代码实CBenchmark c,q个cM包含了许多的内部cR每个内部类都ؓ各个库实C文g传输操作。可以通过~译q行该程序来试攑֜classpath下的库。可执行E序只接受一个参敎ͼ工作I间地址的\径。这个地址必须包含一个main.config文gQ这个文件中包含了配|参数。一个简单的配置文gmain.config可以从Resources下蝲。执行之后,会生出一个测量结果文Ӟ其中的测量结果用逗号分隔。该文g可以在工作空间中扑ֈ。这个文件可以用电子表格软g来打开Q比如微软的Excel?br />
    l果

    Ҏ试验协议和设定,我得C分别针对大文件和文件传输的两组量数据。每l测量都昑ּ为独立的图表。所有的库都在左边,他们传输速度以单杠Ş式显式在双。ؓ了提供绝Ҏ例的量Q传输速度是用传输旉的倒数乘以最短的传输旉。(是一个百分比Q最短传输时?量的传输时_q样最快的是100Q其他的依此cLQ有点类g高考中的标准分的概念)。这样得?00分的是最快的库,我也昄了WIN XP FTP命o行的FTP量速度?br />
    在大文g传输试图中Q图1Q,你可以发现许多的库都拥有比较高的速度Q他们之间的差距比较。所以,大部分的库比较适合传输大型数据文g。这些库的记录工作没有Q何的优化。许多库的传输速度也许得益于优化的操作。最典型的优化方法是Q设|通讯q接input/output 数组的长度。因此,最佳优化后的库可以在相同的速度下传输大块的数据。(也就是说Q通过优化Q设|input,output的数l长度——也是~冲区,那么即是相同的速度下,可以传输大数据,卌样优化后对传输大数据有利Q?br />

    Figure 1. Large-file transfer speed

    文件传输测试图Q图2Q显CEnterpriseDT's edtFTPj, Calvin Tai's FtpBean, and Glub Tech's Secure FTP Bean的性能比其他库更优,甚至比WIN XP FTP命o行的速度q高。在SUN 的JDK中有一个明昄BUGQ就是在下蝲?00个文件之后,JDK拒绝传输Q提C内存错误。在图表中,我只对前200个传输进行了l计。而分数最低的原因是因为每个download操作都需要新Z个新的connection来进行打开和关闭操作。这U引入连接方式是针对单个文g传输的。MQJDK架设的FTP只适合下蝲文g数量较少的情c?br />

    Figure 2. Small-file transfer speed

    回顾一下每个库的特性,点击here可以得到比较的列表。库的名字显C在最上面Q标准出现在左边Q每个单元的的羃写在每个表格中的关键字中有解释?br />
    ȝ
    q篇文章是徏立于我以前在JavaWorld发表的文?Java FTP Client Libraries Reviewed"上的Qƈ且是用于研究JAVAq_上对FTP的支持。在性能斚wQ对大文件的传输l果比较怼。对于小文g传输试QEnterpriseDT's edtFTPj, Calvin Tai's FtpBean,和Glub Tech's Secure FTP Bean是最好的选择Q然而SUN的JDK需要解决下载数不能过200个文件的BUG。关于其他方面的试Q可以查阅测试比较列表?br />
    ׃很多的第三方库都支持FTP RFC959Q开发者可以根据自q需求选择最有效率的库了。然而,使用W三方库会增加程序的复杂度。例如一个APPLET被配|在客户端,可能需要下载到服务器端。如果JDK完全的支持FTP的话Q那么就不会出现q种隐藏的复杂度问题了?br />
    Z使JDK完全的支持FTPQ一个RFE已经被提交到了Sun Developer Network Bug Database了,在一个不断成长的C֌30个月持箋不断的支持下Qؓ该REF投票的h数已l从最初的8个h增长?8个hQ得这个RFE成了最高的25个RFE之一。然而,直到我写q篇文章的时候,SUN的工E师q没有解册RFEQ也没有公布该RFE的解x刻表?br />
    同时QJava FTP API标准化项目组l也支持FTP RFEQ这个项目组l的目标是将支持该RFE的社区的成员集合hQ从而提供在JAVAq_上可用资源。这个项目也努力的召集一个专家组向JCP提交相关的JSR。这个JSR会以JAVAq_标准实现RFC959协议Q从而实现对FTP的完全支持。然而,q个专家l还没有成型Q而且提交该JSR成ؓ标准的时间还没有定。MQ让JAVAq_支持FTP的特性是有好处的?br />
    资源
    Matrix:http://www.matrix.org.cn
    Javaworld:http://www.javaworld.com

    ]]>
    JSP~程Q获取相同名UCheckbox?/title><link>http://www.tkk7.com/wuxufeng8080/articles/55941.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Fri, 30 Jun 2006 05:33:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/55941.html</guid><description><![CDATA[ <h2 class="diaryTitle">                                      </h2> <p> </p> <p> <font size="2"><%@ page contentType="text/html; charset=GBK" %><br /><%@ page import="java.io.*"%><br /><%@ page import="java.util.*"%><br /><%@ page import="java.lang.String.*"%></font> </p> <p> <font size="2"><%<br />if(request.getParameter("submit")!=null)<br />{<br /> String checkbox[]=request.getParameterValues("checkbox");<br /> if (checkbox!=null)<br /> {<br />  //int size=java.lang.reflect.Array.getLength(checkbox);<br />  int size=checkbox.length;<br />  out.println("您选中? + size + ",分别为:<br>");<br />  for (int i=0;i<size;i++)<br />  {<br />   out.println(checkbox[i]+"<br>");<br />  }<br /> }<br />}<br />%></font> </p> <p> <font size="2"><form name=form1 action="" method=post><br /><script langauge=javascript><br />for(i=0;i<20;i++)<br />{<br />document.writeln("<input type=checkbox name=checkbox value=\""+ i +"\"><label for=checkbox" + i + ">选择"+ i +"</label><br>");<br />}<br /></script><br /><br><br /><input type=submit value="提交" name="submit"><br /></form> </font> </p> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/55941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-06-30 13:33 <a href="http://www.tkk7.com/wuxufeng8080/articles/55941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript 删除认http://www.tkk7.com/wuxufeng8080/articles/55577.html风h?/dc:creator>风h?/author>Wed, 28 Jun 2006 09:54:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/55577.htmlhttp://www.tkk7.com/wuxufeng8080/comments/55577.htmlhttp://www.tkk7.com/wuxufeng8080/articles/55577.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/55577.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/55577.html   
     onClick="javascript:window.print()"   
       
            onClick="javascript:window.location='admin.asp'"   
       
            onClick="javascript:window.history.go(-1)"   
       
            onClick="javascript:window.close()"   
      
            <a href="contract_add_save.asp?contract_id=<%=contr_rs(0)%>&submit=%C9%BE%B3%FD" onclick="{if(confirm('定删除Q?lt;%=contr_rs(2)%>Q吗?')){this.document.formname.submit();return true;}return false;}">删除</a>   
     
    自动关闭 
     <script LANGUAGE="JavaScript"> 
    <!-- 
    setTimeout('window.close();', 3000); 
    // --> 
    </script>
    新开一个面?
    <script src=javascript:window.open('http://com.smt.cn/lostpwd1.asp')>
    提示后打开一个页?
    <a > 

    <input name="按钮" type="button" ID="ok" onclick="{if(confirm('定删除?')){window.location='Action.asp?Action=Del&TableName=Item&ID=<%=ID%>';return true;}return false;}" value="删除栏目" />  


    ]]>
    最_的复选框(checkbox)全选代?/title><link>http://www.tkk7.com/wuxufeng8080/articles/55524.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Wed, 28 Jun 2006 05:27:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/55524.html</guid><wfw:comment>http://www.tkk7.com/wuxufeng8080/comments/55524.html</wfw:comment><comments>http://www.tkk7.com/wuxufeng8080/articles/55524.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/wuxufeng8080/comments/commentRss/55524.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wuxufeng8080/services/trackbacks/55524.html</trackback:ping><description><![CDATA[ <div align="left"> <span id="tdbojmw" class="browword12">如果想看E序q行效果Q请先点击阅d文,然后再点M码即?<br /><br /><div id="ievizje" class="HtmlCode" title="点击q行该代码!" style="CURSOR: pointer" onclick="preWin=window.open('','','');preWin.document.open();preWin.document.write(this.innerText);preWin.document.close();" ;=""><input type=checkbox name=chk><br /><input type=checkbox name=chk><br /><input type=checkbox name=chk><br /><input type=checkbox name=chk><br /><input type=checkbox name=chk><br /><br><br />全选:<input type=checkbox onclick=sel('chk')><br /><script language="javascript"><br /> function sel(a){ <br />  o=document.getElementsByName(a) <br />  for(i=0;i<o.length;i++) <br />  o[i].checked=event.srcElement.checked <br /> }<br /></script></div></span> </div> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/55524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-06-28 13:27 <a href="http://www.tkk7.com/wuxufeng8080/articles/55524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX框架汇?/title><link>http://www.tkk7.com/wuxufeng8080/articles/55494.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Wed, 28 Jun 2006 03:18:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/55494.html</guid><wfw:comment>http://www.tkk7.com/wuxufeng8080/comments/55494.html</wfw:comment><comments>http://www.tkk7.com/wuxufeng8080/articles/55494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wuxufeng8080/comments/commentRss/55494.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wuxufeng8080/services/trackbacks/55494.html</trackback:ping><description><![CDATA[ <p>此文原出?a target="_blank">AJAX Patterns|站的一《Ajax Frameworks》的wiki文章</a>Q很早前我就注意刎ͼ后来在国内也有h译了,不过最q发现此wikiq是在不断添加维护中Q截止此文发布前Q作者又d了好几个新诞生的AJAX开发工P所以我军_重新译一遍,q且时常注意原文发布状态,一有新的内容立马也译q来Q做到同?)</p> <p>此翻译稿很大一部分内容<a target="_blank">国内出现的那个先前版?/a>Q我只是Ҏ加入的几进行了译Qƈ且对我熟悉的产品着重介l了一下,以后我会抽时间收集文中提到AJAX工具相关的文章,量内容介l和功能点评做到全面详细炏V所以请x和准备用AJAX做开发的朋友xq篇文章Q我会时常更新的。原文因为是׃个wikipȝl护Q所以在所隑օ出现参差不齐Q风g也有不统一的情况,译时我也是参照原文原封不动的挪了过来,以后我会抽时间改良下?/p> <h1>译正文</h1> <p>Z览器的应用框架一般分ZU: </p> <ul> <li>Aplication frameworks:提供了浏览器功能Q但其最著名的还是在于通过H口生成lg建立桌面GUI? </li> <li>Infrastructural frameworks:提供基本的框架功能和M式浏览器端操作,让开发者去创徏具体应用Q主要功能包括: <ul><li>ZXMLHttpRequestlg的浏览器交互功能 </li><li>XML解析和操作功? </li><li>ҎXMLHttpRequest的返回信息进行相应的DOM操作 </li><li>一些特D情况下Q和其他的浏览器端技术如FlashQ或Java AppletsQ等集合C起应?</li></ul></li> </ul> <p>Z服务器端的应用框枉常以下面两U方式工?管它们Ҏ不同的语aq行了分c? </p> <ul> <li>HTML/JS Generation(HTML/JS生成)Q通过服务器端生成HTML和JS代码在传递给览器端q行直接q行 </li> <li>q程交互QJavaScript调用服务器端函数(例如调用Java函数)q返回给JavaScript的回调句柄,或者请求服务器端数据信息,例如Session信息Q数据库查询{?</li> </ul> <h1>目录</h1> <dt> </dt> <div style="MARGIN: 5px"> <a >1 Pure Javascript: Application Frameworks</a> </div> <dd> <a >1.1 Bindows</a> </dd> <dd> <a >1.2 BackBase</a> </dd> <dd> <a >1.3 DOJO</a> </dd> <dd> <a >1.4 Open Rico</a> </dd> <dd> <a >1.5 qooxdoo</a> </dd> <dd> <a >1.6 Tibet</a> </dd> <dd> <a >1.7 AJFORM</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >2 Pure Javascript: Infrastructural Frameworks</a> </div> <dd> <a >2.1 AjaxCaller</a> </dd> <dd> <a >2.2 Flash JavaScript Integration Kit </a> </dd> <dd> <a >2.3 Google AJAXSLT</a> </dd> <dd> <a >2.4 HTMLHttpRequest</a> </dd> <dd> <a >2.5 Interactive Website Framework </a> </dd> <dd> <a >2.6 LibXMLHttpRequest</a> </dd> <dd> <a >2.7 MAJAX</a> </dd> <dd> <a >2.8 RSLite</a> </dd> <dd> <a >2.9 Sack</a> </dd> <dd> <a >2.10 Sarissa</a> </dd> <dd> <a >2.11 XHConn</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >3 Server-Side: Multi-Language</a> </div> <dd> <a >3.1 Cross-Platform Asynchronous INterface Toolkit</a> </dd> <dd> <a >3.2 SAJAX</a> </dd> <dd> <a >3.3 Javascipt Object Notation (JSON) and JSON-RPC</a> </dd> <dd> <a >3.4 Javascript Remote Scripting (JSRS)</a> </dd> <dd> <a >3.5 Bitkraft for ASP.NET</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >4 Server-Side: Java</a> </div> <dd> <a >4.1 WebORB for Java</a> </dd> <dd> <a >4.2 Echo 2</a> </dd> <dd> <a >4.3 Direct Web Remoting (DWR)</a> </dd> <dd> <a >4.4 SWATO</a> </dd> <dd> <a >4.5 AJAX JSP Tag Library</a> </dd> <dd> <a >4.6 AJAX Java Server Faces Framework</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >5 Server-Side: Lisp</a> </div> <dd> <a >5.1 CL-Ajax</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >6 Server-Side: .NET</a> </div> <dd> <a >6.1 WebORB for .NET</a> </dd> <dd> <a >6.2 Ajax.NET</a> </dd> <dd> <a >6.3 ComfortASP.NET</a> </dd> <dd> <a >6.4 AjaxAspects</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >7 Server-Side: PHP</a> </div> <dd> <a >7.1 AjaxAC</a> </dd> <dd> <a >7.2 JPSpan</a> </dd> <dd> <a >7.3 XAJAX</a> </dd> <dt> </dt> <div style="MARGIN: 5px"> <a >8 Server-Side: Ruby</a> </div> <dd> <a >8.1 Ruby On Rails</a> <p> </p> <h1>1. <a name="1"></a>Pure Javascript: Application Frameworks</h1> <h3>1.1 <a name="1.1"></a>Bindows (成立?003q?</h3> <p> <a target="_blank">Bindows</a>是一个通过DHTML、JavaScript、CSS和HTML{技术强劲联合v来的一套完整的Windows桌面式的WEB应用E序解决Ҏ。Bindows无需下蝲安装客户端支撑组Ӟ如Java、ActiveX或FlashQ,仅需一个浏览器。纯OO的理念体现在BindowsM地方QBindows或许是笔者见q的最完整最强大的AJAX应用E序q_?<br />Bindows是商业程序的Q用了来自于MB的技?总部位于GA USAQ主要开发中心在瑞典Q成立于2002q??/p> <p>Bindows框架提供的功能和Ҏ有Q?</p> <ul> <li>Z面相对象技术的cdAPI </li> <li>一套完整的Windows桌面pȝQ支持各U特性窗口模式,包括菜单、表单、表根{滑动条、测量A器窗口和其他一些WindowsH口Ҏ支持? </li> <li>是开发zero-footprint(零空间占?SOA客户端应用程序首选工具包 </li> <li>本机的XMLQSOAP和XML-RPC支持 </li> <li>单用户到企业U开发的支持 </li> <li>内徏的完的AJAX支持 </li> </ul> <p>Bindows开发环境: </p> <ul> <li>支持企业U规模的目开? </li> <li>跨浏览器、跨OSq_的支? </li> <li>不受服务器结构限? </li> <li>良好的与新的、现有的资源互操作? </li> <li>l一的开发接?</li> </ul> <p> </p> <h3>1.2 <a name="1.2"></a>BackBase (成立?003q?</h3> <p> <a target="_blank">BackBase</a>是一个完整的览器端框架Q提供了丰富的浏览器操作功能Q以及对.NET和JAVAq_的集成?<br />商业化品,来自于Backbase B.V(总部在AmsterdamQ成立于2003q??</p> <p> </p> <h3>1.3 <a name="1.3"></a>DOJO (开发中,成立?004q?? </h3> <p>DOJO提供完整的轻量H口lg和浏览器-服务器消息映支?/p> <ul> <li>提供创徏自定义JavascriptH口lg的框架支? </li> <li>预制的丰富的H口cd? </li> <li>B/S消息映射支持——XMLHttpRequest和其他机? </li> <li>支持览器中的URL操纵功能 </li> <li>开源许?<a target="_blank">Academic Free License 2.1</a>)Q由<a target="_blank">JotSpot</a>?a target="_blank">Alex Russell</a>所领导?</li> </ul> <h3>1.4 <a name="1.4"></a>Open Rico (开发中;成立?005q??Z早期的一个proprietary 框架) </h3> <p> <a target="_blank">Open Rico</a>是一个支持Ajax架构和用户交互的多用途框架?</p> <ul> <li>一个XMLHttpRequest response能被一个或多个的DOM对象Q或者Javascript对象调用? </li> <li>支持拖拽操作 </li> <li>支持ZAJAX的动L式,如羃攑֒变换{? </li> <li>ZBehaviors的操作库 </li> <li> <a target="_blank">使用指南</a>Q由RussMirimar的Yonah提供 </li> <li>开源。源于Sabre航空公司解决ҎQ由<a target="_blank">Bill Scott</a>QDarren James及另外一些hl护?</li> </ul> <p> </p> <h3>1.5 <a name="1.5"></a>qooxdoo (开发中; 成立?005q?? </h3> <p> <a target="_blank">qooxdoo</a>Q是另一个发展迅猛的应用框架Q提供广泛的UI支持Q正在开发基架构{特性?</p> <ul> <li>基础l构Ҏ: <ul><li>能轻易的捕获和操UDOM事g </li><li>支持调试 </li><li>支持一个时间操作的Timerc? </li><li>Getter/Setter支持 </li></ul></li> <li>UI: <ul><li>H口lg库和框架 </li><li>界面布局理 </li><li>囑փ~存和透明PNG囄处理 </li></ul></li> <li>开?LGPL). </li> </ul> <h3> <a name="1.6"> </a>1.6 Tibet (开发中; 创徏?005q??</h3> <p> <a target="_blank">Tibet</a>提供了大量的易移植和完整的JavaScript APIQ通过q些可以快速生成大量的客户端代码,Tibet自称是企业AJAX?/p> <ul> <li>q程脚本调用装在XMLHttpRequest? </li> <li>URI支持 </li> <li>支持所有的HTTP事gQ不再仅仅是GET和POST </li> <li>低的协?File://和WebDav也可以当作HTTP正常使用 </li> <li>Web Services调用支持Q包括SOAP、XML-RPC{等 </li> <li>大型的Javascript对象? </li> <li>多种多样的XML操作支持 </li> <li>IDE和开发工? </li> <li>开源协?OSI) </li> </ul> <h3> <a name="1.7"> </a>1.7 AJFORM (创徏?005q??</h3> <p> <a target="_blank">AJFORM</a>是一个极易上手的AJAX框架Q被用来~写入门U的AJAX代码Q提供有以下功能Q?/p> <ul> <li>三步安装 </li> <li>自动支持LHTML表单元素 </li> <li>几乎无需~码卛_实现AJAX </li> </ul> <h1> <a name="2"> </a>2 Pure Javascript: Infrastructural Frameworks</h1> <h3> <a name="2.1"> </a>2.1 AjaxCaller(创徏?005q?月,目前是Alpha?</h3> <p> <a target="_blank">AjaxCaller</a>是一个具有多U程安全讉K的XMLHttpRequestlgQ主要针对Ajax开发新手,目前仍处于alpha开发阶D,仅在<a target="_blank">AjaxPatterns</a>的在U搜索范例中使用了这个程序?</p> <ul> <li>用明文或者XMLl构的数据实现和服务器的交互(GET/POST/PUT/DELETE) </li> <li>支持XMLHttRequest对象的构?销毁对象,C++支持内存对象的构析操? </li> <li>支持Response的高速缓?在计划? </li> <li>单的库文件代码易于新手学习用,q且支持脚本调试 </li> <li>开源协?</li> </ul> <h3> <a name="2.2"> </a>2.2 Flash JavaScript Integration Kit</h3> <p> <a target="_blank">The Flash JavaScript Integration Kit</a>可以使Flash和Javascript脚本实现怺集成?/p> <ul> <li>可以实现在JavaScript中调用Flash ActionScript脚本Q反之亦然? </li> <li>几乎支持双方主要数据cd的在不同环境中的传递调用? </li> <li>开源协议,有几个Flash开源爱好者维护?</li> </ul> <h3> <a name="2.3"> </a>2.3 Google AJAXSLT (2005q?月发? </h3> <p> <a target="_blank">Google AJAXSLT</a>Q是一个Javascript框架Q用来执行XSLT转换以及XPath查询?/p> <ul> <li>目前在Google Map上就使用了这个? </li> <li>开源协?BSD) </li> </ul> <h3> <a name="2.4"> </a>2.4 HTMLHttpRequest(Beta版;创徏?005q?</h3> <p> <a target="_blank">HtmlHttpRequest</a>最大的特点是q用XMLHttpRequest对象和标准HTML标签IFrame来实现最大限度的跨浏览跨q_的AJAX支持Q其原理是在支持XMLHttpRequest的浏览器上调用XMLHttpQ如果不支持Q就用IFrame来模拟实现异步交互?/p> <ul> <li>目前支持的浏览器QIE6/Win, IE5.5/Win, IE5/Win, IE4/Win, Mozilla/Win, Opera7/Win, Safari/Mac, IE5/Mac </li> <li>未试的浏览器QIE4/Mac, Mozilla/Mac, Opera/Other, Konqueror/Linux? </li> <li>开源协?LGPL) </li> </ul> <h3> <a name="2.5"> </a>2.5 Interactive Website Framework (创徏?005q?</h3> <p> <a target="_blank">Interactive Website Framework</a>定位在浏览器中支持各U各LAJAX基础应用的开源项目。自U是通过JavaScript、CSS、XML和HTML实现高性能的交互式WEB框架Q包括一个可定制易读的XML解析器。实际上QIWF是一个AJAX的基框架Qƈ且还包括一些通用脚本代码?/p> <ul> <li>实现了线E安全的XMLHttpRequest </li> <li>对XML Documentq行装Q以便创建更h可读性的代码Q?br /><blockquote>var node = doc.groceries.frozen[0].pizza[0].size;</blockquote>装后的数据d <blockquote>var node = doc.documentElement.firstChild.firstChild.getAttribute("size");</blockquote>原始的DOM操作d </li> <li>开源协?</li> </ul> <h3> <a name="2.6"> </a>2.6 LibXMLHttpRequest (2003q?月发? </h3> <p> <a target="_blank">libXmlRequest</a>是一个小型XMLHttpRequest装?/p> <ul> <li>用getXML()和postXML()两个事g化XMLHttpReuqest调用 </li> <li>支持XMLHttpRequest对象? </li> <li>Response~存处理 </li> <li>源码可以使用Q但是有版权保护?</li> </ul> <h3> <a name="2.7"> </a>2.7 MAJAX </h3> <p> <a target="_blank">MAJAX</a>是另一个非常小巧的HttpRequest装包,为收发字W型信息提供单接口,qؓ每步动作讄回调界面?/p> <h3> <a name="2.8"> </a>2.8 RSLite (x) </h3> <p> <a target="_blank">RSLite</a>是一个XMLHttpRequest装lgQ作为Brent Ashley的JSRS(JavaScript Remote Scripting)其中的一部分功能单独发布。详情可以看JSRS的介l?/p> <h3> <a name="2.9"> </a>2.9 Sack(开发中Q成立于2005q?? </h3> <p> <a target="_blank">Sack</a>也是一个很有名字的微型XMLHttpRequest装包。调用者可以自定义回调函数或者是DOM对象。借助于回调DOM对象Q可以把Response回来的数据直接以文本的方式嵌入DOM中?/p> <h3> <a name="2.10"> </a>2.10 Sarissa (发布?003q??</h3> <p> <a target="_blank">Sarissa</a>是一个JavaScript APIQ封装了在浏览器端独立调用XML的功能?/p> <ul> <li>可移植的XMLHttpRequest对象创? </li> <li>可移植的XPath查询 </li> <li>可移植的DOM操控 </li> <li>可移植的XSLT </li> <li>可移植的XML序列? </li> <li>开源协?GPL2.0和LGPL2.1) </li> </ul> <h3> <a name="2.11"> </a>2.11 XHConn (2005q?月发?</h3> <p> <a target="_blank">XHConn</a>也是一个小型的XMLHttpRequest装库。笔者也使用改良q的XHConnQ其特点是调用单,代码也清晰易诅R?/p> <ul> <li>例子Q? <blockquote>new XHConn().connect("mypage.php"Q?POST"Q?foo=bar&baz=qux"QfnWhenDone);</blockquote></li> <li>开源协议许?</li> </ul> <h1> <a name="3"> </a>3 Server-Side: Multi-Language</h1> <h3> <a name="3.1"> </a>3.1 Cross-Platform Asynchronous INterface Toolkit (2005q?? </h3> <p> <a target="_blank">CPAINT</a>是一个真正的同时支持PHP和ASP/VBScript脚本的AJAX和JSRS工具包。CPAINT在后台提供你需求的AJAX和JSRS代码Qƈ自动q回到浏览器端相应的Javascript脚本代码Q这U方式易于实时反馈需求的WEB应用E序?/p> <ul> <li>支持PHP和ASP </li> <li>所有功能函数都在统一的JavaScript文g? </li> <li>支持q程脚本和XML </li> <li>支持本地和远E函数调? </li> <li>可以创徏单个或多个XMLHttp对象 </li> <li>q回l后台的数据卛_以是文本也可以是XML/DOM文对象 </li> <li>支持POST和GET </li> <li>用服务端代理的方式实现远E函数和数据的访问操? </li> <li>大部分浏览器中测试正怋? </li> <li>在GNU、GPL、LGPL开源协议保护下发行 </li> </ul> <h3> <a name="3.2"> </a>3.2 SAJAX (2005q?? </h3> <p> <a target="_blank">SAJAX</a>的实现方式很独特Q例如:调用一个javascriptҎx_calculateBudget()Q将先把响应传到服务器ƈ调用一个Java calculateBudget()ҎQ然后以javascript方式把D回到x_calculateBudget_cb()中。SAJAX的名气不错,估计很多人都听过甚至用过Q不q缺点就是它的这套映理论感觉较J锁Q远不如一些轻量的封装库好用Q不qSAJAX最大的特点是支持的^C富,几乎囊括了WEB下常用的~程语言和^?/p> <ul> <li>很方便从JavaScript函数映射到服务端代理操作 </li> <li>支持多种q_(ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby) </li> <li>开源协?</li> </ul> <h3> <a name="3.3"> </a>3.3 Javascipt Object Notation (JSON) and JSON-RPC </h3> <p> <a target="_blank">JSON</a>是一?face-free" XMLQ?a target="_blank">JSON-RPC</a>是一U远E交互协议,cM于XML-RPCQ对JavaScript支持较强</p> <ul> <li> <a target="_blank">支持多服务端q_</a>: Java, Python, Ruby, Perl. </li> <li>针对不同的^台有不同的包和许可协? ?a target="_blank">JSON-RPC-Java</a>. </li> </ul> <h3> <a name="3.4"> </a>3.4 JavaScript Remote Scripting(JSRS)(2000q? </h3> <p> <a target="_blank">JSRS</a>Q较l典的远E脚本访问组Ӟ支持客L数据通过服务器做代理q行q程的数?操作交互?/p> <ul> <li>支持的浏览器QIE4+QNS4.xQNS6.xQMozillaQOpera7和Galeon? </li> <li>服务器端脚本语言支持QASPQColdFusionQPerlCGIQPHP,Python和JSP(servlet)? </li> <li>开源协议。由<a target="_blank">Brent Ashley</a>提供支持?</li> </ul> <h3> <a name="3.5"> </a>3.5 Bitkraft for ASP.NET </h3> <p> <a target="_blank">Bitkraft</a>是个Z(.NET)Web框架的CLR(公共语言q行?Q允许用独特的方式创建和操作分布式Web内容。用C#~写Q运行在微Y?NET 1.1和Mono框架下,无缝式的客户?服务器响应方式是它的最大特炏VBitkraft没有使用XMLl织数据Q而是用JSON代替?/p> <ul> <li>支持的浏览器Q?IE5+, Firefox1+, NS6 </li> <li>服务器端要求QASP.NET, Mono XSP, Cassini, Apache (modMono) .NET Framework 1.1+ </li> <li>事g驱动 </li> <li>支持同步和异步的q程代理 </li> <li>客户端支持所有的.NETcd或自定义cd象映到JSON? </li> <li>用JSON取代XML </li> <li>免费Q开源许可协?</li> </ul> <h1> <a name="4"> </a>4 Server-Side: Java </h1> <h3> <a name="4.1"> </a>4.1 WebORB for Java (2005q?? </h3> <p> <a target="_blank">WebORB for Java</a>是一个开发AJAX和基于Flash的富客户端应用程序的开发^台?a target="_blank">在线例子</a></p> <ul> <li>WebORB包括一个富客户端开发类库。提供简单的在线式API用来l定或者调用Q何Java对象、XML Web Services和EJB </li> <li>支持异步或同步的事g驱动 </li> <li>不需要在服务端修改Q何代码,不需要自定义Ҏ或属性、变量等。不要求设计时指定代理等? </li> <li>同步调用不需要回调,异步调用需要一个回调方法? </li> <li>客户端可以向服务端请求指定的zd方式Q不需要Q何编E就可以把处理结果轻易的转变为状态? </li> <li>提供一个特定API来处理数据库查询l果-服务器代码能q回DataSet或者DataTableQ而客L以一个类gRecordSet的JavaScript对象来显C个结果。该对象提供索列名和行数据的Ҏ? </li> <li>支持数据分页技术。客户应用程序能索页面中的数据? </li> <li>支持以参数的方式q回所有服务期端数据类型,如primitives, strings, complex types, arrays, native .net collections, remote references </li> <li>目前有两个版本:标准?免费)Q专业版(商业许可) </li> </ul> <h3> <a name="4.2"> </a>4.2 Echo 2 (2005q?? </h3> <p> <a target="_blank">Echo 2</a>允许你用UJava语言~写AJAXE序?<a target="_blank">Demo</a>. </p> <ul> <li>自动生成HTML和Javascript代码 </li> <li>用XML在客L-服务端传递消? </li> <li>如果愿意支持自定义Javascriptlg </li> <li>开源协?Mozilla Public License or GNU LGPL) </li> </ul> <h3> <a name="4.3"> </a>4.3 Direct Web Remoting (DWR) (2005) </h3> <p> <a target="_blank">Direct Web Remoting</a>可以在Javascript代码中直接调用JavaҎ的应用框?/p> <ul> <li>cM于SAJAXQ可以把Javascript中的h调用转递到JavaҎ中ƈ执行结果返回给Javascript </li> <li>可以和Q何Web框架一起用,如Struts、Tapestry{等 </li> <li>开?Apache)Q目前该产品被加入到<a target="_blank">WebWork</a>?</li> </ul> <h3> <a name="4.4"> </a>4.4 SWATO (2005) </h3> <p> <a target="_blank">SWATO</a>是一套可重用的和良好集成的Java/JavaScript库,它实C一U更Ҏ的方式来改变你的web应用E序的交互,通过AJAX方式实现?/p> <ul> <li>服务端Java库可以非常容易的部v到所有Servlet2.3+兼容的容器中 </li> <li>客户端Javascript库可以在所有支持XMLHttpRequest的浏览器中? </li> <li>使用JSON技术在服务端组lPOJO数据Q这样你可以在Q何Javascript环境?HTML、XUL、SVG)讉Kq些q程数据Q这U方式很Ҏ通过编码或者某U成熟的Javascript库集成到当前应用? </li> <li>提供一个简单接口你能在Javascript中调用远E的POJO数据 </li> <li>使用<servlet>?lt;filter>灉|的在web.xml中进行配|,q且可以集成(不是必须)C的Spring框架? </li> <li>提供了几个可帮助你快速开发web应用E序的组?如自动完成的文本框,在线表单Q在U列表等{? </li> </ul> <h3> <a name="4.5"> </a>4.5 AJAX JSP Tag Library </h3> <p> <a target="_blank">The AJAX JSP Tag Library</a>是一lJSP标签库,用来AJAXE序开发。可以在J2EE下无需JavascriptpL开发AJAX模式的Web Form。标{ֺ为比较通用的AJAX功能提供?个标{:</p> <ul> <li>autocomplete: 用户在文本框中输入字W,自动从指定的数据中匹配用戯入的字符Q类gGoogle Suggest </li> <li>callout:可以为A标签加入气式的消息提示框,不过是实时的服务端取出数? </li> <li>Select/dropdown:cM于联动菜单,比如地州市的联动下拉? </li> <li>toggle:开关闸按钮Q比如在一个hidden表单域中存储true和falshQ同时显C相应的img囑փ </li> <li>update field:更新数据Q也是无刷新提交了?</li> </ul> <h3> <a name="4.6"> </a>4.6 AJAX Java Server Faces Framework </h3> <p> <a target="_blank">The AJAX-JSF</a>用来把Q意的JSF应用E序转变为AJAX应用E序</p> <ul> <li> <a target="_blank">例子</a>QAJAXlg?MyFaces JSF Tree(树型目录), table scroller(可滚动的表格), tabbed pane(分页? </li> <li>开源协?<a target="_blank">Apache Software License</a>) </li> </ul> <h1> <a name="5"> </a>Server-Side: Lisp </h1> <h3> <a name="5.1"> </a>5.1 CL-Ajax </h3> <p> <a target="_blank">CL-Ajax</a>实现Javascript直接调用服务端Lisp</p> <ul> <li>生成可带参数的函? </li> <li>可以回调Javascript函数或者DOM对象 </li> <li>可以集成到SAJAX? </li> <li>开源许?</li> </ul> <h1> <a name="6"> </a>6 Server-Side: .NET </h1> <h3> <a name="6.1"> </a>6.1 WebORB for .NET (2005q?? </h3> <p> <a target="_blank">WebORB for .NET</a>是一个用.NET和XML Web Services方式开发AJAX和基于Flash的富客户端应用程?<a target="_blank">在线例子</a>) </p> <ul> <li>WebORB包括一个富客户端开发类库。提供简单的在线式API用来l定或者调用Q?NET对象、XML Web Services </li> <li>支持异步或同步的事g驱动 </li> <li>不需要在服务端修改Q何代码,不需要自定义Ҏ或属性、变量等。不要求设计时指定代理等? </li> <li>同步调用不需要回调,异步调用需要一个回调方法? </li> <li>客户端可以向服务端请求指定的zd方式Q不需要Q何编E就可以把处理结果轻易的转变为状态? </li> <li>提供一个特定API来处理数据库查询l果-服务器代码能q回DataSet或者DataTableQ而客L以一个类gRecordSet的JavaScript对象来显C个结果。该对象提供索列名和行数据的Ҏ? </li> <li>支持数据分页技术。客户应用程序能索页面中的数据? </li> <li>支持以参数的方式q回所有服务期端数据类型,如primitives, strings, complex types, arrays, native .net collections, remote references </li> <li>目前有两个版本:标准?免费)Q专业版(商业许可) </li> </ul> <h3> <a name="6.2"> </a>6.2 Ajax.NET (2005q?? </h3> <p> <a target="_blank">Ajax.NET</a>是首家支持各U方式通过Javascript讉K服务?net的免费库</p> <ul> <li>cM于SAJAXQ能把Javascripth发送到.NETҎQ服务端回传lJavascriptQ甚臛_括串行化自定义类? </li> <li>可以在Javascript中访问Session和Application数据 </li> <li>~存查询l果 </li> <li>免费使用源代? </li> <li>无需更改源代码,允许lAjax.NETd和修Ҏ法和属? </li> <li>所有类支持Javascript客户端返回数据,可以在JavaScript中用DataSetQres.Tables[0].Rows </li> <li>使用HtmlControlslg讉K和返回数? </li> <li>面无需重蝲Q用事g代理(数据讉K? </li> <li>因ؓ只提供一个调用接口方法,所以服务端CPU占用非常?</li> </ul> <h3> <a name="6.3"> </a>6.3 ComfortASP.NET (2005q?? </h3> <p> <a target="_blank">ComfortASP.NET</a>可以让开发者在U?NET下开发类似AJAX(DHTML,JavaScript,XMLHttp)Ҏ的应用E序?/p> <ul> <li>快速应{? </li> <li>减少HTML传输 </li> <li>减少面重蝲 </li> <li>无闪烁的览器内Ҏ? </li> <li>AJAX用户体验Q?</li> </ul> <h3> <a name="6.4"> </a>6.4 AjaxAspects (2005q?? </h3> <p> <a target="_blank">AjaxAspects</a>是个可以用Javascript调用服务端WebService事g的引?/p> <ul> <li>用标准的SOAP和WSDLq行服务?客户端通信 </li> <li>用简单的cd和XML对象支持带参数的q回? </li> <li>~存支持 </li> <li>动作队列 </li> <li>免费使用Q开源协?</li> </ul> <h1> <a name="7"> </a>7 Server-Side: PHP </h1> <h3> <a name="7.1"> </a>7.1 AjaxAC (2005q?? </h3> <p> <a target="_blank">AjaxAC</a>用一个单独类装了完整的应用E序功能</p> <ul> <li>所有的功能集成在自包含的类?另外附带一些Javascript? </li> <li>调用PHP文g或者HTML面非常易,只需创徏Appcd把类引用传递给需要调用的Javascript对象或者HTML元素卛_? </li> <li>捕获Javascript事g </li> <li>可以自定义配|数据,q且支持q行时参数更? </li> <li>无需再Javascript代码中夹杂凌qHtml代码Q所有事仉是被动态附加上? </li> <li>׃以上两个优点Q所以支持良好的模版引擎 </li> <li>ҎHook到PHPcdMySql数据已返回给自己的request </li> <li>能够Ҏ的用Javascript建立H口模式应用E序?</li> </ul> <h3> <a name="7.2"> </a>7.2 JPSpan </h3> <p> <a target="_blank">JPSPAN</a>通过Javascript直接调用PHP中的函数?/p> <ul> <li>q行了严谨的单元试 </li> <li>开源许?PHP) </li> </ul> <h3> <a name="7.3"> </a>7.3 XAJAX </h3> <p> <a target="_blank">XAjax</a>通过Javascript直接调用PHP中的函数</p> <ul> <li>支持用Javascript调用PHP脚本 </li> <li>开源许可协?</li> </ul> <h1> <a name="8"> </a>8 Server-Side: Ruby </h1> <h3> <a name="8.1"> </a>8.1 Ruby On Rails </h3> <p> <a target="_blank">Ruby On Rails</a>是一个支持AJAX的完整Web框架Q用Ruby语言~写Q严格按照MVCl构开发?/p> <ul> <li>当Ajax出现的时候Railsq处于其发展的早期,因此Ajax可能逐渐成ؓRails框架的核心? </li> <li>生成览器中大多?全部的Window应用lg和动ȝJavascript脚本? </li> <li>支持服务器端调用? </li> <li>队列支持 </li> <li>开源许?</li> </ul> <p>引自Qhttp://www.huihoo.com/web/ajax/ajax-frameworks.html</p> </dd> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/55494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-06-28 11:18 <a href="http://www.tkk7.com/wuxufeng8080/articles/55494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jspSmartUpload上传下蝲全攻?/title><link>http://www.tkk7.com/wuxufeng8080/articles/55276.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Tue, 27 Jun 2006 02:42:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/55276.html</guid><wfw:comment>http://www.tkk7.com/wuxufeng8080/comments/55276.html</wfw:comment><comments>http://www.tkk7.com/wuxufeng8080/articles/55276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wuxufeng8080/comments/commentRss/55276.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wuxufeng8080/services/trackbacks/55276.html</trackback:ping><description><![CDATA[ <span id="hjavbio" class="t18"> <span id="pjanisn" class="myp11"> <font id="zoom"> <b>一、安装篇</b> <br /> <br />  jspSmartUpload是由www.jspsmart.com|站开发的一个可免费使用的全功能的文件上传下载组Ӟ适于嵌入执行上传下蝲操作的JSP文g中。该lg有以下几个特点: <br /><br />1、用简单。在JSP文g中仅仅书写三五行JAVA代码可以搞定文件的上传或下载,方便?<br /><br />2、能全程控制上传。利用jspSmartUploadlg提供的对象及其操作方法,可以获得全部上传文g的信息(包括文g名,大小Q类型,扩展名,文g数据{)Q方便存取?<br /><br />3、能对上传的文g在大、类型等斚w做出限制。如此可以o掉不W合要求的文件?<br /><br />4、下载灵zR仅写两行代码,p把Web服务器变成文件服务器。不文件在Web服务器的目录下或在其它Q何目录下Q都可以利用jspSmartUploadq行下蝲?<br /><br />5、能文件上传到<a >数据?/a>中,也能数据库中的数据下蝲下来。这U功能针对的是MYSQL数据库,因ؓ不具有通用性,所以本文不准备举例介绍q种用法?<br /><br />  jspSmartUploadlg可以从www.jspsmart.com|站上自׃载,压羃包的名字是jspSmartUpload.zip。下载后Q用WinZip?a >WinRAR</a>其解压到Tomcat的webapps目录下(本文以Tomcat服务器ؓ例进行介l)。解压后Q将webapps/jspsmartupload目录下的子目录Web-inf名字改ؓ全大写的WEB-INFQ这样一改jspSmartUploadcL能用。因为TomcatҎ件名大小写敏感,它要求Web应用E序相关的类所在目录ؓWEB-INFQ且必须是大写。接着重新启动TomcatQ这样就可以在JSP文g中用jspSmartUploadlg了?<br /><br />  注意Q按上述Ҏ安装后,只有webapps/jspsmartupload目录下的E序可以使用jspSmartUploadlgQ如果想让Tomcat服务器的所有Web应用E序都能用它Q必d如下工作Q?<br /><br />1Q进入命令行状态,目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下?<br /><br />2Q运行JAR打包命oQjar cvf jspSmartUpload.jar com <br /><br />Q也可以打开资源理器,切换到当前目录,用WinZipcom目录下的所有文件压~成jspSmartUpload.zipQ然后将jspSmartUpload.zip换名为jspSmartUpload.jar文g卛_。) <br /><br />3Q将jspSmartUpload.jar拯到Tomcat的shared/lib目录下?<br /><br /><b>二、相关类说明?/b><br /><br /><b>?Filec?/b><br /><br />  q个cd装了一个上传文件的所有信息。通过它,可以得到上传文g的文件名、文件大、扩展名、文件数据等信息?<br /><br />  FilecM要提供以下方法: <br /><br />1、saveAs作用Q将文g换名另存?<br /><br />原型Q?<br /><br />public void saveAs(java.lang.String destFilePathName) <br /><br />?<br /><br />public void saveAs(java.lang.String destFilePathName, int optionSaveAs) <br /><br />其中QdestFilePathName是另存的文g名,optionSaveAs是另存的选项Q该选项有三个|分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALQSAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系l的根目录ؓ文g根目录另存文ӞSAVEAS_VIRTUAL表明以Web应用E序的根目录为文件根目录另存文gQSAVEAS_AUTO则表Clg军_Q当Web应用E序的根目录存在另存文g的目录时Q它会选择SAVEAS_VIRTUALQ否则会选择SAVEAS_PHYSICAL?<br /><br />例如QsaveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘,则另存的文g名实际是c:\upload\sample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用E序的根目录是webapps/jspsmartuploadQ则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用E序根目录下存在upload目录Q则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)Q否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)?<br /><br />Q对于WebE序的开发来_最好用SAVEAS_VIRTUALQ以便移植?<br /><br />2、isMissing <br /><br />作用Q这个方法用于判断用h否选择了文Ӟ也即对应的表单项是否有倹{选择了文件时Q它q回false。未选文件时Q它q回true?<br /><br />原型Qpublic boolean isMissing() <br /><br />3、getFieldName <br /><br />作用Q取HTML表单中对应于此上传文件的表单的名字?<br /><br />原型Qpublic String getFieldName() <br /><br />4、getFileName <br /><br />作用Q取文g名(不含目录信息Q?<br /><br />原型Qpublic String getFileName() <br /><br />5、getFilePathName <br /><br />作用Q取文g全名Q带目录Q?<br /><br />原型Qpublic String getFilePathName <br /><br />6、getFileExt <br /><br />作用Q取文g扩展名(后缀Q?<br /><br />原型Qpublic String getFileExt() <br /><br />7、getSize <br /><br />作用Q取文g长度Q以字节计) <br /><br />原型Qpublic int getSize() <br /><br />8、getBinaryData <br /><br />作用Q取文g数据中指定位Ud的一个字节,用于文件等处理?<br /><br />原型Qpublic byte getBinaryData(int index)。其中,index表示位移Q其值在0到getSize()-1之间?<br /><br /><b>?Filesc?/b><br /><br />  q个c表C所有上传文件的集合Q通过它可以得C传文件的数目、大等信息。有以下ҎQ?<br /><br />1、getCount <br /><br />作用Q取得上传文件的数目?<br /><br />原型Qpublic int getCount() <br /><br />2、getFile <br /><br />作用Q取得指定位Ud的文件对象FileQ这是com.jspsmart.upload.FileQ不是java.io.FileQ注意区分)?<br /><br />原型Qpublic File getFile(int index)。其中,index为指定位U,其值在0到getCount()-1之间?<br /><br />3、getSize <br /><br />作用Q取得上传文件的总长度,可用于限制一ơ性上传的数据量大?<br /><br />原型Qpublic long getSize() <br /><br />4、getCollection <br /><br />作用Q将所有上传文件对象以Collection的Ş式返回,以便其它应用E序引用Q浏览上传文件信息?<br /><br />原型Qpublic Collection getCollection() <br /><br />5、getEnumeration <br /><br />作用Q将所有上传文件对象以EnumerationQ枚举)的Ş式返回,以便其它应用E序览上传文g信息?<br /><br />原型Qpublic Enumeration getEnumeration() <br /><br /><b>?Requestc?/b><br /><br />  q个cȝ功能{同于JSP内置的对象request。只所以提供这个类Q是因ؓ对于文g上传表单Q通过request对象无法获得表单的|必须通过jspSmartUploadlg提供的Request对象来获取。该cL供如下方法: <br /><br />1、getParameter <br /><br />作用Q获取指定参C倹{当参数不存在时Q返回gؓnull?<br /><br />原型Qpublic String getParameter(String name)。其中,name为参数的名字?<br /><br />2、getParameterValues <br /><br />作用Q当一个参数可以有多个值时Q用此方法来取其倹{它q回的是一个字W串数组。当参数不存在时Q返回gؓnull?<br /><br />原型Qpublic String[] getParameterValues(String name)。其中,name为参数的名字?<br /><br />3、getParameterNames <br /><br />作用Q取得Request对象中所有参数的名字Q用于遍历所有参数。它q回的是一个枚丑֞的对象?<br /><br />原型Qpublic Enumeration getParameterNames() <br /><br /><b>?SmartUploadc?/b>q个cd成上传下载工作?<br /><br /><b>AQ上传与下蝲q的方法:</b><br /><br />只有一个:initialize?<br /><br />作用Q执行上传下载的初始化工作,必须W一个执行?<br /><br />原型Q有多个Q主要用下面这个: <br /><br />public final void initialize(javax.servlet.jsp.PageContext pageContext) <br /><br />其中QpageContext为JSP面内置对象Q页面上下文Q?<br /><br /><b>BQ上传文件用的ҎQ?/b><br /><br />1、upload <br /><br />作用Q上传文件数据。对于上传操作,W一步执行initializeҎQ第二步p执行q个Ҏ?<br /><br />原型Qpublic void upload() <br /><br />2、save <br /><br />作用Q将全部上传文g保存到指定目录下Qƈq回保存的文件个数?<br /><br />原型Qpublic int save(String destPathName) <br /><br />和public int save(String destPathName,int option) <br /><br />其中QdestPathName为文件保存目录,optionZ存选项Q它有三个|分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同FilecȝsaveAsҎ的选项之值类|SAVE_PHYSICAL指示lg文件保存到以操作系l根目录为文件根目录的目录下QSAVE_VIRTUAL指示lg文件保存到以Web应用E序根目录ؓ文g根目录的目录下,而SAVE_AUTO则表C由lg自动选择?<br /><br />注:save(destPathName)作用{同于save(destPathName,SAVE_AUTO)?<br /><br />3、getSize <br /><br />作用Q取上传文g数据的总长?<br /><br />原型Qpublic int getSize() <br /><br />4、getFiles <br /><br />作用Q取全部上传文gQ以Files对象形式q回Q可以利用Filescȝ操作Ҏ来获得上传文件的数目{信息?<br /><br />原型Qpublic Files getFiles() <br /><br />5、getRequest <br /><br />作用Q取得Request对象Q以便由此对象获得上传表单参C倹{?<br /><br />原型Qpublic Request getRequest() <br /><br />6、setAllowedFilesList <br /><br />作用Q设定允怸传带有指定扩展名的文Ӟ当上传过E中有文件名不允许时Q组件将抛出异常?<br /><br />原型Qpublic void setAllowedFilesList(String allowedFilesList) <br /><br />其中QallowedFilesList为允怸传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文gQ可以用两个逗号表示。例如:setAllowedFilesList("doc,txt,,")允怸传带doc和txt扩展名的文g以及没有扩展名的文g?<br /><br />7、setDeniedFilesList <br /><br />作用Q用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限Ӟ则上传时lg抛出异常?<br /><br />原型Qpublic void setDeniedFilesList(String deniedFilesList) <br /><br />其中QdeniedFilesList为禁止上传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想止上传那些没有扩展名的文gQ可以用两个逗号来表C。例如:setDeniedFilesList("exe,bat,,")禁止上传带exe和bat扩展名的文g以及没有扩展名的文g?<br /><br />8、setMaxFileSize <br /><br />作用Q设定每个文件允怸传的最大长度?<br /><br />原型Qpublic void setMaxFileSize(long maxFileSize) <br /><br />其中QmaxFileSizeZؓ每个文g允许上传的最大长度,当文件超出此长度Ӟ不被上传?<br /><br />9、setTotalMaxFileSize <br /><br />作用Q设定允怸传的文g的总长度,用于限制一ơ性上传的数据量大?<br /><br />原型Qpublic void setTotalMaxFileSize(long totalMaxFileSize) <br /><br />其中QtotalMaxFileSize为允怸传的文g的总长度?<br /><br /><b>CQ下载文件常用的Ҏ</b><br /><br />1、setContentDisposition <br /><br />作用Q将数据q加到MIME文g头的CONTENT-DISPOSITION域。jspSmartUploadlg会在q回下蝲的信息时自动填写MIME文g头的CONTENT-DISPOSITION域,如果用户需要添加额外信息,L此方法?<br /><br />原型Qpublic void setContentDisposition(String contentDisposition) <br /><br />其中QcontentDispositiond的数据。如果contentDisposition为nullQ则lg自动添?attachment;"Q以表明下载的文g作ؓ附gQ结果是IE览器将会提C另存文Ӟ而不是自动打开q个文gQIE览器一般根据下载的文g扩展名决定执行什么操作,扩展名ؓdoc的将用wordE序打开Q扩展名为pdf的将用acrobatE序打开Q等{)?<br /><br />2、downloadFile <br /><br />作用Q下载文件?<br /><br />原型Q共有以下三个原型可用,W一个最常用Q后两个用于Ҏ情况下的文g下蝲Q如更改内容cdQ更改另存的文g名)?<br /><br />?public void downloadFile(String sourceFilePathName) <br /><br />其中QsourceFilePathName下蝲的文件名Q带目录的文件全名) <br /><br />?public void downloadFile(String sourceFilePathName,String contentType) <br /><br />其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别)?<br /><br />?public void downloadFile(String sourceFilePathName,String contentType,String destFileName) <br /><br />其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别),destFileNameZ载后默认的另存文件名?<br /><br /><b>三、文件上传篇</b><br /><br /><b>?表单要求</b><br /><br />对于上传文g的FORM表单Q有两个要求Q?<br /><br />1、METHOD应用POSTQ即METHOD="POST"?<br /><br />2、增加属性:ENCTYPE="multipart/form-data" <br /><br />下面是一个用于上传文件的FORM表单的例子: <br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="/jspSmartUpload/upload.jsp"> <INPUT TYPE="FILE" NAME="MYFILE"> <INPUT TYPE="SUBMIT"> </FORM></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>?上传的例?/b><br /><br /><b>1、上传页面upload.html</b><br /><br />本页面提供表单,让用户选择要上传的文gQ点?上传"按钮执行上传操作?<br /><br />面源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><!-- 文g名:upload.html ? 者:U|软g制作中心雨亦?zhsoft88@sohu.com) --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>文g上传</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <p>&nbsp;</p> <p align="center">上传文g选择</p> <FORM METHOD="POST" ACTION="jsp/do_upload.jsp" ENCTYPE="multipart/form-data"> <input type="hidden" name="TEST" value="good"> <table width="75%" border="1" align="center"> <tr> <td><div align="center">1? <input type="FILE" name="FILE1" size="30"> </div></td> </tr> <tr> <td><div align="center">2? <input type="FILE" name="FILE2" size="30"> </div></td> </tr> <tr> <td><div align="center">3? <input type="FILE" name="FILE3" size="30"> </div></td> </tr> <tr> <td><div align="center">4? <input type="FILE" name="FILE4" size="30"> </div></td> </tr> <tr> <td><div align="center"> <input type="submit" name="Submit" value="上传它!"> </div></td> </tr> </table> </FORM> </body> </html></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>2、上传处理页面do_upload.jsp</b><br /><br />本页面执行文件上传操作。页面源码中详细介绍了上传方法的用法Q在此不赘述了?<br /><br />面源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><%-- 文g名:do_upload.jsp ? 者:U|软g制作中心雨亦?zhsoft88@sohu.com) --%> <%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" errorPage="" %> <html> <head> <title>文g上传处理面</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <% // 新徏一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始? su.initialize(pageContext); // 讑֮上传限制 // 1.限制每个上传文g的最大长度? // su.setMaxFileSize(10000); // 2.限制M传数据的长度? // su.setTotalMaxFileSize(20000); // 3.讑֮允许上传的文Ӟ通过扩展名限Ӟ,仅允许doc,txt文g? // su.setAllowedFilesList("doc,txt"); // 4.讑֮止上传的文Ӟ通过扩展名限Ӟ,止上传带有exe,bat, jsp,htm,html扩展名的文g和没有扩展名的文件? // su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文g su.upload(); // 上传文件全部保存到指定目录 int count = su.save("/upload"); out.println(count+"个文件上传成功!<br>"); // 利用Request对象获取参数之? out.println("TEST="+su.getRequest().getParameter("TEST") +"<BR><BR>"); // 逐一提取上传文g信息Q同时可保存文g? for (int i=0;i<su.getFiles().getCount();i++) { com.jspsmart.upload.File file = su.getFiles().getFile(i); // 若文件不存在则l? if (file.isMissing()) continue; // 昄当前文g信息 out.println("<TABLE BORDER=1>"); out.println("<TR><TD>表单名QFieldNameQ?lt;/TD><TD>" + file.getFieldName() + "</TD></TR>"); out.println("<TR><TD>文g长度QSizeQ?lt;/TD><TD>" + file.getSize() + "</TD></TR>"); out.println("<TR><TD>文g名(FileNameQ?lt;/TD><TD>" + file.getFileName() + "</TD></TR>"); out.println("<TR><TD>文g扩展名(FileExtQ?lt;/TD><TD>" + file.getFileExt() + "</TD></TR>"); out.println("<TR><TD>文g全名QFilePathNameQ?lt;/TD><TD>" + file.getFilePathName() + "</TD></TR>"); out.println("</TABLE><BR>"); // 文件另? // file.saveAs("/upload/" + myFile.getFileName()); // 另存CWEB应用E序的根目录为文件根目录的目录下 // file.saveAs("/upload/" + myFile.getFileName(), su.SAVE_VIRTUAL); // 另存到操作系l的根目录ؓ文g根目录的目录? // file.saveAs("c:\\temp\\" + myFile.getFileName(), su.SAVE_PHYSICAL); } %> </body> </html></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>四、文件下载篇</b><br /><br /><b>1、下载链接页面download.html</b><br /><br />面源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><!-- 文g名:download.html ? 者:U|软g制作中心雨亦?zhsoft88@sohu.com) --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>下蝲</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <a href="jsp/do_download.jsp">点击下蝲</a> </body> </html></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>2、下载处理页面do_download.jsp</b> do_download.jsp展示了如何利用jspSmartUploadlg来下载文Ӟ从下面的源码中就可以看到Q下载何其简单?<br /><br />源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %><% // 新徏一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始? su.initialize(pageContext); // 讑֮contentDisposition为null以禁止浏览器自动打开文gQ? //保证点击链接后是下蝲文g。若不设定,则下载的文g扩展名ؓ //docӞ览器将自动用word打开它。扩展名为pdfӞ //览器将用acrobat打开? su.setContentDisposition(null); // 下蝲文g su.downloadFile("/upload/如何赚取我的W一桉.doc"); %></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><ccid_code>注意Q执行下载的面Q在Java脚本范围外(?lt;% ... %>之外Q,不要包含HTML代码、空根{回车或换行{字W,有的话将不能正确下蝲。不信的话,可以在上q源码中%><%之间加入一个换行符Q再下蝲一下,保证出错。因为它影响了返回给览器的数据,D解析出错?/ccid_code><br /><br /><b>3、如何下载中文文?/b><br /><br />jspSmartUpload虽然能下载文Ӟ但对中文支持不。若下蝲的文件名中有汉字Q则览器在提示另存的文件名Ӟ昄的是一堆ؕ码,很扫人兴。上面的例子是q样。(q个问题也是众多下蝲lg所存在的问题,很少有h解决Q搜索不到相兌料,可叹Q) <br /><br />ZljspSmartUploadlg增加下蝲中文文g的支持,我对该组件进行了研究Q发现对q回l浏览器的另存文件名q行UTF-8~码后,览器便能正显CZ文名字了。这是一个o人高兴的发现。于是我对jspSmartUploadlg的SmartUploadcd了升U处理,增加了toUtf8Stringq个ҎQ改动部分源码如下: <br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>public void downloadFile(String s, String s1, String s2, int i) throws ServletException, IOException, SmartUploadException { if(s == null) throw new IllegalArgumentException("File '" + s + "' not found (1040)."); if(s.equals("")) throw new IllegalArgumentException("File '" + s + "' not found (1040)."); if(!isVirtual(s) && m_denyPhysicalPath) throw new SecurityException("Physical path is denied (1035)."); if(isVirtual(s)) s = m_application.getRealPath(s); java.io.File file = new java.io.File(s); FileInputStream fileinputstream = new FileInputStream(file); long l = file.length(); boolean flag = false; int k = 0; byte abyte0[] = new byte[i]; if(s1 == null) m_response.setContentType("application/x-msdownload"); else if(s1.length() == 0) m_response.setContentType("application/x-msdownload"); else m_response.setContentType(s1); m_response.setContentLength((int)l); m_contentDisposition = m_contentDisposition != null ? m_contentDisposition : "attachment;"; if(s2 == null) m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + toUtf8String(getFileName(s))); else if(s2.length() == 0) m_response.setHeader("Content-Disposition", m_contentDisposition); else m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + toUtf8String(s2)); while((long)k < l) { int j = fileinputstream.read(abyte0, 0, i); k += j; m_response.getOutputStream().write(abyte0, 0, j); } fileinputstream.close(); } /** * 文件名中的汉字转ؓUTF8~码的串,以便下蝲时能正确昄另存的文件名. * U|软g制作中心雨亦?003.08.01 * @param s 原文件名 * @return 重新~码后的文g? */ public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i=0;i<s.length();i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = Character.toString(c).getBytes("utf-8"); } catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k). toUpperCase()); } } } return sb.toString(); }</ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br />注意源码中粗体部分,原jspSmartUploadlg对返回的文g未作M处理Q现在做了编码的转换工作Q将文g名{换ؓUTF-8形式的编码Ş式。UTF-8~码对英文未作Q何处理,对中文则需要{换ؓ%XX的Ş式。toUtf8StringҎ中,直接利用Java语言提供的编码{换方法获得汉字字W的UTF-8~码Q之后将其{换ؓ%XX的Ş式?<br /><br />源码编译后打包成jspSmartUpload.jarQ拷贝到Tomcat的shared/lib目录下(可ؓ所有WEB应用E序所׃nQ,然后重启Tomcat服务器就可以正常下蝲含有中文名字的文件了。另QtoUtf8StringҎ也可用于转换含有中文的超U链接,以保证链接的有效Q因为有的WEB服务器不支持中文链接?<br /><br />结QjspSmartUploadlg是应用JSPq行B/SE序开发过E中l常使用的上传下载组Ӟ它用简单,方便。现在我又ؓ其加上了下蝲中文名字的文件的支持Q真个是如虎ȝQ必赢得更多开发者的青睐?<br /></font> </span> </span> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/55276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-06-27 10:42 <a href="http://www.tkk7.com/wuxufeng8080/articles/55276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Smartupload和commons-fileupload介绍与比?/title><link>http://www.tkk7.com/wuxufeng8080/articles/55273.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Tue, 27 Jun 2006 02:33:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/55273.html</guid><wfw:comment>http://www.tkk7.com/wuxufeng8080/comments/55273.html</wfw:comment><comments>http://www.tkk7.com/wuxufeng8080/articles/55273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wuxufeng8080/comments/commentRss/55273.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wuxufeng8080/services/trackbacks/55273.html</trackback:ping><description><![CDATA[ <p>WEB文g上传可能是网站徏设中最常用的功能之一Q我在项目开发中几乎都需要实现文件上传功能.前段旉自己搜集了一些上传组Ӟq篇文章中将介绍q些lg的用方法,q且比较各自的优劣.</p> <p>一QsmartuploadlgQ?/p> <p>我想只要做个文g上传的朋友都知道q个lgQ我认识的h中用最多的也是它!我刚到公司的时候,公司也用的smartupload,q个lg上传相对较小的文件时是个不错的选择Q下面给Z使用的例子:</p> <p>  <br /><%@ page contentType="text/html;charset=gb2312"%><br /><%@ page import="java.sql.*"%><br /><%@ page import="com.jspsmart.upload.*" %></p> <p><%<br />   //实例化上载bean<br />    SmartUpload mySmartUpload=new SmartUpload();<br />    //初始?br />    mySmartUpload.initialize(pageContext); <br />    //讄上蝲的最大?注意:如果q里讄q大会出现问?<br />    mySmartUpload.setMaxFileSize(500 * 1024*1024);<br />    //上蝲文g<br />    mySmartUpload.upload();<br />   //循环取得所有上载的文g<br />   for (int i=0;i<mySmartUpload.getFiles().getCount();i++){<br />   //取得上蝲的文?br />   com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);<br />   if (!myFile.isMissing())<br />    {<br />   //取得上蝲的文件的文g?br />    String myFileName=myFile.getFileName();<br />    //取得不带后缀的文件名<br />    String  suffix=myFileName.substring(0,myFileName.lastIndexOf('.'));<br />    //取得后缀?br />    String  ext= mySmartUpload.getFiles().getFile(0).getFileExt();  <br />    //取得文g的大?<br />    int fileSize=myFile.getSize();<br />    //保存路径<br />    String aa=getServletContext().getRealPath("/")+"jsp\\";<br />    String trace=aa+myFileName;<br />    //取得别的参数<br />    String explain=(String)mySmartUpload.getRequest().getParameter("text");<br />    String send=(String)mySmartUpload.getRequest().getParameter("send");<br />    //文件保存在服务器端 <br />    myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL);<br />    %></p> <p> <br />但是使用smartupload上传q大文gQ或者多文g的时候可能出现CPU或内存占用过高的问题Qƈ且:只有重新启动容器才能恢复正常!q正是我最后我攑ּ了用smartupload的原因.</p> <p>二,commons-fileuploadlg</p> <p>q个lg是我现在使用的组Ӟ下蝲地址Q?a >http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi</a>Q包内包含了API文档Q?/p> <p>使用该组件的例子Q?/p> <p><%@ page language=“java”contentType=“text/html;charset=GBK?><br /><%@ page import=“java.util.*?><br /><%@ page import=“org.apache.commons.fileupload.*?><br /><html><br /><head><br /><title>文g上传</title><br /></head><br /><%<br /> DiskFileUpload fu = new DiskFileUpload();<br /> // 讄允许用户上传文g大小,单位:字节<br /> fu.setSizeMax(10000000);<br /> // 讄最多只允许在内存中存储的数?单位:字节<br /> fu.setSizeThreshold(4096);<br /> // 讄一旦文件大超qgetSizeThreshold()的值时数据存放在硬盘的目录<br /> fu.setRepositoryPath(“D:\\Tomcat5\\TEMP?;<br /> //开始读取上传信?br /> List fileItems = fu.parseRequest(request);<br /> // 依次处理每个上传的文?br /> Iterator iter = fileItems.iterator();<br /> while (iter.hasNext()) {<br />  FileItem item = (FileItem) iter.next();<br />  //忽略其他不是文g域的所有表单信?br />  if (!item.isFormField()) {<br />   String name = item.getName();<br />   item.write(“D:\\UploadTest\\? name);<br /> }<br />}<br />%></p> <p>从上面的E序可以看出Q该lg上传时候可以用了一个地Ҏ存储临时文gQ呆上传完成后直接把文g写过去.q样׃会占用过多的内存Q而且该组件上传大文g的时候效率也不低哦!</p> <p>在这两个的对比选择中,我选择了后者,因ؓ我做的项目中l常上传大于10M的文Ӟ用前者的时候服务器几乎被整崩溃Q?/p> <p>不过,现在我已l不用这两种lg?因ؓhttp方式传文件效率始l很?我们现在使用的是web方式实现的ftp文g上传,我将在下文章中写我在项目中是如何实现的.</p> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/55273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-06-27 10:33 <a href="http://www.tkk7.com/wuxufeng8080/articles/55273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtremeTablehttp://www.tkk7.com/wuxufeng8080/articles/54432.html风h?/dc:creator>风h?/author>Thu, 22 Jun 2006 02:33:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/54432.htmlhttp://www.tkk7.com/wuxufeng8080/comments/54432.htmlhttp://www.tkk7.com/wuxufeng8080/articles/54432.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/54432.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/54432.htmlExtremeTable

     Author: 江南白 

    0.概述

        Home Page:http://www.extremecomponents.org

         Extreme Table是最功能强大而又Ҏ配置,扩展,自定义的Table 控g?/p>

         最紧要的功能包括排? 分页, 导出Excel, pdf和汇怅R?/p>

         springside的best CZ代码? listBook.jsp和listOrder.jsp.

    基础ȝ: 

         1. ExtremeTable自带的文?/a> .

         2.Luck译的ExtremeTable官方文中文?/a>   

    1. 安装

    1.1 安装原始版本

         1. ?a >http://www.extremecomponents.org 下蝲最新版

         2.把extremecomponents.jar 攑օweb-inf/lib

         3.Ҏminum, 导出excel ?导出pdf的需要,?lib下的jar copy到web-inf/lib

         4.把images里的囄攑օweb的Q意目?/p>

         5.把css文g攑ֈweb的Q意目?/p>

         6.?source/org/extremecomponents/table/core目录扑ֈextremetable.properties文g,把它复制到WEB-INF/classes里面q进行修?

         7.修改web.xml (?)?/p>

     0.2 复制SpringSide的样?/h3>

         1.Copy springside的Table Head的图Q查?/p>

         2.springside中的修改版extremecomponents.css文g攑օL目录

         3.?src/resource/extremetable.properties 复制到对应目?/p>

    0.3 使用Compact View很重?/h3>

         默认的式样不W合大家的审,q怺q有Compact View和css讄Q让我们可以敬谢不敏它号U非常方便的HtmlView子类扩展?/p>

        1. 在全局讄?/p>

     
    table.view.html=org.extremecomponents.table.view.CompactView

        2.把images?table/compact/*.gif copy ?/table

    2.全局属性配|?/h2>

       ExtremeTable支持在properties文g里方便的l一配置丰富的全局属?/p>

      ?source/org/extremecomponents/table/core目录扑ֈextremetable.properties文g,把它复制到WEB-INF/classes里面.

     在web.xml里面增加

       <context-param>
            <param-name>extremecomponentsPreferencesLocation</param-name>
            <param-value>/extremetable.properties</param-value>
       </context-param>

    一般只写需要修改的文g:

    table.filterable=false
    table.imagePath=/images/table/*.gif
    table.locale=zh_CN
    table.view.html=org.extremecomponents.table.view.CompactView
    row.highlightRow=true
    column.format.date=yyyy-MM-dd
    column.format.currency=###,###,###,###,#00.00

    3.导出Excel

        注意Excel 导出的Tag已改为,且官方版不支持中文文件名?/p>

        <ec:exportXls fileName="BookList.xls" tooltip="导出 Excel"/>

         ExtremeTable导出的一w要特性是可以Ҏ不同的View导出不同的列.

         比如html理界面可能只列单几个最重要的列Q而导出excel时则需要导出所有的列?/p>

    <ec:column property="orderdate" title="订单日期"  cell="date" format="yyyy-MM-dd"  viewsDenied= "html"/>

         以上订单日期列在html view看不刎ͼ而excel,pdf view可以见到.

        ?~辑图标"Q?选择Checkbox"q些理界面上的列,也可以设|不export到pdf,excel view

    4.其他要点

    4.1. 使用排序功能?如果property为嵌套属性时,需要设|alias

              因ؓjavascript的关p?

    <ec:column property="customer.name" title="客户名称" alias="customer"/>

    4.2. Date Cell与NumberCell

         在全局属性定?

     column.format.date= yyyy-MM-dd
    column.format.currency= K?##,###,#00.00

     

    <ec:column property="totalprice" title="总金? cell="currency" width="80" />
    <ec:column property="shipdate" title="发货日期"  cell="date" width= "80"/>

    4.3. 汇?/h3>

    在column中加入两个cac属性,׃自动在table的底端显C汇?/p>

    <ec:column property="totalprice" title="总金? cell="number" format="###,###,##0.00" calc="total" calcTitle= "汇?"/>

    4.4 i18N

    在Web.xml里面指定i18N的Properties文g

    <context-param>
      <param-name>extremecomponentsMessagesLocation</param-name>
      <param-value>messages</param-value>
    </context-param>
    <ec:column property="name" title="book.name"/>

    4.5数据库分?/h3>

     EC默认从数据库中查找所有记录然后由它来分页Q如果查询结果较大,可以考虑使用数据库端分页的方案?/p>

     此时QEC会用Limit对象向Controller传递PageNo,PageSize,OrderBy{分信息。而服务端向ECq回总记录数和当前页的内容,具体请参?BookController?/p>

    4.6不显C导出excel及分?/h3>

    最快的方式是设|table的showStatusBar= false

    <ec:table  items= "order.orderItems"var="item" action=""   showStatusBar= "false">

        4.7ImagePath

      旧版EC包括其文都在每个table tag里定义ImagePath, 新版已经可以自动插入ContextPath,只需在properties文g定义table.imagePath=/images/table/*.gif卛_

    5.自定义及扩展

       ExtremeTable比Display Tag的i一个就是良好的自定义和扩展能力Q不用千Z面?br />   不过QhL懒的Q虽然扩展子cdҎQ但能不扩展p是不可扩展了。幸亏用Compact View再改改CSS一般就能达到要求?/p>

     5.1. 良好的CSS定义

             ExtremeTable 的CSS定义非常严}, q且提供很多个层ơ的修改方式:

             1.直接修改css文g, 可以把table viewҎL样式

             2.修改全局属? 改变某种元素对应的css class?/p>

    table.styleClass=tableRegion

             3.在某个页面的row,column tag中定义class

     <ec:row style="" or styleClass=""/>

            SpringSide采用层次1, 直接修改extremecomponents.css为合适的样式

    5.2方便?lt;tr><td>属性扩?/h3>

            row与column已提供了丰富的普通属性与 javascript属性如onClick(), 如果属性仍然未?可自行扩?lt;row>?lt;column>tag Qƈ通过全局属性指定新的子cd?/p>

       Z方便大家在子cL展属? extreme Table提供了专门的回调函数与Util函数?/p>

    public void addColumnAttributes(Column column) {
       column.addAttribute("customAttributeOne", customAttributeOne);
    }

    详细L手册,Table, Row,Column都提供相同的扩展:
    http://extremecomponents.org/wiki/index.php/Column#Extended_Attributes

    如果不是Extremetable的特别支? 普通taglib class要扩展属性的?
            1.定义真正的Java属?setter,getter
            2. tld文g中声明新的属?
            3.重蝲输出函数新属性打印出?/p>

    5.3 扩展HTMLView,cell {显C组?/h3>

         Extreme Table在这些类的扩展上放便很多Q但q个版本里我q没有进行尝试,׃写了。请自行参考官Ҏ?http://extremecomponents.org/wiki/index.php/Html_View_Tutorial .



    ]]>JSP里request变量列表 http://www.tkk7.com/wuxufeng8080/articles/54042.html风h?/dc:creator>风h?/author>Tue, 20 Jun 2006 10:06:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/54042.htmlhttp://www.tkk7.com/wuxufeng8080/comments/54042.htmlhttp://www.tkk7.com/wuxufeng8080/articles/54042.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/54042.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/54042.html<%
    out.println("Protocol: " + request.getProtocol() + " ");
    out.println("Scheme: " + request.getScheme() + " ");
    out.println("Server Name: " + request.getServerName() + " " );
    out.println("Server Port: " + request.getServerPort() + " ");
    out.println("Protocol: " + request.getProtocol() + " ");
    out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo() + " ");
    out.println("Remote Addr: " + request.getRemoteAddr() + " ");
    out.println("Remote Host: " + request.getRemoteHost() + " ");
    out.println("Character Encoding: " + request.getCharacterEncoding() + " ");
    out.println("Content Length: " + request.getContentLength() + " ");
    out.println("Content Type: "+ request.getContentType() + " ");
    out.println("Auth Type: " + request.getAuthType() + " ");
    out.println("HTTP Method: " + request.getMethod() + " ");
    out.println("Path Info: " + request.getPathInfo() + " ");
    out.println("Path Trans: " + request.getPathTranslated() + " ");
    out.println("Query String: " + request.getQueryString() + " ");
    out.println("Remote User: " + request.getRemoteUser() + " ");
    out.println("Session Id: " + request.getRequestedSessionId() + " ");
    out.println("Request URI: " + request.getRequestURI() + " ");
    out.println("Servlet Path: " + request.getServletPath() + " ");
    out.println("Accept: " + request.getHeader("Accept") + " ");
    out.println("Host: " + request.getHeader("Host") + " ");
    out.println("Referer : " + request.getHeader("Referer") + " ");
    out.println("Accept-Language : " + request.getHeader("Accept-Language") + " ");
    out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding") + " ");
    out.println("User-Agent : " + request.getHeader("User-Agent") + " ");
    out.println("Connection : " + request.getHeader("Connection") + " ");
    out.println("Cookie : " + request.getHeader("Cookie") + " ");
    out.println("Created : " + session.getCreationTime() + " ");
    out.println("LastAccessed : " + session.getLastAccessedTime() + " ");

    %>

    q行l果Q?

    Protocol: HTTP/1.1
    Scheme: http
    Server Name: 192.168.0.1
    Server Port: 8080
    Protocol: HTTP/1.1
    Server Info: JavaServer Web Dev Kit/1.0 EA (JSP 1.0; Servlet 2.1; Java 1.2; Windows NT 5.0 x86; java.vendor=Sun Microsystems Inc.)
    Remote Addr: 192.168.0.106
    Remote Host: abc
    Character Encoding: null
    Content Length: -1
    Content Type: null
    Auth Type: null
    HTTP Method: GET
    Path Info: null
    Path Trans: null
    Query String: null
    Remote User: null
    Session Id: To1010mC466113890241879At
    Request URI: /c.jsp
    Servlet Path: /c.jsp
    Accept: */*
    Host: 192.168.0.1:8080
    Referer : null
    Accept-Language : zh-cn
    Accept-Encoding : gzip, deflate
    User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
    Connection : Keep-Alive
    Cookie : SESSIONID=To1010mC466113890241879At
    Created : 965764522168
    LastAccessed : 965775587088?/p>

    ]]>
    JSTLhttp://www.tkk7.com/wuxufeng8080/articles/53827.html风h?/dc:creator>风h?/author>Mon, 19 Jun 2006 09:21:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/53827.htmlhttp://www.tkk7.com/wuxufeng8080/comments/53827.htmlhttp://www.tkk7.com/wuxufeng8080/articles/53827.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/53827.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/53827.html  

       此文中,我们更详细地讲qC同标记描q文ӞTag Library DescriptorQTLDQ里的各U标记。我们会通过例子去说明条件、P代、URL、SQL及XML{标记的使用。文章的目的是展示JSTL的主要功能,说明如何使用JSTL以及说明如何使用JSTLL善JSP的开发?br />
       单来_JSTL是一套可以用在多个方面的自定义功能,JAVA标准l织QJava Community ProcessQJCPQ在JSR-52里面定义刎ͼJSTL提供表达式语aQexpression languageQ,程控制及数据检校等功能QJSTL规范的最后版本可以在JCP的网站上扑־到?br />
       JSTL要求q行在支持JSP 1.2版的服务器上QJSTL的主旨就是简化JSP的开发以及提供访问、操作数据的便方式,使用JSTL可以使用大家的工作更L?br />
        JSTL包含了多个TLD和JAR文gQ这些TLD覆盖很多功能Q我们将一个个说明。首先,我们要重点说一下JSTL最H出的功能,表达式语a?br />
        实际上,表达式语a是由JSR-152专家l所提供的,也就是定义JSP 2.0的专家组。JSR-152和JSR-52很多时是在一起工作的Q更甚的是,表达式语a已经成ؓJSP 2.0的一部分。表辑ּ语言提供讉K数据的一U简便方法,它支持运,支持beanQ支持集合,同时也支持类型{换和属性的~省倹{?br />
    使用表达式语a

       表达式语a是通过 ${expression} q样的Ş式来调用的,q且它只能用在属性里面,例如Q?br />
    <c:if test="${product.price >= customer.limit}">
    ...
    </c:if>


       在上面的例子Q我们用表辑ּ语言做一个比较运,它也可以混合一些静态文本,p下面的例子:

    <c:forEach var="current">
            <c:out value="Product-${current}"/>
    </c:forEach>


       在例子里面,我们枚DZ个集合里面的元素Q之后将它加在一个字W串后面输出Q结果就象:

    Product-1
    Product-2
    Product-3...

       从例子里可以看出Q相对于以前的代码,使用JSTL之后Q在整个q程变得单清晰。在以前Q你需要定义一个对象,要知道对象的cdQƈ且要掌握一些脚本语aQ而这只是d成一个简单的操作?br />
       现在Q有了JSTLQ我们可以用简单的语法去访问数据,表达式语a是非帔R合做这L工作的?br />
       再D一个例子,我们可以:

    <jsp:useBean id="customer" type="sample.Customer" scope="request"/> ...
    Customer Name: <%=customer.getName()%>
    ...
    <% if (customer.getState().equals("CO")){ %>
    ...
    <%}%>


       转换成:

    Customer Name: ${ customer. name}
    <c:if test="${customer. state == param. state}">
    ...
    </c:if>


       表达式语a允许直接讉KJSP中Q何作用域的变量,比如可以?{foo}来代替pageContext.findAttributes("foo")。还有可以能q点或烦引来讉Kbean以及它们的属性,如:

    ${user.address.city} 
    ${products.[product.id]}
    ${products.["Part-010"]}


        表达式语a提供所有你使用到的q算Q?=, !=, <,>, <=, >=, &&, ||, ! 。这表达式语a中,它们表示为lt, gt, le, ge, eq, neQ这样可以避免与XML的语法重复。表辑ּ语言也有普通的术q算同布运。另外,表达式语aq具有自动类型{换的功能Q如int value = "${request.myValue}"会自动{换?br />
       在表辑ּ语言是可以提供属性的~省值的Q用缺省值是Z避免I指针异常,下面是一个例子,

    <c:set var="city" value="${user.address.city}" default="N/A" />


       现在Q我们已l对表达式语a有所了解Q下面,让我们看一下与EL相关的操作?br />
    核心操作

       在核心标记库里用到表达式语a?lt;c:out>标记表辑ּ语言所计算出的D出到当前的JSP输出。这个与JSP中的<%= scripting exp %>怼。比如:

    <c:out value="${customer.name}"  default="N/A" />


       核心标记库里q可以设|和清除变量。变量的~省作用域是PAGE。例如我们可以用<c:set var="customer" value=${customer}" />讄一个页面变量customerQ再用一?lt;c:remove var="customer" />L除它?br />
       现在Q能qJSTLQ我们可以用一个标记去捕捉java.lang.ThrowableQ例如:<c:catch var="myError" />。用这个标讎ͼ可以l一面的异常处理,但这不意味着代替JSP的错误页面机制。通过使用<c:catch>标记Q就可以在页面上控制特定的异常,而不用{到错误页面,其实q不是所有异帔R需要{到错误页面。通过使用<c:catch>标记Q与用户的交互也变得更友好?br />
    条g操作

        在条件操作中使用EL是简化JSP的一U强有力的手Dc?lt;c:if>标记Q它可以构造简单的条g表达式。下面的例子Q访问了一个对象的属性:

    <c:if test="${user.visitCount == 1}"
            Welcome back!
    </c:if>


        当然Q有IF׃定会有ELSE。如果是"if/then/else"l构的,则?lt;c:choose>, <c:when>?lt;c:otherwise>标记?br />
       看一看下面的例子Q我们对一个查询结果集做过了一些处理,之后使用标记LC正的信息?br />
    <c:choose>
    <c:when test="${count == 0}">
            No records matched your selection.
    </c:when>
    <c:otherwise>
            <c:out value="${count}"/> records matched your selection.
    </c:otherwise>
    </c:choose>


    q代操作

       在整个JSTL里面Q可能最有用的操作就是P代操作了。P代操作的标记?lt;c:forEach>Q?lt;c:forToken>?lt;x:forEach>。最后一个是XML的P代操作。下面我们会说到XML的操作,但现在我们还是l核心操作?br />
        q代操作支持所有的J2SE集合cdQ包括List, LinkedList, ArrayList, Vector, Stack, 和Set。还有java.util.Map对象Q如HashMap, Hashtable, Properties, Provider, 和Attributes。还有数l。当使用基本数据cd的数l时Q它会包装成对应的基本类。在q代操作中,会输Z个东西,当前的数据项和P代的状态。看看下面的例子Q?br />
    <table>
    <c:forEach var="product"
                  items="${products}"
                  varStatus="status">
    <tr>
            <td><c:out value="${status.count}"/></td>
            <td><c:out value="${product.name}"/></td>
    </tr>
    </c:forEach>
    </table>


       例子中,products是一个集合,当前的数据项入在变量product里面Q变量status是当前的q代状态。是不是很简单?br />
    URL操作

       除了q找操作外,核心标记库里也提供了URL相关的操作,它包括超链接Q引入和重定向。可以?lt;c:url>去设定一个URL。假如我们想指定一个带参数的URLQƈ在链接中使用Q那p下面的例子:

    <c:url=http://mysite.com/register var="myUrl">
            <c:param name="name" value="${param.name}"/>
    </c:url>
    <a href='<c:out value="${myUrl}"/>'>Register</a>


       JSTL中有很强大的资源引入机制Q它可以指定l对的URLQ在同一应用的相对的URLQ不同应用的相对的URLQ还有FTP资源。下面给Z些例子:

    l对URLQ?lt;c:import url="http://sample.com/Welcome.html"/>
    同一应用中的相对的URLQ?lt;c:import url="/copyright.html"/>
    不同应用中的相对的URLQ?lt;c:import url="/myLogo.html" context="/common"/>
    FTP资源Q?lt;c:import url="ftp://ftp.sample.com/myFile"/>

       通过上面的说明可以看出,<c:import>?lt;jsp:include>强大得多Q但是,也有其它理由M?lt;jsp:include>的。在JSTL中,对于引入的资源用了~存Q但有时候缓存会是没用的。如果你使用<jsp:include>Q资源的内容会被dq写到当前的JspWriterQ而且是每讉K一ơ就重读一ơ。而?lt;c:import>Q资源的内容则只会读取一ơ?br />
    本地化操?/b>

       JSTL的另一样重要功能就是本地化操作Q通过当前h的,或者环境配|中的参敎ͼ可以简便地实现本地化操作。这个操作是使用J2SE中的ResourceBundle机制d攑֐U译文的。JSTL通过讑֮的区域,L到ƈ使用相应的ResourceBundle。用<fmt:setLocale>去设|区域,?lt;fmt:setLocale value="es_Es"/>Qvalue属性ؓ语言代码和国家代码。也可以直接指定一个ResourceBundleQ?lt;fmt:bundle basename="ApplicationResource_fr"/>?br />
       一旦设|了区域或者绑定特定的信息Q那?lt;fmt:message>标记׃自动地选择正确的ResourceBundleQ用以下的形式可以输出正的信息Q?br />
    <fmt:message key="welcome">
            <fmt:param value="${visitCount}" />
    <fmt:message/>


       你也可以直接使用< fmt:requestEncoding/>标记去设|当前请求的字符集?br />
       获取和显C文字信息只是本地化操作的一半,而另一半就是格式化同解释日期和数字Q不同的地域会有不同的日期和数字格式的。?lt;fmt:formatNumber>?lt;fmt:parseNumber>L式化数字Q金额,癑ֈ比数Q而且q可以指定格式,如<fmt:formatNumber value="12.3" pattern=".00"/>会输?12.30"?br />
       日期和时间的处理使用<fmt:formatDate>, <fmt:timeZone>, <fmt:setTimeZone>, ?<fmt:parseDate>?br />
    SQL操作

       SQL操作允许你直接操作数据源Q在MVC模式里面是不提倡这样做的,我更是彻底反对在一个正式品里q样做。它们只适用于快速开发,原型开发或者是一些小的应用里面,它们是不应该用在一些大型的应用上面的。不q也有许多开发h员想使用它,所以它保留在标准里面。下面我们来看一下SQL操作?br />
       SQL标记可以用来讄数据源,执行查询Q访问查询结果,执行更新{。所有的SQL操作都是Z某一数据源的。有几种方式可以讄数据源:在配|文仉讄
    sql.datasource参数Q在E序中直接设|,或者?lt;sql:setDataSource>标记。如下面p|了一个MySql的数据源Q?br />
    <sql:setDataSource var="datasource"  driver="org.gjt.mm.mysql.driver" url="jdbc:mysql://localhost/db" />


       与JDBC中的DriverManager怼Q?lt;sql:setDataSource>也只是一个包装。数据源的属性,它可以是一个JNDI资源Q也可以是一个JDBC参数。用<sql:query datasource="${datasource}" ... />q样的方式来讉K数据?br />
       我们把这些东襉K攑֜一P它是会是q样的:

    <sql:query var="customer" datasource="${datasource}" 
    SELECT * FROM customers WHERE state = 'CO' ORDER BY city
    </sql:query>
    <table>
    <c:forEach var="row" items="${customers.row}">
            <tr>
            <td><c:out value="${row.custName}" /></td>
            <td><c:out value="${row.address}" /></td>
            </tr>
    </c:forEach>
    </table>


        使用事务和执行更C样也很简单。例如,我们建立一个事务,q执行几个更斎ͼ那就是下面代码:

    <sql:transaction dataSource="${dataSource}">
    <sql:update>
            UPDATE account SET Balance =Balance -? WHERE accountNo = ?
            <sql:param value="${transferAmount}"/>
            <sql:param value="${accountFrom}"/>
    </sql:update>
    </sql:transaction>


       ?lt;sql:dateParam>标记来设定SQL语句中的cd为日期型的参数的倹{?br />
    XML操作

       JSTL中最后一cL作是XML操作QXML操作也可l分成核心操作,程控制操作和{换操作。JSTL中的XML操作是基于Xpath的,Xpath是XML操作专用的表辑ּ语言。JSTL所有的XML操作中,?select"属性去指定XPath表达式,q些信息由XPath引擎解释?br />
       XML核心操作与JSTL的核心操作相|它包?lt;x:out>, <x:set>, ?lt;x:parse>标记?lt;x:parse>标记提供XML文转换成结构化数据的功能,之后Q这些数据就能被XPath引擎解释了。例如,有一个关于书c的XML文档Q我们就可以解释它,q打印出来:

    <c:import url="http://oreilly.com/book?id=1234" var="xml"/>
    <x:parse source="${xml}" var="bookInfo"/>
    <x:out select="$bookInfo/title"/>
    <x:out select="$bookInfo/author"/>


       XMLcLE控制操作与核心cȝ程控制操作一P包括if, choose, when, otherwise, ?forEach q些标记Q区别只是它们用XPath表达式语a。当表达式计出来后Q根据一些规则,l果{换成一个布倹{这些规则如下:

    A number is true if and only if it is neither positive or negative zero nor NaN.
    一个数字当且仅当它不是一个正敎ͼ也不是一个负Ӟ更不是一个NaNQ非数字Q时Q表辑ּ的gؓ真?br />A node-set is true if and only if it is non-empty.
    一个节点当且仅当它不是IҎQ表辑ּ的gؓ真?br />A string is true if and only if its length is non-zero.
    一个字W串当且仅当它的长度不ؓ0是,表达式的gؓ真?br />
       XML转换操作Q是通过XSL样式表来转换XML文Q{换的l果输出到当前页面,另一斚w也可以其中的l果保存到变量中。完成一个{换就是导入一个XML文和XSL样式表,之后做一个{换那么简单:

    <c:import url="/books" var="xml"/>
    <c:import url="/WEB-INF/xslt/bookDisplay.xsl" var="xslt"/>
    <x:transform source="${xml}" xslt="${xslt}"/>


       如果你在转换中用到参数Q你可以?lt;x:param>指定参数名称及参数倹{?br />


       现在Q你已经学会了用JSTL中的标记Q这P开发JSP会更Ҏ更快捗留意JSTL的发展,当JSTL的正式版本发布以后,JSP服务器的提供厂商׃Ҏ优化。你可以在http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html中得到JSTL的最后实现版本?br />

    ]]>
    Request attributehttp://www.tkk7.com/wuxufeng8080/articles/53805.html风h?/dc:creator>风h?/author>Mon, 19 Jun 2006 08:06:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/53805.htmlhttp://www.tkk7.com/wuxufeng8080/comments/53805.htmlhttp://www.tkk7.com/wuxufeng8080/articles/53805.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/53805.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/53805.htmlrequest.getRemoteHost()    client host name


    ]]>
    վ֩ģ壺 a vרav| ˳վɫwww| һƵѹۿ| ƷAV鶹| ˾þô߽ۺͼƬ| ձ岻aվ| ˳77777վ| ʵƵѹۿ| avƬ쿴| ַ߹ۿ| ޾Ʒһ³˿Ƭ| 91ƷѾþþþþþþ| Ůžž| ޴˽| Ļߵ| ƬվAëƬ| þƵۿ| ˬָ߳ˮƵ| ˳߹ۿ| ĻƷ| һӰ߿Ƭ | ھƷ߹ۿ | ĻĻɫ| þþþþþۺձ| ԻƤȫƵѹ30 | ɫƬѹۿ| þֻƷ99re| avƬ쿴| ҳƵ߹ۿ| ˾Ʒۺں| Ʒ޹AVƬý| ޾Ʒþǧն| 鶹Ʒ͵Բ91| Ʒ˸| ôͺˬƵ| ˸ӰԺѿ| һëƬѲ| þþþþùƷͬ | 91Ƶѹۿ| žŮվ| 2019Ļֱ |