知识大全 用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相关参考
针对Re200c/Re100c电气化接触网设备的特点,电分相的结构形式是如何构成?
电分相锚段关节采用两个三跨绝缘锚段关节,和一个带中性段的四跨锚段关节组成。中性区的距离应保持为35m,两侧过渡区的距离各应保持25m。
用C#或JavaScript扩展XSLT 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天在u
针对Re200c/Re100c电气化接触网设备的特点,中心锚结的安装有何规定?
中心锚结的位置要使两边接触悬挂的补偿条件基本相同。接触线和承力索的中心锚结辅助绳均不得有断股和接头,两边的长度和张力力求相等,不得松弛。接触线中心锚结所在的跨距内接触线不得有接头和补强,接触线中心
针对Re200c/Re100c电气化接触网设备的特点,中心锚结的安装有何规定?
中心锚结的位置要使两边接触悬挂的补偿条件基本相同。接触线和承力索的中心锚结辅助绳均不得有断股和接头,两边的长度和张力力求相等,不得松弛。接触线中心锚结所在的跨距内接触线不得有接头和补强,接触线中心
针对Re200c/Re100c电气化接触网设备的特点,腕臂定位时防风拉线的安装有何规定?
腕臂支持装置的定位,线路区段R≥1200m时,定位管与定位器之间采用φ3.0mm钢线制成的防风拉线连接。防风支持线夹的轴线与定位管成45°,防风拉线与定位点两投影之间的水平距离为500mm。
针对Re200c/Re100c电气化接触网设备的特点,腕臂定位时防风拉线的安装有何规定?
腕臂支持装置的定位,线路区段R≥1200m时,定位管与定位器之间采用φ3.0mm钢线制成的防风拉线连接。防风支持线夹的轴线与定位管成45°,防风拉线与定位点两投影之间的水平距离为500mm。
PLC是用系统程序实现定时器的定时功能的。在执行定时器指令时,不是等到定时时间到后再往下执行,因此在循环指令的循环体中加入定时器指令,不能扩展定时器的定时时间。
PLC是用系统程序实现定时器的定时功能的。在执行定时器指令时,不是等到定时时间到后再往下执行,因此在循环指令的循环体中加入定时器指令,不能扩展定时器的定时时间。
用JAI扩展Java的图像处理能力 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz
针对Re200c/Re100c电气化接触网设备的特点,标准线岔交叉吊弦的技术标准有何规定?
两交叉吊弦的技术标准: 1)正线接触线的交叉吊弦,接触线上吊弦固定点的投影与侧线线路中心间距为550~600mm。 2)侧线接触线的交叉吊弦,接触线上吊弦固定点的投影与正线线路中心间距为550