我想在系统退出或者页面被刷新时删除session内容,因此做了如下处理(我用的是spring框架):
1、在一个controller里处理"getCloseView.do"请求:
public ModelAndView getCloseView(HttpServletRequest request,HttpServletResponse response){
        System.out.println("close");
        HttpSession session=request.getSession();
        session.invalidate();
        
        return new ModelAndView("close");
}
其实就相当于一个使session失效的普通servlet.2、在页面BODY里面加上:onbeforeunload="javascript:location.href='getCloseView.do'"实际运行时并没有执行controller里面的语句。
但是如果在后面加上一个"alert()"语句,也就是改成下面的语句:
onbeforeunload="javascript:location.href='getCloseView.do';alert()"
controller里面的代码就被执行了,控制台上能看到打印的"close"字样。请教各位达人,这是怎么回事啊?

解决方案 »

  1.   

    因为页面已经在卸载过程中了,不可能再location.href=...了不过,可以这样写:onbeforeunload="javascript:window.open('getCloseView.do')"记得getCloseView.do 应该输出一小段 javascript, 把弹出的窗口自己关掉。
      

  2.   

    楼上朋友的建议我也试过。我后来还采用过提交表单的方法,就是隐藏一个表单,表单的action=getCloseView.do,然后在onbeforeunload事件中提交表单,结果还是一样,一定要在最后加上一个alert()或者用其它方式弹出一个小窗口才能执行前面的代码。
    我的这个页面是一个包含三个iframe的框架页面,不知道是否对onbeforeunload事件的处理过程有影响?