下面一段代码竟然引起反复打开的时候IE进程挂起

2023-11-07

var lchs = "close";
window.onunload = function() {
 if (lchs == "fresh") {
  if (window.screenLeft > 10000) {
   logout();
  }
 } else {
  logout();
 }
}
window.onbeforeunload = function() {
 lchs = "fresh";
}

function logout() {
 Ext.Ajax.request({
  url : 'servlet/LogoutServlet',
  params : {
   type : 'Logout'
  },
  success : function(response, opts) {
   var val = Ext.util.JSON.decode(response.responseText);
  }
 });
}


LogoutServlet'

LogoutServlet:

package com.segsec.gisap.servlet;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.general.Constants;
import com.general.JsonUtil;
import com.segsec.gisap.MainSessionBean;

public class LogoutServlet extends HttpDispatchServlet {
	private static final long serialVersionUID = 1L;
	public void Logout(HttpServletRequest request,HttpServletResponse response, MainSessionBean session) throws IOException{
/*         	response.setHeader("Pragma","No-cache");  
        	response.setHeader("Cache-Control","no-cache");  
        	response.setDateHeader("Expires",  0); */
        	request.removeAttribute("MainSession");
    		request.getSession().invalidate();
    		HashMap hm = new HashMap();
    		hm.put(Constants.NO_SESSION_INFO_KEY, true);
    		JsonUtil.responseJsonObject(response, hm);
	}
}


HttpDispatchServletHttpDispatchServlet:

package com.segsec.gisap.servlet;


import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.general.Constants;
import com.general.JsonUtil;
import com.segsec.gisap.MainSessionBean;



public class HttpDispatchServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	private static Logger logger = Logger.getLogger(HttpDispatchServlet.class);
	
	protected Class<?> clazz = this.getClass();
	
	protected Map<String, Method> methods = new HashMap<String, Method>();

	protected Class<?> types[] = {HttpServletRequest.class, HttpServletResponse.class, MainSessionBean.class};
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//System.out.println("class:" + clazz.getName() + "\ttype:" + request.getParameter("type"));
		Object obj = request.getSession().getAttribute("MainSession");
		String ICURURL = null;
		if(!MainSessionBean.class.isInstance(obj)){
			logger.debug("Error: The main session is null.");
			System.out.println("错误:你没有登录系统!");
			ICURURL = request.getServerName() + ":" + request.getServerPort() + request.getRequestURI();
			System.out.println("请求的Servlet是:"+ICURURL);
			Map<String, Object> map = new HashMap<String, Object>();
			map.put(Constants.NO_SESSION_INFO_KEY, true);
			JsonUtil.responseJsonObject(response, map);
			return;
		}
		MainSessionBean mainSession = (MainSessionBean) obj;

		String method= request.getParameter("type");
		if(method == null){
			logger.info("Error: The parameter(type) is null.");
			System.out.println("错误:没有得到要求的method,请检查是否传输了type参数!");
			ICURURL = request.getServerName() + ":" + request.getServerPort() + request.getRequestURI();
			System.out.println("请求的Servlet是:"+ICURURL);
			System.out.println("请求的method是:"+method);
			return;
		}	 
        Method m = null;
        try {
        	m = this.getMethod(method);
        	request.setCharacterEncoding("UTF-8");
    		//response.setCharacterEncoding("UTF-8");
        	response.setContentType("application/x-json;charset=UTF-8");
        	m.invoke(this, request, response, mainSession);
        }catch (NoSuchMethodException e) {
        	e.printStackTrace();
        	logger.info("Error : don`t find the " + method + " method.");
			ICURURL = request.getServerName() + ":" + request.getServerPort() + request.getRequestURI();
			System.out.println("请求的Servlet是:"+ICURURL);
        	System.out.println("错误:没有找到" + method + "方法!");
            return ;
        }catch (Exception e) {
        	e.printStackTrace();
        	logger.info("Error : This is error in the " + method + " method.");
			ICURURL = request.getServerName() + ":" + request.getServerPort() + request.getRequestURI();
			System.out.println("请求的Servlet是:"+ICURURL);
        	System.out.println("错误:调用" + method + "方法出现错误!");
            return;
        }    
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		this.doGet(request, response);
	}
	
	private Method getMethod(String name) throws NoSuchMethodException {
		synchronized (methods) {			
	        Method m = (Method)methods.get(name);
	         if (m == null) {
	             m = clazz.getMethod(name, types);
	             methods.put(name, m);
	         }
	         return (m);
		}
	}
}


 

说明:

上面的代码我是放在一个页面B.html中,LogoutServlet中处理也很简单,就是去清理一下Session。

 

我在A.html里面有个按钮,window.open('B.html'),在IE中如果反复点击打开B.html然后关闭,这样打开不了几次IE的进程就挂死,IE6、IE7、IE9都有这个问题,IE8没有测试,firefox没有问题。

 

IE7、IE8、IE9再某个进程卡死后,可以新开选项卡正常打开B.html但原选项卡就没有办法打开了。

 

不知引起问题的真正原因是什么?反正去掉这段代码就正常了。


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下面一段代码竟然引起反复打开的时候IE进程挂起 的相关文章

