知识大全 用javaZoom的uploadBean扩展request的功能

Posted 文件

篇首语:书籍是朋友,虽然没有热情,但是非常忠实。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用javaZoom的uploadBean扩展request的功能相关的知识,希望对你有一定的参考价值。

用javaZoom的uploadBean扩展request的功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在Servlet中 upload上传是我们常用的操作之一 然而在javax servlet包中 javax servlet HttpServletRequest对于form中的enctype   = multipart/form data 的内容的处理支持却极有限 我们不得不手工编写读取和分离Stream中的内容的代码 这使我们对封装完好的MultipartFormDataRequest提供支持的包充满了期待 其实常用的javaZoom的uploadBean中 就已经提供了这个良好的工具 另外 uploadBean还包括了上传后的存储机制 如保存到数据库 文件 zip文件等 如果你不需要做定制的话 尽管可以使用他们 当然定制上传后的处理很简单也很实用   javaZoom的包中共包含了 个class文件:  UploadBean class    UploadParameters class    UploadListener class    UploadFile class    UploadException class    Archiver class    MultipartFormDataRequest class    其中 我们最感兴趣的是MultipartFormDataRequest class 正如其名 它使我们可以象处理一般的form那样处理enctype= multipart/form data 的form的内容     在MutipartFormDataRequest中 共有 种public方法     getParameterNames(name:String):Enumeration    getParameterValue(name:String):String    getParameterValues(name:String):String[]    getFiles():Hashtable    isMultipartFormData(req:HttpServletRequest):boolean    和 种public构造函数     MultipartFormDataRequest(req:HttpServletRequest maxcontentlength:int)    MultipartFormDataRequest(req:HttpServletRequest)    所有的对Mutipart的内容的分析 在构造函数中由 oreilly servlet multipart包中的分析器完成 我们无需关心原先最头疼的对Stream内容的分析的工作 只需要象下面的代码那样     if (MultipartFormDataRequest isMultipartFormData(request))//如果是multipart类型的request    MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);        就得到了MutipartFormDataRequest的实例     如果想得到上传的内容     Hashtable files = mrequest getFiles();//得到所有的上传的文件    if(files!=null && !files isEmpty())    UploadFile file=(UploadFile)files get(name);// name:String 文件输入框的名称    // file:UploadFile 文件        在这里 UploadFile file中包含了我们感兴趣的上传的文件的所有的信息:    getData():byte[] 文件的内容     getFileSize():long 文件的长度    getContentType():String 文件的编码    getFileName():String 文件的名称      这些信息足够我们进行一般所想要的操作了     正如uploadBean的名称所言 uploadBean提供对某些常用上传操作的封装     在uploadBean中 setStoreModel(storeModel:int)提供了对上传文件以下几种形式的保存     保存在内存中     保存在指定目录中     保存在数据库中     保存在zip文件中     保存在Tagzip文件中     序列化形式保存     Xml形式保存    不过以上每一种形式的保存 都需要符合uploadBean中所指的一些规则 如保存在数据库中 uploadBean是把数据库纯粹作为一种存储手段 关键字都是用TimeStamp生成的 保存在目录中 不能指定 层以上目录     如我们需要把上传文件用自己的方式保存 可以采用重新编写保存或者直接重载uploadBean实现     从byte[]data=file getData();中 我们得到文件的字节数组 很容易通过构造新的流 进行文件的输入输出 存储到数据库 保存在各种形式的载体中       实例 上传文件并且存放到数据库中    数据库表格 TestTable    lsh char( ) pk     nr clob( )      //数据库基本操作    package upload example ;    import java sql *;    import javax sq *;    import javax naming *;    public class DbOps()    private DataSource ds;    private Connection conn;    private String env= java:p/env/jdbc/TestDB ;  public String getEnv()return env;  public void setEnv(String env)this env=env;  public DataSource getDataSource()//取得数据源(连结池)  try    Context ictx=new InitalContext();    ds=(DataSource)ictx lookup(env);     catch(Exception ignore)    //some debug codes      return ds;    public Connection getConnection()//取得数据库连结  if(ds==null)ds=getDataSource();    try     if(conn==null)conn=ds getConnection();    catch(Exception ignore)    //some debug codes      return conn;      //存储  package upload example ;    import java sql *;    public class DBStore()     public static String ISFILEEXIST= select count(*) from TestTable where lsh=? ;    public static String INSERTFILE= insert into TestTable (lsh)values(?) ;    public static String UPDATEFILE= update TestTable set nr=? where lsh=? ;    Connection conn;    DbOps dbops;    protected boolean isFileExist(String lsh)throws SQLException    PreparedStatement pst=conn prepareStatement(ISFILEEXIST);    pst setString( lsh);    ResultSet rs=pst executeQuery();    int count;    for(count= ;rs next();count=rs getInt( ));    pst close();    if(count<=0)return false;    else return true;        protected void insertFile(String lsh)throws SQLException    PreparedStatement pst=conn.prepareStatement(INSERTFILE);    pst.setString(1,lsh);    pst.executeUpdate();    pst.close();        protected void updateFile(String lsh,byte[]data)throws SQLException    PreparedStatement pst=conn.prepareStatement(UPDATEFILE);    pst.setBytes(1,data);    pst.setString(2,lsh);    pst.executeUpdate();    pst.close();        public void saveFile(String lsh,byte[]data)throws SQLException    if(lsh==null || data==null ||lsh.trim().length()==0)return;      if(dbops==null)dbops=new DbOps();     if(conn==null)conn=dbops.getConnection();      if(!isFileExist(lsh))    insertFile(lsh);        updateFile(lsh,data);      conn.close();    conn=null;            //servlet 片断(servlet 中应包含javazoom.upload.*;java.util.*;)    DBStore dbs=new DBStore();    if (MultipartFormDataRequest.isMultipartFormData(request))        MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);    if(mrequest.getParameter("submit")!=null)    String lsh=mrequest.getParameter("lsh");    Hashtable files = mrequest.getFiles();    UploadFile file = files.get("ufile");    byte[]data=file.getData();    try    dbs.saveFile(lsh,data);    catch(Exception e)    //debugCodes           //Submit 片断  
           
  实际运行以上代码时,注意DbOps的env参数需要和实际的服务器配置的连结池参数一致,并且需要有upload.jar 和 cos.jar这两个包。tW.WIngWIT.cOm如果是在WebShpere 4上,请把他们拷贝到项目的webApplication\\WEB-INF\\lib下。如果是Resin上,把他们拷贝到项目的WEB-INF\\lib下。      cha138/Article/program/Java/hx/201311/26648

相关参考