我有一个servlet,用于在android中上传我的应用程序的数据库。
数据库在服务器端处理,但这可能需要一段时间。
目前,我刚回来时回复说上传已成功使用PrintWriter.write()。
有没有办法将响应发送到客户端(我的Android应用程序)以开始处理文件?
如果我将重定向发送到另一个servlet或使用调度程序转发请求,那么在执行处理的servlet完成之前我将不会得到响应。
最好的方法是,立即回复用户,让数据库的处理开始并将结果发送回android(注意这可能需要5分钟或10分钟,具体取决于数据库 - 所以我假设我需要某种监听器来在服务器上轮询结果是否已经处理并准备好在客户端上显示)
答案 0 :(得分:3)
后端处理可以通过作业完成,例如通过石英。如果服务器可以用JBoss AS,Glassfish或Resin替换,一个简单的@Asynchronous注释方法也可以在这里完成工作。
您确实可以连续轮询服务器以询问它是否已经完成。这就是Web环境中大多数基于AJAX的进度条也能做到的。
或者你可以使用反向AJAX(Comet)来阻止轮询(参见例如http://atmosphere.java.net/)。在这种情况下,服务器能够在完成后立即将响应推送回给您。这确实需要在您的服务器上进行某种事件。如果您可以用JBoss AS或Glassfish替换服务器,CDI事件总线可以是一个选项。否则,您在其上调用wait / notify的HTTP会话中的共享对象是一种粗略的替代方法。