随机推荐

  • NULL 与 nullptr

    在过去 我们如果要表示一个指针为空 我们条件反射肯定会这么写 int p NULL 然而啊 有没有想过这是有问题的 比如下面的这段代码 include
  • 2023华为OD机试真题【最长公共后缀】

    前言 python参考点我 题目内容 编写一个函数来查找 字符串数组 中的最长公共后缀如果不存在公共后缀 返回固定字符串 Zero 补充说明 1 字符串长度范围 2 1000 2 字符串中字符长度范围为 1 126 输入描述 abc bbc
  • vue3表格按需导出excel

    效果图展示 不要英文字段 excel内容展示 隐藏英文字段 首先安装xlsx依赖 npm install xlsx save export default imported as XLSX was not found in xlsx 当出现
  • mysql对表列数和行大小的限制

    列计数限制 MySQL对于每个表具有4096个列的硬限制 但给定表的有效最大值可能较少 精确的列限制取决于几个因素 表的最大行大小限制列的数量 可能是大小 因为所有列的总长度不能超过此大小 请参阅行大小限制 单个列的存储要求限制了适合给定最
  • Spring对Cache的支持

    从3 1开始 Spring引入了对Cache的支持 其使用方法和原理都类似于Spring对事务管理的支持 Spring Cache是作用在方法上的 其核心思想是这样的 当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓
  • 数据仓库之ODS层设计概要

    ODS层辨析 ODS全称是Operational Data Store 即操作数据存储 Inmon VS Kimball Bill Inmon的定义 ODS是一个面向主题的 集成的 可变的 当前的细节数据集合 用于支持企业对于即时性的 操作
  • 《超市订单管理系统》-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十二天)三个框架的整合,进行Web项目开发

    超市订单管理系统 SSM框架的学习与应用 Spring Spring MVC MyBatis Java EE企业级应用开发学习记录 第十二天 三个框架的整合 进行Web项目开发 其实我们昨天的项目也已经初步整合的三个框架 只差最后一步就是对
  • SBC 功能与部署

    SBC是IMS网络边缘用于实现IP接入 互通和安全保护的网元 存在于接入网络与IMS网络之间或不同IMS网络之间 是用户接入IMS的入口点 SBC作为B2BUA将用户和IMS核心网进行隔离 SBC的主要功能包括 注册管理功能 NAT穿越功能
  • 软件测试实验

    文章目录 软件测试实验 实验一 单元测试JUnit4基础 基础知识 实验内容 实验二 单元测试JUnit4进阶 实验三 Selenium功能测试 了解Selenium自动化测试工具 实验内容 实验四 Selenium WebDrive功能测
  • 局域网搜索-秒搜神器:everything 如果打造etp服务器,并且在本地可以双击打开

    起因 最近要经常到公司2000G的硬盘寻找数据 利用Windows自带的局域网共享搜索 速度非常缓慢 方案 就想到利用秒搜工具everything来做局域网工具 网页模式的很简单就不说了 这里说的是映射到本地硬盘的模式 步骤 主要是在服务器
  • Laravel_migrate 之后报Field 'is_active' doesn't have a default value

    例如 首先保证mysql的版本大于5 7 因为json是5 7之后支持的 找到database php 把strict设置为false
  • Uncaught SyntaxError: Unexpected identifier错误的解决方法

    在js中出现下面的错误 Uncaught SyntaxError Unexpected identifier可能的原因是 1 有可能是字符串类型的 但是并没有加双引号 2 有的是没有加逗号 仔细检查便好 3 如果是jsp的话仔细检查下js中
  • C#知识系列:程序不包含适合于入口点的静态“Main”方法

    参考 不包含适合于入口点的静态 Main 方法
  • 趣谈操作系统原理,存储管理之页式、段式、段页式存储

    一 概述 非连续分配管理方式允许一个程序分散地装入到不相邻的内存分区 根据分区的大小是否固定分为分页式存储管理方式和分段式存储管理方式 分页存储管理方式中 又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为基本分页式存储管理方式和
  • centos 7 安装mariadb(转)

    一 检测本机是否已安装mariadb 或者MySQL rpm qa grep mariadb rpm qa grep mysql 下面是我的结果 因为我已经安装过了 二 如果检测到有类似的安装包 建议先全部删除 重新安装 否则会有一些配置被
  • CodeForces - 6B

    题目链接 import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in int
  • 计算机网络复习资料

    选择与填空 概述 从通信双方信息交互的方式来看 通信有三种基本的方式 分别是单向通信 双向交替通信 和 双向同时通信 如果收发两端之间的传输距离为 10km 信号在媒体上的传输速率为 2 105km s 数据长度为 1000B 数据发送速率
  • @Param注解的用法

    1 概述 首先明确这个注解是为SQL语句中参数赋值而服务的 Param的作用就是给参数命名 比如在mapper里面某方法A int id 当添加注解后A Param userId int id 也就是说外部想要取出传入的id值 只需要取它的
  • 【思科、华为、华三这三大认证,选哪个考最好?】

    说起考证 大多数网络工程师心里都要抖上一抖 对于没考证的网工来说 一听就头痛 怎么谁都有了 就自己没有 对于考了证的网工来说 一听也头痛 怎么这刚考了一个 其他同事考了三个 今天我主要想和你聊的是 思科 华为 华三这三大认证的前景分析 以及
  • 下面一段代码竟然引起反复打开的时候IE进程挂起

    var lchs close window onunload function if lchs fresh if window screenLeft gt 10000 logout else logout window onbeforeun