- 浏览: 502094 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (437)
- Windows设置 (2)
- oracle数据库 (39)
- bug--jsp (4)
- j2se (13)
- js (40)
- bug-tomcat不能启动程序 (1)
- Hibernate (29)
- eclipse (20)
- java (65)
- 设计模式 (6)
- bug (18)
- PL/SQL (11)
- 前台 (5)
- 杂谈 (25)
- UML (1)
- jdbc编程 (2)
- 技术调研 (1)
- 数据通信 (2)
- ios (1)
- servlet自学笔记 (10)
- tomcat (9)
- SQL学习笔记 (6)
- java工具 (1)
- 数据库设计 (4)
- javascript (10)
- jsp (11)
- struts (17)
- ajax (7)
- linix/Unix (6)
- 资源 (3)
- spring (14)
- 算法 (5)
- 计算机网络 (2)
- http (5)
- c++ (2)
- web应用 (3)
- jvm (5)
- java中的字符编码 (14)
- java代码库 (2)
- classloader (1)
- 读书笔记 (1)
- c (1)
- 开源软件 (1)
- svn (1)
- AOP (1)
- java序列化 (1)
- 多线程 (4)
- The legendary programmers (1)
- Apache http Server (1)
- html tag (3)
- struts1.X学习笔记 (5)
- buffalo (1)
- 自己收藏 (0)
- TOEFL(IBT) (1)
- 网络翻墙 (0)
- 编译原理 (1)
- 书籍推荐 (1)
- css (10)
- javaee环境搭建资料 (1)
- 开源工具 (1)
- 美国生活 (1)
- spring自学 (3)
- log4j (3)
- 算法与数据结构 (5)
- 病毒,插件处理大全 (1)
- flex (2)
- webservice (1)
- git (7)
- cs (1)
- html (4)
- javaee (6)
- 开车 (0)
- springmvc (3)
- 互联网架构 (2)
- intellij idea (18)
- maven (15)
- mongodb (2)
- nginx (1)
- react (3)
- java基础例子 (2)
- springboot (2)
- 培训 (5)
- mysql (3)
- 数据库 (3)
- 生活 (2)
- intellij (3)
- linux (2)
- os (3)
最新评论
-
潇洒天涯:
[color=blue][color=cyan] ...
oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 -
hekai1990:
受教了..
oracle中的varchar2
从《Struts1.x系列教程(8):上传单个文件》中给出的例子可以看出,在Struts1.x中上传单个文件是非常简单的,但在实际应用中,上传文件的个数一般是不确定的,如在网络硬盘中,用户可以根据自己的需要上传任意多个文件(当然,网络硬盘一次上传文件的数目一般也是有上限的,如50个,但用户可以只上传了3个文件,因此,在这种情况下,上传文件的个数也是不确定的)。如果读者用过“网易网盘”或其他类似的服务程序,它们的上传文件功能基本上都是根据用户选择的文件多少来添加要上传的文件(并不是一开始就在界面上放很多<input type=’file’>元素来让用户输入上传文件名)。为了让读者也可以使用Struts来实现这个功能,在本节将给出一个用Struts实现的类似“网易网盘”的上传任意多个文件的Web程序。在实现Web程序之前,让我们先看看图1所示的主页面。 在本程序中,用户通过在文本框中输入本地文件名或使用“浏览”按钮选择要上传的文件后,就会在界面的下方添加这个被录入的文件名,如果录入有误,或是不想上传某个文件,可以使用“删除”功能将当前文件删除。在确认正确录入所有的上传文件后,使用“上传”按钮开始上传文件。 实现这个Web程序的基本步骤和《Struts1.x系列教程(8):上传单个文件》一文中所给出的例子类似,我们可按下面五步来实现这个Web程序: 【第1步】建立上传文件的JSP页面 在uploadMoreFile.jsp文件中使用了JavaScript和DOM技术来控制新加入的上传文件以及删除不需要的上传文件。并且在加入<input type=”file”/>元素时考虑了不同的浏览器的差异(详见addUploadFile)。 在UploadMoreFile类中使用了List对象来保存不定数量的FormFile对象。读者也可以使用其他的集合类来保存这些FormFile对象。而且在UploadMoreFile类中使用了带索引的属性,详见getFile和setFile方法。在这两个方法中,第一个参数是一个int类型的变量。要注意的是,索引属性的get和set方法的第一个参数必须是int类型的变量,否则系统会不认这个索引属性。这个索引属性用于和客户端不定数量的<input type=”file” />元素相对应,每一个索引项代表一个<input type=”file” />元素上传的文件(FormFile对象)。 由于在《Struts1.x系列教程(8):上传单个文件》一文的例子中的UploadAction类中已经有了一个saveFile方法用于保存单个上传文件,因此,处理多个上传文件的Struts动作类可以从UploadAction类继承。在<samples工程目录>\src\action目录中建立一个UploadMoreAction.java文件,代码如下: 【第4步】配置struts-config.xml 在<action-mappings>元素中加入如下的子元素: 【第5步】复制gif图片 本例中使用了一个gif图,在Web根目录中建立一个images目录,并复制一个file.gif文件(30*30)到这个目录(读者可以使用自己喜欢的任何gif图片)。
图1
要想实现上述的功能,需要在JavaScript中使用DOM技术(关于JavaScript和DOM技术的相关内容已经超出本文讨论的范围,如果读者想了解JavaScript和DOM技术的细节部分,请参阅其他相关技术资料)。
在<samples工程目录>目录中建立一个uploadMoreFile.jsp文件,代码如下:
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>上传任意多个文件(总大小不能超过2M)</title>
<script language="javascript">
// 在DOM中插入一个上传文件列表项(div元素)和一个<input type="file"/>元素
function insertNextFile(obj)
{
// 获取上传控制个数
var childnum = document.getElementById("files").getElementsByTagName("input").length;
var id = childnum - 1;
var fullName = obj.value;
// 插入<div>元素及其子元素
var fileHtml = '';
fileHtml += '<div id = "file_preview' + id + '" style ="border-bottom: 1px solid #CCC;">';
fileHtml += '<img width =30 height = 30 src ="images/file.gif" title="' + fullName + '"/>';
fileHtml += '<a href="javascript:;" onclick="removeFile(' + id + ');">删除</a> ';
fileHtml += fullName.substr(fullName.lastIndexOf('\\')+1) +' </div>';
var fileElement = document.getElementById("files_preview");
fileElement.innerHTML = fileElement.innerHTML + fileHtml;
obj.style.display = 'none'; // 隐藏当前的<input type=”file”/>元素
addUploadFile(childnum); // 插入新的<input type=”file”/>元素
}
// 插入新的<input type=”file”/>元素,适合于不同的浏览器(包括IE、FireFox等)
function addUploadFile(index)
{
try // 用于IE浏览器
{
var uploadHTML = document.createElement( "<input type='file' id='file_" + index +
"' name='file[" + index + "]' onchange='insertNextFile(this)'/>");
document.getElementById("files").appendChild(uploadHTML);
}
catch(e) // 用于其他浏览器
{
var uploadObj = document.createElement("input");
uploadObj.setAttribute("name", "file[" + index + "]");
uploadObj.setAttribute("onchange", "insertNextFile(this)");
uploadObj.setAttribute("type", "file");
uploadObj.setAttribute("id", "file_" + index);
document.getElementById("files").appendChild(uploadObj);
}
}
function removeFile(index) // 删除当前文件的<div>和<input type=”file”/>元素
{
document.getElementById("files_preview").removeChild(document.getElementById("file_preview" + index));
document.getElementById("files").removeChild(document.getElementById("file_" + index));
}
function showStatus(obj) // 显示“正在上传文件”提示信息
{
document.getElementById("status").style.visibility="visible";
}
</script>
</head>
<body>
<html:form enctype="multipart/form-data" action="uploadMoreFile">
<span id="files"> <%-- 在此处插入用于上传文件的input元素 --%>
<input type="file" id="file_0" name="file[0]" onchange="insertNextFile(this)" />
</span>
<html:submit value=" 上传 " onclick="showStatus(this);"/>
</html:form> <p>
<div id ="status" style="visibility:hidden;color:Red">正在上传文件</div> <p>
<%-- 在此处用DOM技术插入上传文件列表项 --%>
<div id="files_preview" style ="width:500px;height:500px; overflow :auto" ></div>
</body>
</html>
【第2步】建立ActionForm的子类
在<samples工程目录>\src\actionform目录中建立一个UploadMoreForm.java文件,代码如下:
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
import java.util.*;
public class UploadMoreForm extends ActionForm
{
private List<FormFile> myFiles = new ArrayList<FormFile>(); // 用于保存不定数量的FormFile对象
public FormFile getFile(int i) // 索引属性
{
return myFiles.get(i);
}
public void setFile(int i, FormFile myFile) // 索引属性
{
if (myFile.getFileSize() > 0) // 只有上传文件的字节数大于0,才上传这个文件
{
myFiles.add(myFile);
}
}
public int getFileCount() // 获得上传文件的个数
{
return myFiles.size();
}
}
【第3步】建立Struts动作类(Action的子类)
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
import java.io.*;
import actionform.*;
public class UploadMoreAction extends UploadAction
{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
UploadMoreForm umForm = (UploadMoreForm) form;
PrintWriter out = null;
int count = 0;
try
{
response.setCharacterEncoding("GBK");
out = response.getWriter();
count = umForm.getFileCount(); // 获得上传文件的总数
for (int i = 0; i < count; i++)
{
saveFile(umForm.getFile(i)); // 开始保存每一个上传文件
}
out.println("成功上传" + String.valueOf(count) + "个文件.");
}
catch (Exception e)
{
out.println(e.getMessage());
}
return null;
}
}
在这一步来配置一下在第2步和第3步分别建立的ActionForm和Action的子类。打开struts-config.xml文件,在<form-beans>元素中加入如下的子元素:
由于在《Struts1.x系列教程(8):上传单个文件》一文的例子中已经设置了上传文件的保存路径和上传文件的大小限制,因此,在本例中仍然使用这一设置。但要注意的是,在上传多个文件时,最大上传文件尺寸指的是所有上传文件的尺寸之和,而不是指每个文件的尺寸。
发表评论
-
struts1 一次提交多个ActionForm
2015-11-11 17:10 770JSP中有两个actionform放在同一个form中,分别 ... -
【转】Struts 1.x 配置文件详解(下)
2015-03-15 14:30 7429) form-property标记 form- ... -
【转】Struts 1.x 配置文件详解(上)
2015-03-15 14:29 746使用Struts框架的一个好处就是可以用外部配置文件声明的方 ... -
【转】web.xml文件分析
2015-03-15 14:28 637<?xml version="1.0&quo ... -
【转】创建JavaBean的几种方法
2012-12-17 14:00 1989创建一个Bean的方法有很多种,并且在完成JavaBean ... -
【转】很详细的spirng+struts+hibernate实例
2012-12-13 14:17 2378本文并不想介绍Struts,Spring,Hiber ... -
struts bean:write标签页面换行显示的问题
2012-08-22 14:09 1543目前系统中,用户在输 ... -
【转】struts1.2 文件上传处理(引自javablog)
2012-08-17 14:01 1115前一段时间刚来公司, ... -
【转】struts教程
2012-08-15 14:56 1438概述 本文主要讲解什么是Struts Fra ... -
【转】struts文件上传,各种类型对应的MIME配置类型大全
2012-08-09 16:04 1219.a' : 'application/octet-s ... -
【转】struts ActionForm数据类型不匹配
2012-08-09 16:03 1031报错信息: java.servlet ... -
【转】struts1 中ActionForm赋值原理
2012-07-18 17:36 926在struts1中,当点击submit页面提交后, 由 A ... -
Cannot find bean XXXForm in any scope
2012-06-15 13:43 1016action-mappings > < ... -
【转】JSP 防止重复提交 防止重复刷新 防止后退问题以及处理方式
2012-06-07 11:18 978一。前言你在任何一个比较专业的BBS都会看到这样的问题 ... -
javax.servlet.jsp.JspException: Define tag cannot set a null value”。
2012-04-24 17:06 1218原因是他调用了bean:define标签,却又再次执行了一个a ... -
StrutsBug
2012-04-13 17:52 1039type Exception report messag ...
相关推荐
struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...
总的来说,"struts实现任意多文件上传实例"是一个实用的示例,可以帮助开发者了解和掌握在Struts中进行多文件上传的完整流程。通过学习这个实例,你可以更深入地理解Struts框架和文件上传的处理方式。
本篇将详细介绍如何在 Struts2 中实现单个文件和多个文件的上传功能。 首先,为了实现文件上传,我们需要在项目中添加两个关键的库:`commons-fileupload-1.1.1.jar` 和 `commons-io-1.1.jar`。这两个库提供了文件...
本教程将详细介绍如何在Struts中实现无中文乱码的文件上传与下载,并涵盖任意数量的文件上传。 首先,解决中文乱码问题的关键在于配置正确的字符编码。在Struts的配置文件`struts-config.xml`中,你需要为...
在Struts2中实现多文件上传是一项常见的功能,尤其在处理用户需要一次性提交多个文件的场景下。本篇文章将详细探讨如何在Struts2中实现多文件上传,并介绍相关的知识点。 首先,我们需要了解Struts2的文件上传机制...
然而,随着时间的推移,Struts2框架被发现存在多个安全漏洞,这些漏洞可能导致严重的后果,如远程代码执行、数据泄露等。"K8_Struts2_EXP 20170310"是针对这些问题的一款检测工具,主要用于识别和预防Struts2框架的...
然后,我们可以在Action类中定义一个`List<FileInfo>`类型的成员变量,用来接收上传的多个文件。 当涉及到文件类型和大小的验证时,Struts2提供了`interceptor`拦截器来实现。例如,我们可以自定义一个`...
3. **S2-048**(CVE-2017-5638):这个漏洞是由于解析JSON时的反序列化问题,使得攻击者可以通过上传恶意的JSON文件来执行任意代码。 4. **S2-012**(CVE-2012-6120):该漏洞存在于Struts2的FreeMarker模板引擎中...
1. **批量导入网站**:用户可以输入多个网址,工具会逐一扫描这些网站,检查它们是否使用了Struts2框架,并且存在已知的安全风险。 2. **自动检测**:工具自动执行一系列的测试,以确定网站是否存在特定的Struts2...
5. **文件上传测试**:除了命令执行,某些Struts2漏洞也可能允许恶意文件上传,该工具可能包含对这一风险的检测。 6. **教育与预防**:通过使用此工具,管理员不仅可以了解当前系统的安全状况,还能学习如何防止...
2. **批量上传**: 批量上传意味着用户可以一次选择并上传多个文件。这可以通过在表单中使用多个`<input type="file">`元素来实现,每个元素对应一个待上传的文件。在Action类中,需要对应数量的File字段来接收这些...
7. **Struts2包**:包是Struts2配置的组织单位,可以包含多个Action、拦截器和常量,实现配置的复用和模块化。通过包的继承和组合,可以有效地管理大型项目的配置。 8. **Struts2获得作用域**:Struts2支持四大作用...
这个漏洞影响了Struts2的多个版本,包括2.3.x和2.5.x。 2. **S2-046(CVE-2017-5638)**:又称为“Apache Struts2远程代码执行漏洞”,是由于上传插件中的一个严重错误,使得攻击者可以利用恶意的Multipart请求来...
Struts2是一个基于MVC设计模式的Web应用框架,它是在WebWork2的基础上发展起来的。与Struts1相比,Struts2具有诸多优势,使其成为开发者更优选的框架之一。 首先,Struts2采取了非侵入式设计,与Servlet API和...
1. 获取所需的jar文件,可以从Apache Struts官方网站下载Struts2的完整包,其中包括核心库、XWork库、OGNL库、FreeMarker库、日志库以及文件上传组件等。 2. 创建Struts2的配置文件,通常是`struts.xml`,该文件需要...
5. **文件队列管理**:SwfUpload 支持文件队列,用户可以选择多个文件后一次性上传,也可以按需控制文件的上传顺序和取消上传。 **Java 后端处理** 在Java后端,我们需要处理SwfUpload发送的HTTP请求。由于...
能同时上传单个文件或多个文件并创建文件夹,可以任意增减文件数目,运行结果
- **文件上传**:Struts2内置了文件上传功能,支持直接在Action中处理上传的文件,无需额外的组件或复杂的配置。 - **Ajax支持**:随着Web技术的发展,异步通信成为提高用户体验的关键。Struts2通过集成jQuery和其他...
Apache Struts2是一个流行的Java web开发框架,由于其广泛使用,历史上出现过多个严重安全漏洞,这些漏洞可能导致恶意攻击者执行任意代码、控制服务器甚至窃取敏感数据。 Struts2框架的安全问题主要包括: 1. **...
- **多个文件上传**:除了单个文件,还可以使用相同的组件上传多个文件,只需在客户端表单中允许选择多个文件即可。 #### 12.3 使用Struts2上传文件 Struts2框架对Common-FileUpload组件进行了封装,使其在Struts2...