动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.J2EE探索者:用JMS进行企业消息传.
.垃圾收集器与Java编程.
.Java IT技术认证为什么火?.
.Java桌面端程序开发.
.教你在Jave中实现3d编程简介.
.Java多语言编码问题解析(2).
.在Applet中应用JDBC访问数据库.
.程序员的.NET时代(2).
.戏说java设计模式中的命令模式.
.Java 2 引用类使用指南.
.在网页上发布统计曲线.
.JAVA正则表达式4种常用功能.
.实用教程:使用Hibernate处理数据.
.Java语言深入:对java.lang的研究.
.用JBuilder9 开发Struts实例.
.用Java访问SQL Server 2000数据库.
.最简单的编写基于线程的代码的方.
.用Java实现网络语音信号传送.
.struts+hibernate例子(原创).
.struts标签复选框的使用.

用javaZoom的uploadBean扩展request的功能

发表日期:2008-1-5 |



  在Servlet中,upload上传是我们常用的操作之一。然而在Javax.servlet包中,javax.servlet.http.HttpServletRequest对于form中的enctype
  ="multipart/form-data"的内容的处理支持却极有限,我们不得不手工编写读取和分离Stream中的内容的代码。这使我们对封装完好的MultipartFormDataRequest提供支持的包布满了期待。其实常用的javaZoom的uploadBean中,就已经提供了这个良好的工具。另外,uploadBean还包括了上传后的存储机制,如保存到数据库、文件、zip文件等。假如你不需要做定制的话,尽管可以使用他们。当然定制上传后的处理很简单也很实用。
  javaZoom的包中共包含了7个class文件:
  UploadBean.class
  
  UploadParameters.class
  
  UploadListener.class
  
  UploadFile.class
  
  UploadException.class
  
  Archiver.class
  
  MultipartFormDataRequest.class
  
  其中,我们最感爱好的是MultipartFormDataRequest.class。正如其名,它使我们可以象处理一般的form那样处理enctype="multipart/form-data"的form的内容。
  
  在MutipartFormDataRequest中,共有5种public方法:
  
  getParameterNames(name:String):Enumeration
  
  getParameterValue(name:String):String
  
  getParameterValues(name:String):String[]
  
  getFiles():Hashtable
  
  isMultipartFormData(req:HttpServletRequest):boolean
  
  和2种public构造函数:
  
  MultipartFormDataRequest(req:HttpServletRequest,maxcontentlength:int)
  
  MultipartFormDataRequest(req:HttpServletRequest)
  
  所有的对Mutipart的内容的分析,在构造函数中由 com.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)提供了对上传文件以下几种形式的保存
  
  0 保存在内存中
  
  1 保存在指定目录中
  
  2 保存在数据库中
  
  3 保存在zip文件中
  
  4 保存在Tagzip文件中
  
  5 序列化形式保存
  
  6 XML形式保存
  
  不过以上每一种形式的保存,都需要符合uploadBean中所指的一些规则。如保存在数据库中,uploadBean是把数据库纯粹作为一种存储手段,要害字都是用TimeStamp生成的;保存在目录中,不能指定3层以上目录。
  
  如我们需要把上传文件用自己的方式保存,可以采用重新编写保存或者直接重载uploadBean实现。
  
  从byte[]data=file.getData();中,我们得到文件的字节数组;很轻易通过构造新的流,进行文件的输入输出,存储到数据库,保存在各种形式的载体中。
  
  
  实例1:上传文件并且存放到数据库中
  
  数据库表格:TestTable
  
  lsh char(10) pk,
  
  nr clob(1000000)
  
  
  //数据库基本操作
  
  package upload.example1;
  
  import java.sql.*;
  
  import javax.sq1.*;
  
  import javax.naming.*;
  
  public class DbOps(){
  
  private DataSource ds;
  
  private Connection conn;
  
  private String env="java:comp/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.example1;
  
  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(1,lsh);
  
  ResultSet rs=pst.executeQuery();
  
  int count;
  
  for(count=0;rs.next();count=rs.getInt(1));
  
  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 Html 片断
  

  

  

  

  

  实际运行以上代码时,注重DbOps的env参数需要和实际的服务器配置的连结池参数一致,并且需要有upload.jar 和 cos.jar这两个包。假如是在WebShpere 4上,请把他们拷贝到项目的webApplication\WEB-INF\lib下。假如是Resin上,把他们拷贝到项目的WEB-INF\lib下。
上一篇:将 Java 应用程序迁移到 .NET(1) 人气:750
下一篇:设计Java应用程序 人气:465
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成