我正在Struts2中编写一个程序,它从一些url列表中解析一些xml,并在HttpSession中存储bean列表。这是一个漫长的过程,因为它必须从url下载xml,解析它并创建bean。我想以这样的方式设计这个任务,这样当它从客户端获得请求时,它将开始解析并将结果存储在会话中。当它完成解析一些xml时,它会从java通知页面或Struts,这样它就可以在解析剩下的url之前显示一些结果。我已经在不同的线程中使用此解析。但它有风险,因为web为每个不同的客户端请求管理不同的线程池,并且它有可能发生内存泄漏。我已经看过了execAndWait ,但在解析过程中无法显示某些结果bean。 任何人都能说出更好的方法或更好的解决方案
答案 0 :(得分:0)
我解决了我的问题。首先创建一个拦截器项目并扩展ExecuteAndWaitInterceptor.java而不是Interceptor接口并覆盖doIntercept方法。我们必须在doIntercept方法中使用getNewBackgroundProcess()。此方法主要创建后台线程。如果你控制这个拦截器,那么我们不需要等待不确定的延迟。如果我们控制这个机制,那么我们可以在一个bean准备好显示之前调用中间页面。应该调用时,所有控制权都在我手中。并且我们不需要使用延迟和间隔延迟,因为在此延迟之后,任何bean可能都没有准备好显示。