当前位置: 代码迷 >> J2SE >> 实时获取进度解决方案
  详细解决方案

实时获取进度解决方案

热度:218   发布时间:2016-04-23 20:15:08.0
实时获取进度
我现在要批量插入数据,在插入数据时,怎么实时获取插入完成的记录,并返回页面做一个进度条,提高用户体验。以下是我的代码,我要怎么修改,谢谢各位大神指导
public void upload() throws Exception {
int total = 0;
int count = 0;
int num = 0;
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
User user = (User) getSessionAttribute("user");
int userId = user.getId();

XlsMain xlsMain = new XlsMain();
if(!Policy.SPECIAL_STRATEGY.equals(xlsMain.getSheetName(upload.getAbsolutePath()))){
out.print("fileError;" + total + ";" + num + ";" + count);
out.close();
return;
}

List<Strategys> strategys = xlsMain.parseXls(upload.getAbsolutePath());

total = strategys.size();
for (Strategys s : strategys) {
if (strategyService.checkRepeatStrategyName(userId, s.getSname(), s
.getStype())) {// 判断用户的策略是否重复
System.out.println("KaijiangAction === 该用户已有此同名的特殊策略");
count++;
continue;
}
s.setUserid(userId);
strategyService.saveStrategy(s);
}
num = total - count;

out.print("success;" + total + ";" + num + ";" + count);
out.close();

}

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

不妨假设你要插10条数据,需要在前台做个进度条。前台页面发10个Ajax,根据返回的的信息增加页面的一个全局变量,根据这个全局变量做进度显示。这是思路,实现的话,各步骤拆分测试再连起来。
照你这样的,10条数据就发送10个请求,那10万条数据就发送10万个请求,这个有些不合理吧。


如果性能是对项目很重要的话,是个问题。有个技术叫“反向Ajax”,可以实现后台往页面不短写数据,1个请求。
这个是我先将Excel中的数据解析后,放在一个list中,然后遍历list将数据插入数据库中


refresh ,想到《社交网络》中显示注册用户量的情景。数据库建一个字段作为一个任务的进度,页面写个“刷新” 按钮,让用户主动刷新。
------解决思路----------------------
给你一点思路
1,服务器端计算当前的导入进度
2,另外开一个url返回当前的进度
3,浏览器端通过  ajax 定时刷获取第2步所说的进度
4,定时刷新显示取回来的进度
5,使用 iframe 来显示,这样可以非常方便的隐藏或者显示
------解决思路----------------------
引用:
Quote: 引用:

怎么清空文件域啊???????
这个清空文件域有人知道怎么弄吗?


这个似乎是做不到的,基于安全原因,我们不能直接修改一个 File 对象的内容,因为你能做,那么木马也能做,并且木马会把这个 File 隐藏或缩小成0尺寸然后把你的磁盘上的所有重要文件都悄悄地上传,你还在在那么想怎么我的风络这么慢啊。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

怎么清空文件域啊???????
这个清空文件域有人知道怎么弄吗?


这个似乎是做不到的,基于安全原因,我们不能直接修改一个 File 对象的内容,因为你能做,那么木马也能做,并且木马会把这个 File 隐藏或缩小成0尺寸然后把你的磁盘上的所有重要文件都悄悄地上传,你还在在那么想怎么我的风络这么慢啊。


我们只能通过代码丢弃这个 File 对象,重新创建一个新的占据原来的位置。


------------------------------------------------------------------
放在一个 iframe 里,上传时,直接把 iframe 隐藏起来
  相关解决方案