jsp上污染控件_jspsmartupload

一、安装篇 

  jspSmartUpload是出于www.jspsmart.com网站开的一个只是免费使用的均效的文书上传下载组件,适于嵌入执行上传下载操作的JSP文件被。该器件有以下几单特征: 

1、使用简单。在JSP文件中才开三五执java代码就可搞定文件之上传或下载,方便。 

2、能全程控制上传。利用jspSmartUpload组件提供的目的及其操作方法,可以落全套上传文书之信息(包括文件称,大小,类型,扩展名,文件数量等),方便存取。 

3、能对上传的文件在大大小小、类型等地点做出限定。如此好过滤掉不符合要求的文本。 

4、下载灵活。仅写点儿实践代码,就会管Web服务器变成文件服务器。不管文件于Web服务器的目下要在外任何目录下,都好行使jspSmartUpload举办下载。 

5、能将文件及流传数据库遭受,也能用数据库中之数下载下来。这种效能对的凡MySQL数据库,因为不有通用性,所以本文不备举例介绍那种用法。 

  jspSmartUpload组件可以打www.jspsmart.com网站及任意下载,压缩包的名是jspSmartUpload.zip。下载后,用WinZip或WinRAR将其解压到汤姆cat的webapps目录下(本文为Tomcat服务器也例举行介绍)。解压后,将webapps/jspsmartupload目录下的子目录Web-inf名字改成呢全大写的WEB-INF,这样平等改jspSmartUpload类才可以应用。因为汤姆cat对文本称大小写敏感,它要求Web应用程序相关的类所在目录为WEB-INF,且倘使大写。接着还启航Tomcat,这样便可当JSP文件被行使jspSmartUpload组件了。 

  注意,按上述格局安装后,只有webapps/jspsmartupload目录下之程序可以使用jspSmartUpload组件,假设想叫Tomcat服务器的所有Web应用程序都可以为此其,必须做如下工作: 

1.进命令行状态,将引得切换至Tomcat的webapps/jspsmartupload/WEB-INF目录下。 

2.运行JAR打包命令:jar cvf jspSmartUpload.jar com 

(也得打开资源管理器,切换来当前目录,用WinZip将com目录下之兼具文件裁减成jspSmartUpload.zip,然后以jspSmartUpload.zip换名为jspSmartUpload.jar文件即可。) 

3.将jspSmartUpload.jar拷贝到Tomcat的shared/lib目录下。 

仲、相关类表达篇 

㈠ File类 

  那个近乎包装了一个达标污染文书之富有信息。通过其,可以收获上传文件之公文称、文件大小、扩大名、文件数量等信息。 

  File类重要提供以下措施: 

1、saveAs成效:将文件换名另存。 

原型: 

public void saveAs(java.lang.String destFilePathName) 

或 

public void saveAs(java.lang.String destFilePathName, int
optionSaveAs) 

里,destFilePathName是另存的公文称,optionSaveAs是另存的取舍项,该采纳有三单价值,分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系统的根目录为文件到底目录外存文件,SAVEAS_VIRTUAL声明以Web应用程序的绝望目录为文件到底目录外存文件,SAVEAS_AUTO则意味着给组件决定,当Web应用程序的根目录在另存文件的目时,它会择SAVEAS_VIRTUAL,否则会拔取SAVEAS_PHYSICAL。 

例如,saveAs(“/upload/sample.zip”,SAVEAS_PHYSICAL)执行后若Web服务器安装于C盘,则另存的文本称实际是c:\upload\sample.zip。而saveAs(“/upload/sample.zip”,SAVEAS_VIRTUAL)执行后若Web应用程序的清目录是webapps/jspsmartupload,则另存的文本称实际是webapps/jspsmartupload/upload/sample.zip。saveAs(“/upload/sample.zip”,SAVEAS_AUTO)执行时若Web应用程序根目录下有upload目录,则该效同saveAs(“/upload/sample.zip”,SAVEAS_VIRTUAL),否则同saveAs(“/upload/sample.zip”,SAVEAS_PHYSICAL)。 

指出:对于Web程序的开销以来,最好用SAVEAS_VIRTUAL,以便移植。 

2、isMissing 

企图:这些情势用于判断用户是否接纳了文本,也尽管对应之发明单项是否出价。采取了文件时,它回到false。未选取文件时,它回到true。 

原型:public boolean isMissing() 

3、getFieldName 

打算:取HTML表单中对许让之达成污染文书的发明单项的名。 

原型:public String getFieldName() 

4、getFileName 

图:取文件称(不含有目录信息) 

原型:public String getFileName() 

5、getFilePathName 

打算:取文件全名(带目录) 

原型:public String getFilePathName 

6、getFileExt 

功效:取文件扩充名(后缀) 

