您当前的位置: 首页 > 

梁同学与Android

暂无认证

  • 4浏览

    0关注

    618博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

梁同学与Android 发布时间:2019-12-04 21:09:03 ,浏览量:4

最近写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 {
	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 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 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 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

关注
打赏
1660730345
查看更多评论
立即登录/注册

微信扫码登录

0.3398s