servlet上传,之前是用fileupload;
但struts对fileupload再封装了,就用struts的支持
http://struts.apache.org/1.1/api/index.html
这篇文章写得几好,不似网上大部分的文章~~~~
http://fafrei.spaces.live.com/blog/cns!BA7166EED9411B70!1170.entry
Struts动态多文件上传
首先保证页面中的<input type="file">标签的名称name不同,struts标签property也一样。
包含这些<input>的<form>其属性必须为 enctype="multipart/form-data" method="post"。
在formbean中,不需要定义类型为org.apache.struts.upload.FormFile的属性,也不需要List对象,建议使用DynaActionForm。
action中取出上传的文件代码:
DynaActionForm dyForm = (DynaActionForm) form;
Hashtable files = dyForm.getMultipartRequestHandler().getFileElements();
for (Enumeration e = files.keys(); e.hasMoreElements();) {
FormFile formfile = (FormFile) files.get((String) e.nextElement());
if (formfile != null && formfile.getFileSize() > 0) {
这里你可以使用formfile.getInputStream()来获取一个文件的输入流进行保存。
}
}
这样就可以动态的在页面中添加上传文件的<input type="file">,不过究竟可以允许上传多少个还没有进行测过。
其实在ActionForm对象的MultipartRequestHandler属性中存放了从页面上传服务器的原始数据,所有<form>中的上传数据都可以找到。
Hashtable getAllElements() 所有的标签
Hashtable getFileElements() 所有文件标签
Hashtable getTextElements() 所有文本标签
其返回的Hashtable可以通过get("标签name")获得对象数组
如:
页面中为<input type="text" name="name">
在formbean中没有该name属性,
在action中获得其value为
String name[] = (String[])dyForm.getMultipartRequestHandler().getTextElements().get("name");
String n = name[0];
如果页面中有两个<input type="text" name="name">标签
则name.length()为2。
String name1 = name[0];
String name2 = name[1];
许多页面动态上传数据往往可以通过这种方法来取。
另外需要注意的是页面传入的数据存HttpServletRequest parameter对象中,无论是否使用Struts,都可以通过request.getParameter("标签名")获取value。
同时此数据会在Action结束后传回ActionForward对象页面(redirect=false)
即:页面A--提交-->StrutsAction--返回-->页面B,在页面B中仍可以取得页面A的上传数据,通过${param.页面A标签名}、reuqest.getParameter或者使用Struts标签<bean:write name="formbean名" property="formbean属性名"/>
但是如果页面<form>标签属性enctype="multipart/form-data"此时表单上传的数据在HttpServletRequest parameter对象中的生存周期只到StrutsAction,无法到达页面B。
即:在StrutsAction中可以使用reuqest.getParameter("name")获取,但在页面B中无法通过${param.页面A标签名}、reuqest.getParameter获得,而Struts标签不受影响。这点需要留意。
普通的request是HttpServletRequest,如果用enctype="multipart/form-data"的话,request就变成了MultipartRequestWrapper。
下面是struts的源代码:
protected HttpServletRequest processMultipart(HttpServletRequest request) {
if (!"POST".equalsIgnoreCase(request.getMethod())) {
return (request);
}
String contentType = request.getContentType();
if ((contentType !=null) &&
contentType.startsWith("multipart/form-data")) {
return (new MultipartRequestWrapper(request));
}else{
return (request);
}
}
分享到:
相关推荐
行业报告“温故知新,从4G看5G”为我们揭示了移动通信技术从4G到5G的演进历程、技术变革及其对社会经济的深远影响。这份报告深入探讨了5G的关键特性,包括超高速率、低延迟、大规模连接以及网络切片等,这些都是5G...
通信行业:温故知新,从4G看5G-1202-中信建投-12页.pdf
"code -Goodrich--Data Structures and Algorithms in C(2nd).rar"这个压缩文件很可能是书中所有代码实例的源代码,读者可以下载后在自己的开发环境中编译和运行,这将加深对书本知识的理解,同时也是实践和调试算法...
工业机器人是现代制造业中不可或缺的重要组成部分,其发展水平是衡量一个国家制造业自动化、智能化程度的重要标志。本文档探讨了工业机器人在汽车行业中的应用,并结合美国汽车行业历史上的“2mm工程”,分析了工业...
农林牧渔行业专题研究:温故知新,复盘上两轮生猪疫情影响-0213-广发证券-17页.pdf
纺织服装行业“温故知新”系列之百丽复盘:渠道为王铸就龙头,改革初见成效 纺织服装行业是一个复杂且多样化的行业,涉及到多个领域,如女鞋、运动、服饰等。百丽作为行业龙头,凭借“多品牌+快速渠道扩张+强供应链...
- 温故知新:通过口算练习,巩固两位数的加法。 - 导学释疑:通过自学、小组讨论,解决谁得分高的问题,强调连加竖式的正确书写和理解。 - 巩固提升:设计连加运算题目,培养计算能力和团队协作能力。 2. **课题...
【国债期货1903合约回顾与总结】 本报告聚焦于国债期货1903合约的回顾与总结,旨在分析其价格变化、策略表现,并从中提取经验教训,以供投资者参考。国债期货作为金融市场的重要风险管理工具,对于固定收益市场的...
本文将深入探讨这些技术,帮助开发者温故知新,理解它们的功能、工作原理以及如何在实际项目中应用。 ### JSP(JavaServer Pages) JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...
ZYNQ7100,PL 纯逻辑,简单入门 FPGA LED 例程 工程对应的视频教程(1.1 ZYNQ学习分享-温故知新-PL-led):https://www.ixigua.com/6878303436048335371/
这篇报告主要讨论的是新股首日涨幅的预测模型和卖出策略,尤其关注科创板的背景下,投资机构如何制定有效的投资策略。报告指出,科创板的发行制度和交易规则与2009年至2012年的主板市场有诸多相似之处,当时新股的卖...
- 温故知新:通过歌曲复习和导入新课,如唱一首关于天气的歌谣。 - 新单词教学:通过各种活动教授新词汇,如做动作、展示实物、情境对话等。 - 练习巩固:安排Part A Let’s learn等活动,让学生实践新学的词汇和...
初中语文文学讨论现当代文学温故知新
leetcode下载 个人博客 日常的学习总结和案例,遇到问题时候的思考和解决方案,看到文章书籍时候的摘录。。。 articles 文章总结 css css案例 learn-koa KOA案例 learn-nodejs nodejs案例 learn-this this案例 my-...
在这个“温故知新ASP.NET 2.0(C#)”的学习资源中,我们将深入探讨ASP.NET 2.0的关键特性和C#的编程技巧。 首先,ASP.NET 2.0引入了许多改进,以提升开发者的工作效率和应用程序的性能。其中包括: 1. **控件生命...
1. **超高速度**:5G的峰值理论下载速度可达到每秒数十GB,比4G快上数十倍,这将使得瞬间下载大型文件和高清视频成为可能。 2. **超低延迟**:5G的延迟可降低至1毫秒以下,远低于4G的30-70毫秒,这对于实时交互应用...
目标检测是计算机视觉领域中的一个核心任务,它旨在在图像或视频中自动识别并定位出特定的物体。PaddleDetection是百度开发的一个高效、灵活且易于使用的深度学习目标检测框架,它基于飞桨(PaddlePaddle)深度学习...
中信建设温故知新,从 4G 看 5G.pdf