原型:public String getFileExt() 

7、getSize 

图:取文件长度(以字节计) 

原型:public int getSize() 

8、getBinaryData 

用意:取文件数量中指定位移处的一个字节,用于检测文件等拍卖。 

原型:public byte getBinaryData(int
index)。其中,index表示位移,其值在0到getSize()-1内。 

㈡ Files类 

  这些近乎表示有上传文件之集结,通过她好落上传文件的数目、大小相当于新闻。有以下模式: 

1、getCount 

企图:取得上传文件之多少。 

原型:public int getCount() 

2、getFile 

用意:取得指定位移处的文件对象File(这是com.jspsmart.upload.File,不是java.io.File,注意别)。 

原型:public File getFile(int
index)。其中,index为指定位移,其值在0到getCount()-1次。 

3、getSize 

意:取得上传文件之终究长度,可用于限制三遍性上传的数据量大小。 

原型:public long getSize() 

4、getCollection 

打算:将具有上传文件对象为Collection的格局重返,以便此外应用程序引用,浏览上传文件信息。 

原型:public Collection getCollection() 

5、getEnumeration 

企图:将持有上传文件对象为Enumeration(枚举)的形式重临,以便其它应用程序浏览上传文件信息。 

原型:public Enumeration getEnumeration() 

㈢ Request类 

  这一个近乎的意义雷同于JSP内置的目标request。只所以提供这类似,是以于文本上传表单,通过request对象不可能赢得表单项的价,必须通过jspSmartUpload组件提供的Request对象来博取。该类提供如下方法: 

1、getParameter 

打算:获取指定参数的值。当参数不设有时时,再次回到值为null。 

原型:public String getParameter(String
name)。其中,name为参数的名。 

2、getParameterValues 

功能:当一个参数可以有差不多只价时,用者形式来抱其价值。它回到的是一个字符串数组。当参数不存在时时,重临值为null。 

原型:public String[] getParameterValues(String
name)。其中,name为参数的讳。 

3、getParameterNames 

企图:取得Request对象被装有参数的讳,用于遍历所有参数。它回到的是一个朵举型的目标。 

原型:public Enumeration getParameterNames() 

㈣ SmartUpload类夫仿佛就上传下载工作。 

A.上污染与下载并用底办法: 

单纯出一个:initialize。 

意:执行上传下载的起头化工作,必须首先单执行。 

原型:有多独,首要拔取下是: 

public final void initialize(javax.servlet.jsp.PageContext
pageContext) 

其中,pageContext为JSP页面内置对象(页面及下文)。 

B.上传文书使用的不二法门: 

1、upload 

用意:上污染文书数量。对于上传操作,第一步执行initialize方法,第二步就是使执行是措施。

原型:public void upload() 

2、save 

打算:将全达到传文书保留到指定目录下,并返保存的文件个数。 

原型:public int save(String destPathName) 

和public int save(String destPathName,int option) 

里面,destPathName为文件保留目录,option为保存选项,它有两只价,分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同File类的saveAs方法的挑项之值类似)SAVE_PHYSICAL指示组件将文件保留到以操作系统根目录为文件根本目录的目下,SAVE_VIRTUAL提示组件将文件保留至以Web应用程序根目录也文件根本目录的目下,而SAVE_AUTO则代表出于组件自动选拔。 

横流:save(destPathName)功能一样于save(destPathName,SAVE_AUTO)。 

3、getSize 

意:取上传文书数量的路程度 

原型:public int getSize() 

4、getFiles 

用意:取全方位达成传文书,以Files对象格局再次回到,能够采纳Files类的操作方法来赢得上传文件的数量等音信。 

原型:public Files getFiles() 

5、getRequest 

打算:取得Request对象,以便因此对象得到上传表单参数的值。 

原型:public Request getRequest() 

6、setAllowedFilesList 

意:设定允许上传带有指定扩充名的文本,当及污染过程中生文件称无允许时,组件将遗弃来相当。 

原型:public void setAllowedFilesList(String allowedFilesList) 

里,allowedFilesList为允许上传的文书扩大名列表,各样扩张名以内以逗号分隔。假如想同意上传这一个尚未扩充名的文件,可以用单薄单逗号表示。例如:setAllowedFilesList(“doc,txt,,”)将允许上传带doc和txt扩充名的公文以及无扩张名的文件。 

7、setDeniedFilesList 

意:用于限制上传那一个富含指定扩大名的文件。若发生文件扩大名让界定,则达传时组件将放弃来相当。 

原型:public void setDeniedFilesList(String deniedFilesList) 

