在 Spring MVC 中,视图关闭时调用方法通常是指在用户关闭浏览器窗口或标签页时执行特定的服务器端逻辑。这种需求常见于需要清理资源、记录用户登出时间或执行其他清理操作的场景。
最常见的方法是通过前端 JavaScript 监听页面关闭事件,然后通过 AJAX 调用后端 Spring MVC 控制器方法。
window.addEventListener('beforeunload', function(e) {
// 发送异步请求到服务器
fetch('/onCloseHandler', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
keepalive: true // 确保请求能在页面卸载时完成
});
});
对应的 Spring MVC 控制器:
@RestController
public class CloseHandlerController {
@PostMapping("/onCloseHandler")
public ResponseEntity<String> handleClose(@RequestBody(required = false) Map<String, Object> payload) {
// 执行关闭时的逻辑
System.out.println("View is closing, performing cleanup...");
return ResponseEntity.ok("Cleanup completed");
}
}
对于更可靠的关闭事件处理,可以使用 WebSocket:
@Controller
public class WebSocketCloseHandler {
@OnClose
public void onClose(Session session) {
// 当WebSocket连接关闭时执行
System.out.println("Connection closed: " + session.getId());
}
}
监听会话销毁事件:
@Component
public class SessionListener implements HttpSessionListener {
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// 当会话超时或失效时执行
System.out.println("Session destroyed: " + se.getSession().getId());
}
}
beforeunload
事件在某些情况下可能不会触发,如浏览器崩溃或电脑突然断电。beforeunload
事件的支持和处理方式可能不同。beforeunload
事件。window.addEventListener('beforeunload', function(e) {
if(confirm('确定要离开吗?')) {
// 发送关闭请求
}
});