当点击某个链接发送多个请求之后,浏览器显示正在等待localhost响应怎么办(实用)

最近写ssh项目分页的时候,遇到了这样一个问题,当我点击下一页超过10次之后,在浏览器的左下角就会显示“正在等待localhost响应”,只有重新启动Tomcat之后才可以使用,上网查资料都说是没有关闭session的原因,其实关闭了之后,请求多次(30次左右)也会炸掉的。如果不正当关闭session同样也会炸掉。

我就是不正当关闭session而炸掉的:基本代码如下

1.BaseDao 部分代码:

package com.gxuwz.check.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;

public class BaseDao<T> {
	private SessionFactory sessionFactory;
	private HibernateTemplate hibernateTemplate;
	private Session session;
	
	public SessionFactory getSessionFactory() {
		return this.sessionFactory;
	}
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	public Session getSession() {
		this.session = sessionFactory.openSession();
		return this.session;
	}
}

2.Dao的实现层CheckDaoImpl 部分代码:

public class CheckDaoImpl extends BaseDao implements ICheckDao {
	public List<SysCourse> queryCourse(String userid) {
		String hql = "from SysCourse a where a.userId = '"+userid+"' order by a.id";
		Query query = getSession().createQuery(hql);
		List list = query.list();
		getSession().close();
		return list;
	}
}

在这里我们看一下看一下第4行代码,有一个getSession(),这个方法是从BaseDao 里面调用过来的,即在这个地方开启了一个session,而并没有关闭,因为这个方法里面只是openSession,而并没有其他操作。

在第6行,这次的getSession()并不是上面的那个session,而是又重新开启了一个session,经过.close()方法之后关闭了

所以每次调用这个方法的时候都会少关闭一个session,所以调用多次之后就会炸掉。

所以,我将代码改为:

public class CheckDaoImpl extends BaseDao implements ICheckDao {
	public List<SysCourse> queryCourse(String userid) {
		String hql = "from SysCourse a where a.userId = '"+userid+"' order by a.id";
		Session session = getSession();
		Query query = session.createQuery(hql);
		List list = query.list();
		session.close();
		return list;
	}
}

这样的话,只开启一次session,然后最后一次性关闭
重新启动Tomcat之后,测试30次左右的时候,还是炸掉了
左思右想,是不是要清除缓存才行,所以添加了这个方法clear(),代码如下:

public class CheckDaoImpl extends BaseDao implements ICheckDao {
	public List<SysCourse> queryCourse(String userid) {
		String hql = "from SysCourse a where a.userId = '"+userid+"' order by a.id";
		Session session = getSession();
		session.close();
		Query query = session.createQuery(hql);
		List list = query.list();
		session.close();
		return list;
	}
}

测试,请求不知道多少次,至少有100次了,非常实用,系统没有炸,如果你想详细了解session.clear()方法,请看地址:

https://blog.csdn.net/qq_43290288/article/details/103375039

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁同学与Android

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值