里面,deniedFilesList为禁止上传的文本扩充名列表,各种扩张名之间为逗号分隔。假若想禁止上传那多少个尚未扩充名的文书,可以据此有限独逗号来表示。例如:setDeniedFilesList(“exe,bat,,”)将禁上传带exe和bat扩充名的文件和没有扩充名的文书。 

8、setMaxFileSize 

用意:设定每个文件允许上传的最充足长。 

原型:public void setMaxFileSize(long maxFileSize) 

里,maxFileSize为乎每个文件允许上传的尽老尺寸,当文件超出这多少个尺寸时,将不给上传。 

9、setTotalMaxFileSize 

功能:设定允许上传的公文之究竟长度,用于限制一回性上传的数据量大小。 

原型:public void setTotalMaxFileSize(long totalMaxFileSize) 

里面,total马克斯FileSize为允许上传的文本之毕竟长度。 

C.下充斥文件常用之办法 

MySQL,1、setContentDisposition 

企图:将数据多到MIME文件头的CONTENT-DISPOSITION域。jspSmartUpload组件会于返下载的音讯通常自动填写MIME文件头的CONTENT-DISPOSITION域,倘诺用户用添加额外音讯,请用那些方法。 

原型:public void setContentDisposition(String contentDisposition) 

中,contentDisposition为使添加的数。假设contentDisposition为null,则组件将自动抬高”attachment;”,以声明将下载的公文作为附件,结果是IE浏览器将谋面唤起另存文件,而未是活动打开这些文件(IE浏览器一般按照下载的公文扩大名决定进行什么操作,扩大名吧doc的以因而Word次打开,扩大名也pdf的将据此acrobat程序打开,等等)。 

2、downloadFile 

意:下载文件。 

原型:共有以下三单原型可用,第一只极端常用,后少独用于特殊意况下的公文下充斥(如反内容类型,更改另存的文件称)。 

① public void downloadFile(String sourceFilePathName) 

其中,sourceFilePathName为要下载的公文称(带目录的文件全名) 

② public void downloadFile(String sourceFilePathName,String
contentType) 

里面,sourceFilePathName为而下载的公文称(带目录的文件全名),contentType为情类型(MIME格式的文件类型信息,可于浏览器识别)。 

③ public void downloadFile(String sourceFilePathName,String
contentType,String destFileName) 

其中,sourceFilePathName为而下载的文书称(带目录的文本全名),contentType为情类型(MIME格式的文件类型新闻,可吃浏览器识别),destFileName为下载后默认的别样存文件称。 

老三、文件上传篇 

㈠ 表单要求 

对上传文件之FORM表单,有少数只要求: 

1、METHOD应用POST,即METHOD=”POST”。 

2、增添性能:ENCTYPE=”multipart/form-data” 

上面是一个用来上传文件的FORM表单的例证: 

<ccid_nobr>

<ccid_code><FORM METHOD="POST" ENCTYPE="multipart/form-data" 
ACTION="/jspSmartUpload/upload.jsp">
<INPUT TYPE="FILE" NAME="MYFILE">
<INPUT TYPE="SUBMIT">
</FORM>

㈡ 上传的事例 

1、上传页面upload.html 

本页面提供表单,让用户挑选而达成污染之公文,点击”上传”按钮执行上传操作。 

页面源码如下: 

<ccid_nobr>

<ccid_code><!--
    文件名:upload.html
    作  者:纵横软件制作中心雨亦奇(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>
<p>&nbsp;</p>
<p align="center">上传文件选择</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>

2、上传处理页面do_upload.jsp 

本页面执行文书上传操作。页面源码中详细介绍了上传方法的用法,在这些不赘述了。 

页面源码如下: 

<ccid_nobr>

<ccid_code><%--
    文件名:do_upload.jsp
    作  者:纵横软件制作中心雨亦奇(zhsoft88@sohu.com)
--%>
<%@ page contentType="text/html; charset=gb2312" language="java" 
import="java.util.*,com.jspsmart.upload.*" errorPage="" %>
<html>
<head>
<title>文件上传处理页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%
    // 新建一个SmartUpload对象
    SmartUpload su = new SmartUpload();
    // 上传初始化
    su.initialize(pageContext);
    // 设定上传限制
    // 1.限制每个上传文件的最大长度。
    // su.setMaxFileSize(10000);
    // 2.限制总上传数据的长度。
    // su.setTotalMaxFileSize(20000);
    // 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
    // su.setAllowedFilesList("doc,txt");
    // 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
    jsp,htm,html扩展名的文件和没有扩展名的文件。
    // su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
    // 上传文件
    su.upload();
    // 将上传文件全部保存到指定目录
    int count = su.save("/upload");
    out.PRintln(count+"个文件上传成功!<br>");

    // 利用Request对象获取参数之值
    out.println("TEST="+su.getRequest().getParameter("TEST")
    +"<BR><BR>");

    // 逐一提取上传文件信息,同时可保存文件。
    for (int i=0;i<su.getFiles().getCount();i++)
    {
        com.jspsmart.upload.File file = su.getFiles().getFile(i);

        // 若文件不存在则继续
        if (file.isMissing()) continue;

        // 显示当前文件信息
        out.println("<TABLE BORDER=1>");
        out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
        + file.getFieldName() + "</TD></TR>");
        out.println("<TR><TD>文件长度(Size)</TD><TD>" + 
        file.getSize() + "</TD></TR>");
        out.println("<TR><TD>文件名(FileName)</TD><TD>" 
        + file.getFileName() + "</TD></TR>");
        out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>" 
        + file.getFileExt() + "</TD></TR>");
        out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
        + file.getFilePathName() + "</TD></TR>");
        out.println("</TABLE><BR>");

        // 将文件另存
        // file.saveAs("/upload/" + myFile.getFileName());
        // 另存到以WEB应用程序的根目录为文件根目录的目录下
        // file.saveAs("/upload/" + myFile.getFileName(), 
        su.SAVE_VIRTUAL);
        // 另存到操作系统的根目录为文件根目录的目录下
        // file.saveAs("c:\\temp\\" + myFile.getFileName(), 
        su.SAVE_PHYSICAL);

    }
