WebWork中使用execAndWait的使用总结

在项目中使用excel将用户数据导入系统,由于导入的数据量不断增多,逻辑的判断和处理也越来越复杂,为了提高导入的速度和用户体验,决定采用多线程处理导入数据,并在页面给用户提示进度。

WebWork用的是2.2.7。

原来上传使用的是WebWork默认的上传拦截器fileUpload,加上execAndWait以后,偶尔会提示文件不存在。

 

[com.opensymphony.webwork.interceptor.FileUploadInterceptor] - <Removing file upload D:\SoftTool\tomcat55\work\Catalina\localhost\imanager\upload__2b4efc5d_12773f9bb52__7fac_00000002.tmp>
<java.io.FileNotFoundException: D:\SoftTool\tomcat55\work\Catalina\localhost\imanager\upload__2b4efc5d_12773f9bb52__7fac_00000002.tmp (系统找不到指定的文件。)
 

在网上搜了一下,有前贝说fileUpload在拦截之后就会把上传的文件删掉,exeAndWait是启用另一个线程去执行,所以有时候会出现文件不存在的情况。

为了保险起见,我新建了一个Interceptor,将临时文件拷贝一份赋给action。在Action执行之后将文件手动上传。

 

public String intercept(ActionInvocation invocation) throws Exception {
		Object action = invocation.getAction();
		if (action != null && action instanceof ImportSetWorkTurnAction) {
			ImportSetWorkTurnAction setWorkTurnAction = (ImportSetWorkTurnAction) action;
			File srcFile = setWorkTurnAction.getFile();
			if (srcFile != null) {
				File destFile = new File(srcFile.getPath() + ".bak");
				FileUtils.copyFile(srcFile, destFile);
				setWorkTurnAction.setFile(destFile);
			}
		}
		return invocation.invoke();
	}

 运行之后发现还是有问题,setWorkTurnAction.getFile()拿到的文件为null,而action中的文件判空却显示文件不为空,检查一下,发现原来是我拦截器的

顺序有问题,我将新的拦截器直接放到了fileUpload之后,之后是defaultStack,而在defaultStack没执行之前上传的文件还没有为action的属性file赋值,所以在我的拦截器里就拿不到文件。将defaultStack放到新拦截器之后问题解决。

未完待续 。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值