知识大全 通用上载组件的原理及实现
Posted 文件
篇首语:撒网要撒迎头网,开船要开顶风船。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通用上载组件的原理及实现相关的知识,希望对你有一定的参考价值。
JSP/SERVLET上载的难点 支持任意格式 任意数量的文件上载 上载控制的实现 表单信息的取得 即插即用 的应用方法 我个人认为 制约通用 上载组件的实现主要是这四个难点 JSP/SERVLET上传的原理 JSP/SERVLET文件 上载是通过ServletInputStream类来实现的 ServletInputStream类是java io InputStream的一个扩展抽象类 实质上也是一个输入流 通过ReadLine方法从Request端一行一行读取 可见 JSP/SERVLET上载根本上是用流来实现的 理解了这个就不难理解整个 上载的原理 ServletInputStream实现文件 上载必须采用HTTP POST或者HTTP PUT协议 HTTP GET协议只能传递很少的数据 是不能实现文件上载的 下面我们来看一下上传的数据流的结构 首先要在BROWSER端给出一个请求 我们的请求如下(文件名为test jsp): <%@ page contentType= text/; charset=GBK %> <> <head> <title>文件上载</title> </head> <body> <form action= test jsp enctype= MULTIPART/FORM DATA method=post> 说明一: <input type= text name= explain /> <br /> 说明二: <input type= text name= explain /> <br /> 请选择上载文件 <input type= file name= file /> <br /> 请选择上载文件 <input type= file name= file /> <br /> 说明三: <input type= text name= explain /> <br /> <input type= submit value= 上 载 /> </form> </body> </> 显示如下 说明一 说明二 请选择上载文件一 请选择上载文件二 说明三 在上载请求页中混杂了表单的三个输入框 及两个上载文件 当然输入框可以更多 更杂 可以有选择框 单选及多选按钮 待上传的文件也可以有三个 四个或所需要的更多 action= test jsp 表示表单将提交到 test jsp 另外注意表单属性中必须要有这句 enctype= MULTIPART/FORM DATA enctype指定 Form 输入资料的编码方式 method 属性必须为 post 这样表单才能提交大量数据 也表示本表单的数据传递将用流操作 表示数据将通过地址栏进行传递 虽然方便快捷 但只适合很少的数据量 响应端 test jsp 页面如下 <%@ page contentType= text/; charset=GBK %> <> <head> <title>文件上载</title> </head> <body> <jsp:useBean id= upBean scope= page class= upload UpBean /> <% upBean doUpload(request); out println( 上载已完成 请查看输出文件 ); %> </body> </> test jsp收到请求后 调用一个java bean执行doUpload(request)操作 本操作将完成流(unicode格式)的接收并不做任何处理地将流顺序写入一个文本文件里 读写操作中用了一个缓冲区byte[] readByte 用了一个ServletInputStream 的一个方法readLine(byte[] b int off int len)方法读取流 请大家注意 ServletInputStream 流的read Line方法是一次读入指定大小的行 java bean (UpBean java)代码如下 [code]package upload; import java io *; import javax servlet *; import javax servlet HttpServletRequest; import javax servlet ServletInputStream; public class UpBean public void doUpload(HttpServletRequest req) throws ServletException IOExcept ion //首先定义一个文本文件 File file = new File( out txt ); //readCount 记录从输入流中实际读取的字符数 int readCount; //输入流缓冲区 byte[] readByte = new byte[ ]; //初始化输入流 ServletInputStream servletInputStream = req getInputStream(); //初始化一个输出流(到文件) FileOutputStream fileOutputStream = new FileOutputStream(file); //循环从读取输入流中读取字节 readCount = servletInputStream readLine(readByte readByte length); while(readCount != ) fileOutputStream write(readByte readCount); readCount = servletInputStream readLine(readByte ); //关闭文件流 fileOutputStream flush(); [/code] 为了便于我们阅读流 上载的两个文件为两个简单的文本文件(有格式的文件 不便于直接分析) one txt及o txt 文件内容如下 实验时请建立对应文本文件 内容请直接copy以下所示 one txt: one one one one one one o txt o o o o o o 都准备好以后 我们就可以运行了 运行时请注意 文本部分及文件部分最好不要出现汉字 或其他双字符集字符 尽量采用英文 因为接收是采用的Unicode字符集 我们未对输入做任何处理 我们在三个输入框输入的字符为 说明一 explain 说明二 explain 说明三 explain out txt接收到如下字符 d a e Content Disposition: form data; name= explain explain d a e Content Disposition: form data; name= explain explain d a e Content Disposition: form data; name= file ; filename= C:\\test\\one txt Content Type: text/plain one one one one one one d a e Content Disposition: form data; name= file ; filename= C:\\test\\o txt Content Type: text/plain o o o o o o d a e Content Disposition: form data; name= explain explain d a e 可以很明显的看到 out txt被 d a e 分成了五 节 即表单的每个输入部分都对应一节 结尾部分是 d a e 刚好比开始的一段字符在最后多出两个 每节的第一行是输入内容的说明 Content Disposition: form data name= explain 表示 上载请求项的name 文本输入部分仅这两个说明 如果输入的是文件还用两项说明 filename= C:\\test\\one txt 表示输入源 基于ms windows的ie上载带有完整的路径 netscape及其他浏览器可能只有一个文件名 还有一项是关于输入格式的 Content Type:text/plain 表示输入格式是文本类型 如果我们上载的是bmp文件则为 Content Type: image/bmp word文件为 application/msword 说明的下面紧接着是一个空行 然后下面才是我们所需的内容 仔细分析未加修改的输入流格式 有助于我们实现文件与输入文本的准确分离 通过以上的分析可以看出 准确分离上载的文件及文本信息需要以下要素 数据段分割符 结束符(比分割符多出两个 ) 输入文本及上载的文件区分标志(文本为 name= 文件为 filename= ) 编码格式 可以通过HttpServletRequest 类getCharacterEncoding() 方法取得 表单文本部分名称及内容 名称为 name= 后面的字符 内容为该段第三行及以后的内容 文件名称及内容 名称为 filename= 后面的字符 内容为该段第三行及以后的内容 下面我们将讨论输入流的分离 程序实现分析 我们首先画出程序实现的主体结构图 请注意判断文件标志(indexOf( filename= )> ) 与判断文本标志(indexOf( name= )> )的顺序 当(indexOf( filename= )> )成立时 (indexOf( name= )> )一定也是成立的 所以判断文件要在判断文本前 分离文件及输入文本 为完整保存上载的文件信息及输入的文本信息 本程序建立了两个类 public class FileInfo public class InputField 及两个线性表private ArrayList upFilesList private ArrayList inputFieldList 用于动态增加文件信息及文本信息 定义如下 FileInfo java(记录上载文件信息) package upload; public class FileInfo private String fileName; private boolean validFlag; private String filePath; private long fileSize; //设置文件信息 //上载文件是否有效标志 public void setValidFlag(boolean validFlag) this validFlag = validFlag; //文件名 public void setFileName(String filename) this fileName = filename; //存贮路径 cha138/Article/program/Java/JSP/201311/19662相关参考
一、MBR工艺的组成 膜-生物反应器主要由膜分离组件及生物反应器两部分组成。通常提到的膜-生物反应器实际上是三类反应器的总称:①曝气膜-生物反应器(Aer
一、MBR工艺的组成 膜-生物反应器主要由膜分离组件及生物反应器两部分组成。通常提到的膜-生物反应器实际上是三类反应器的总称:①曝气膜-生物反应器(Aer
使用JSP/Servlet上载文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz
一、化粪池的基本原理与存在的问题化粪池是在无城市污水处理厂的情况下,建筑物的附设局部污水处理设施,属最初级污水处理阶段,可去除50%的悬浮杂质(粪便、较大病原虫等),并使积泥在厌氧条件下分解为稳定状态
一、化粪池的基本原理与存在的问题化粪池是在无城市污水处理厂的情况下,建筑物的附设局部污水处理设施,属最初级污水处理阶段,可去除50%的悬浮杂质(粪便、较大病原虫等),并使积泥在厌氧条件下分解为稳定状态
一、化粪池的基本原理与存在的问题化粪池是在无城市污水处理厂的情况下,建筑物的附设局部污水处理设施,属最初级污水处理阶段,可去除50%的悬浮杂质(粪便、较大病原虫等),并使积泥在厌氧条件下分解为稳定状态
以下叉车作业哪些是违反安全作业要求的?(1)用货叉推顶货物移位;(2)货叉上载人;(3)进入易燃易爆仓库内作业。
以下叉车作业哪些是违反安全作业要求的?(1)用货叉推顶货物移位;(2)货叉上载人;(3)进入易燃易爆仓库内作业。A.(1)和(2)B.(2)和(3)C.(1)、(2)、(3)【参考答案】C[拓展知识]
以下叉车作业哪些是违反安全作业要求的?(1)用货叉推顶货物移位;(2)货叉上载人;(3)进入易燃易爆仓库内作业。
以下叉车作业哪些是违反安全作业要求的?(1)用货叉推顶货物移位;(2)货叉上载人;(3)进入易燃易爆仓库内作业。A.(1)和(2)B.(2)和(3)C.(1)、(2)、(3)【参考答案】C[拓展知识]
.NETFramework不同组件区别及安装 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
ASP无组件分页实现思路及代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!后台代码 &