%>
</body>
</html>

季、文件下充斥篇 

1、下充斥链接页面download.html 

页面源码如下: 

<ccid_nobr>

<ccid_code><!--
        文件名:download.html
    作  者:纵横软件制作中心雨亦奇(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>

2、下载处理页面do_download.jsp do_download.jsp显示了怎样利用jspSmartUpload组件来下充斥文件,从下的源码中就可以看到,下载何其简单。 

源码如下: 

<ccid_nobr>

<ccid_code><%@ page contentType="text/html;charset=gb2312" 
import="com.jspsmart.upload.*" %><%
        // 新建一个SmartUpload对象
    SmartUpload su = new SmartUpload();
        // 初始化
    su.initialize(pageContext);
        // 设定contentDisposition为null以禁止浏览器自动打开文件,
        //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
        //doc时,浏览器将自动用word打开它。扩展名为pdf时,
        //浏览器将用acrobat打开。
    su.setContentDisposition(null);
        // 下载文件
    su.downloadFile("/upload/如何赚取我的第一桶金.doc");
%>

<ccid_code>注意,执行下载的页面,在Java脚本范围外(即<% …
%>之外),不要含HTML代码、空格、回车或换行等字符,有的言语将非可以对下载。不信的话,可以当上述源码中%><%期间在一个换行符,再下充斥一下,保证出错。因为它影响了回到给浏览器的数据流,导致解析出错。 

3、如何下载粤语文件 

jspSmartUpload虽然会下载文件,但针对闽南语襄助不足。若下载的文书称被来汉字,则浏览器在提醒另存的公文名时,突显的凡如出一辙堆积乱码,很扫人兴。下面的例子就是是这么。(那多少个题目吧是群产充斥组件所是的题材,很少有人解决,搜索未顶相关资料,可叹!) 

以为jspSmartUpload组件增加下载普通话文件的帮忙,我对拖欠零件举行了研究,发现对回给浏览器的此外存文件称展开UTF-8编码后,浏览器就能是显示粤语名字了。这是一个让人安心乐意的觉察。于是我本着jspSmartUpload组件的SmartUpload类做了提拔处理,增加了toUtf8String这一个情势,改动部分源码如下: 

<ccid_nobr>

<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编码的串,以便下载时能正确显示另存的文件名.
     * 纵横软件制作中心雨亦奇2003.08.01
     * @param s 原文件名
     * @return 重新编码后的文件名
     */
    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();
    }

留神源码中粗体部分,原jspSmartUpload组件对回到的公文未作其他处理,现在进行了编码的转换工作,将文件称转移为UTF-8形式的编码模式。UTF-8编码对英文未发任何处理,对闽南语则需要换为%XX的款型。toUtf8String方法中,间接接纳Java语言提供的编码转换方法拿到汉字字符的UTF-8编码,之后用该转移为%XX的形式。 

以源码编译后从包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目录下(可也具WEB应用程序所共享),然后还开汤姆(Tom)cat服务器就可健康下充斥含有闽南语名字的文件了。另,toUtf8String方法呢但是用以转移含有中文的一级链接,以保链接的卓有功用,因为有WEB服务器无补助中文链接。 

总:jspSmartUpload组件是使JSP举办B/S程序支付过程被时下的上传下载组件,它以简便,方便。现在自以为这增长了下载中文名字的文件的匡助,真个是一旦虎添翼,必将得到还多开发者的垂青。 

网站地图xml地图