近段时间,对apache commons fileupload的源码做了深入的了解,在此把一些见解与大家分享。
今天就简介一下commons fileupload的Portlet部分。
首先我们来看看Portlet是什么?
Portlet是基于Java的Web组件,由Portlet容器管理,并由容器处理请求,生产动态内容。作为利用Servlets进行Web应用编程的下一步,Portlets实现了Web应用的模块化和用户中心化。
Portlet部分是为portlet容器环境实现文件上传功能的部分,其由request解析单一部分组成。
但我们应该先来了解一下portlet所依赖的以下commons-fileupload或commons-io类:
org.apache.commons.fileupload.FileUploadBase
该类实现了一些基本的FileUpload功能,但其自身不处理解析部分。其主要工作就是从http中解析出各个属性然后根据属性来调用和传递具体的FileItemFactory类对象来实现解析文件上传的功能。
org.apache.commons.fileupload.FileUpload
该类代理了FileItemFactory,并通过继承FileUploadBase来实现各种通用解析功能。其内部只有FileItemFactory对象的getter和setter方法,以方便其子类使用。
org.apache.commons.fileupload.UploadContext
该接口解决了RequestContext中getContentLength不准确或丢失的问题。使用该接口可以实现向后兼容。但在fileupload2.x中将会被新的方法代替。
org.apache.commons.fileupload.FileItemFactory
该接口提供创建FileItem的方法。
org.apache.commons.fileupload.FileItemIterator
该接口是一个文件对象的迭代器,可迭代返回FileItemStream。
org.apache.commons.fileupload.FileUploadException
当解析数据包出现错误时会抛出此异常。
request解析部分:
org.apache.commons.fileupload.portlet.PortletRequestContext
该类实现了UploadContext及RequestContext的所有方法,其针对portlet所使用的ActionRequest进行request的处理,主要任务是对request信息进行大类的划分获取。
org.apache.commons.fileupload.portlet.PortletFileUpload
该类通过PortletRequestContext对request信息进行大类的划分提取然后调用其祖父类FileUploadBase的同名方法进行处理,以实现具体针对portlet容器的文件上传功能。
ONE FOR IT是一个呆萌CTO打理的资讯读物,每天只为你准备一篇IT行业新鲜资讯。互联网的前沿,一篇就够了。(ID:OFI)