【问题标题】:Call an action when closing a JSP关闭 JSP 时调用操作
【发布时间】:2011-03-25 11:40:10
【问题描述】:

我是Java网络世界的新手,如果我说一些愚蠢的话,请原谅我。

我正在使用 struts 2,当 jsp 关闭时,我需要删除一个文件(位于服务器上)。

有没有人知道如何做到这一点?

提前致谢。

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    window.onunload 建议很好,但不能保证 ajax 请求会到达服务器。据我记得,只有特定配置的特定 IE 版本才能成功发送 ajax 请求。 Firefox 和其他人不会这样做。然后我就不谈用户禁用JS的情况了。

    你不想依赖它。而是挂钩会话到期。当涉及到会话的(现有)属性时,您可以借助 HttpSessionListenerHttpSessionBindingListener 来做到这一点。

    例如

    public class CleanupSession implements HttpSessionListener {
    
        @Override
        public void sessionDestroyed(HttpSessionEvent event) {
            new File(somePath).delete();
        }
    
        // ...
    }
    

    (在web.xml注册为<listener>

    或者,如果是“登录用户”示例(存储在会话范围内):

    public void User implements HttpSessionBindingListener {
    
        @Override
        public void valueUnbound(HttpSessionBindingEvent event) {
            new File(somePath).delete();
        }
    
        // ...
    }
    

    【讨论】:

    • 不客气。请记住,当浏览器窗口/选项卡关闭时,会话不会立即结束。此后默认会持续 30 分钟。但这至少是确保文件被删除的最可靠的方法。
    • 我需要删除的文件取决于用户,因为我必须定义一个新类,所以我在告诉方法删除什么文件时遇到了问题。
    • 您可以将其设为User 类的属性。 User 类当然应该代表登录用户。总而言之,您基本上需要在会话中直接存储对File (in) 的引用。
    【解决方案2】:

    window.onunload 调用时,使用 ajax 删除文件的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多