深入分析Java中webwork的文件上传机制

点击上传按钮后,webwork的程序流如下:

step 1)进入ServletDispatcher.service

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
........
request = wrapRequest(request);
.........
}

step2)进入ServletDispatcher.wrapRequest

protected HttpServletRequest wrapRequest(HttpServletRequest request)
throws IOException {
........................
if (MultiPartRequest.isMultiPart(request)) {
request = new MultiPartRequestWrapper(request, getSaveDir(), getMaxSize());
}
return request;
}

step3)进入MultiPartRequestWrapper的构造方法

public MultiPartRequestWrapper(HttpServletRequest request, String saveDir, int maxSize)
throws IOException {
.....................
//step3.1)获取webwork.preperties配置的parser
String parser = "";
parser = Configuration.getString("webwork.multipart.parser");
// If it's not set, use Pell
if (parser.equals("")) {
log.warn("Property webwork.multipart.parser not set." +
" Using com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest");
parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
}
// legacy support for old style property values
else if (parser.equals("pell")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
} else if (parser.equals("cos")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.CosMultiPartRequest";
} else if (parser.equals("jakarta")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";
}
//step3.2)获取后通过反射实例化parser
try {
Class baseClazz =
com.opensymphony.webwork.dispatcher.multipart.MultiPartRequest.class;
Class clazz = Class.forName(parser);
// make sure it extends MultiPartRequest
if (!baseClazz.isAssignableFrom(clazz)) {
addError("Class '" + parser + "' does not extend MultiPartRequest");
return;
}
// get the constructor
Constructor ctor = clazz.getDeclaredConstructor(new Class[]{
Class.forName("javax.servlet.http.HttpServletRequest"),
java.lang.String.class, int.class
});
// build the parameter list
Object[] parms = new Object[]{
request, saveDir, new Integer(maxSize)
};
// instantiate it
multi = (MultiPartRequest) ctor.newInstance(parms);
.................................................
}

时间: 2024-11-01 22:41:27

深入分析Java中webwork的文件上传机制的相关文章

java 缩略图-Java中如何实现文件上传同时将文件首页生成缩略图保存

问题描述 Java中如何实现文件上传同时将文件首页生成缩略图保存 Java中如何实现文件上传同时将文件首页生成缩略图保存: 设想是在Java中模拟打印,将第一页获取生成图片,但是不知道怎么做 解决方案 什么叫文件首页?如果只是生产缩略图,java图像api直接搞定 解决方案二: 可否发下源码!!1976910941@qq.com 谢谢

java中struts2实现文件上传下载功能实例解析_java

本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签   复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

java中struts2实现文件上传下载功能_java

先谈一谈struts2实现文件的上传和下载实例实现的原理: Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中.从而我们就能够以本地文件方式的操作浏览器上传的文件. 具体实现: 一.创建index.jsp页面 <body> <s:form action="upload" method="p

java中Struts2 的文件上传和下载示例_java

文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置为 post 需添加 <input type="file"> 字段. Struts 对文件上传的支持 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 步骤: 在 Jsp 页面的文件上

java中struts2实现文件上传下载功能

1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签    代码如下 复制代码 <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">      <input type="file" name="upl

java中Spring MVC文件上传的例子

首先需要配置是加入两个 jar包: commons-fileupload-1.2.2.jar commons-io-2.1.jar 1.    文件配置 SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver来明确告诉DispatcherServlet如何处理MultipartRequest <bean id="multipartResolver" class="org.springframework

Java中使用WebUploader插件上传大文件单文件和多文件的方法小结_java

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构spring+struts2+mybatis+MySQL 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

Webwork 实现文件上传下载代码详解_javascript技巧

本文主要从三个方面给大家介绍webwork文件上传下载知识,包括以下三个方面: 1. 包装 Request 请求 2. 获取文件上传的解析类 3. 项目实战配置和使用 Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺便关注了下框架上传下载的实现. 1. 包装 Request 请求 •每次客户端请求 Action 时,都会调用 WebWork 调度

JAVA使用commos-fileupload实现文件上传与下载实例解析_java

首先给大家介绍一文件的上传 实体类 import java.sql.Timestamp; /** * * @Decription 文件上传实体类 * */ public class Upfile { private String id;// ID主键 使用uuid随机生成 private String uuidname; // UUID名称 private String filename;//文件名称 private String savepath; // 保存路径 private Timest