社区
Web 开发
帖子详情
jsp中调用连接池的问题。
redv
2003-03-28 10:37:54
在servlet中调用连接池,会在servlet destroy时,执行连接池的release操作。
而jsp中没有,这样会发生连接池用户计数clients在jsp页面每刷新一次时都不断地增长。该怎么办?
...全文
90
5
打赏
收藏
jsp中调用连接池的问题。
在servlet中调用连接池,会在servlet destroy时,执行连接池的release操作。 而jsp中没有,这样会发生连接池用户计数clients在jsp页面每刷新一次时都不断地增长。该怎么办?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
redv
2003-08-08
打赏
举报
回复
我知道怎么搞了,呵呵,把它用jsp声明就可以了.这样数据库管理者就成了成员变量了,而不是局部变量了.
<%!
//声明变量,编译成servlet后成为成员变量.
%>
redv
2003-03-29
打赏
举报
回复
但是不是说jsp是变成servelet来执行的吗,二者怎么会有区别呢?
也就是说jsp会被编译成class像servlet一样来运行.
但是在servelt的destroy()中我们调用了release()方法.
但是jsp编译后生成的class的反编译后是这样的(resin2.1.6 -windows版)
public void destroy()
{
_caucho_isDead = true;
super.destroy();
}
在这个里面它没有调用连接池的release()方法,这个与在servelet中不一样(少了release())
这就会导致clients计数不对.
to pxq(风轻轻地吹) ;如果我在jsp中每次完成都调用release()的话,那连接池就起不到作用了,以为连接池管理着的release方法是这样的:
=============
连接池管理者:
public synchronized void release()
{
//等待直到最后一个客户程序调用
if(--clients != 0)
{
return;
}
DBConnectionPool pool = null;
Enumeration allPools = pools.elements();
while(allPools.hasMoreElements())
{
pool = (DBConnectionPool) allPools.nextElement();
pool.release();//这个方法写在下面
}
Driver driver = null;
Enumeration allDrivers = drivers.elements();
while(allDrivers.hasMoreElements())
{
driver = (Driver) allDrivers.nextElement();
try
{
DriverManager.deregisterDriver(driver);
//log("Deregistered JDBC driver " + driver.getClass().getName());
log("撤销JDBC驱动程序 " + driver.getClass().getName()+"的注册");
}
catch(SQLException e)
{
//log(e, "Can not deregister JDBC driver: " + driver.getClass().getName());
log(e, "无法撤销下列JDBC驱动程序的注册: " + driver.getClass().getName());
}
}
}
===========
pool的release方法:
public synchronized void release()
{
Enumeration allConnections = freeConnections.elements();
while(allConnections.hasMoreElements())
{
Connection con = (Connection) allConnections.nextElement();
try
{
con.close();
//log("Closed connection for pool " + name);
//log("关闭连接池" + name+"中的一个连接");
}
catch(SQLException e)
{
//log(e, "Can't close connection for pool " + name);
log(e, "无法关闭连接池" + name+"中的连接");
}
}
freeConnections.removeAllElements();
}
也就是说我如何才能,把这个release的同样的功能加大jsp中像servlet一样呢?
--------
servelet中destroy()
代码:
public void destroy()
{
connMgr.release();
super.destroy();
}
misfans
2003-03-28
打赏
举报
回复
可以手動release它呀!
在你的Bean裡可以加入一個方法去release,如下:
public void close() throws SQLException{
if(stmt != null) stmt.close();
connMgr.freeConnection(connName,conn);
}
pxq
2003-03-28
打赏
举报
回复
你每次用完连接 就执行连接池的release操作 不就行了。
shixiaoxiang
2003-03-28
打赏
举报
回复
JSP实际是一个servlet,只不过其中输出的html代码复杂点罢了,DBConnectionManager 是连接池,下面的代码是jsp里的,也可以把它放到javabean里,看你的意思,用javabean的话不需要在jsp里建连接池,在bean里建连接池就可以了,在jsp里的到bean的数据就可以了。
<%
//System.out.println(request.getParameter("list"));//链接参数由此传入
DBConnectionManager connMgr = DBConnectionManager.getInstance();
Connection con = connMgr.getConnection("idb");
if (con == null) {
out.println("不能获取数据库连接.");
return;
}
ResultSet rs = null;
Statement stmt = null;
try {
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM PROVINCE");
}catch(Exception ee){ee.printStackTrace();}
%>
[转载]proxool详细配置
原文地址:proxool详细配置作者:石头
连接池
最基本的目的: 1、重用连接,节省连接资源; 2、免去建立连接操作,提高效率 最近做的一个项目
中
运用到了
连接池
技术,在此简单的记录一下,我在项目
中
成功的配置和测试源码。 第一步:首先去http://proxool.s
使用数据库
连接池
报异常too many connection
背景 用servlet+
jsp
+mysql开发一个练手项目在线商城,dao层选用HikariDP
连接池
作为数据源,网页前端点一点,刷新几次之后,即进行几次数据库操作之后,就会报错too many connection 解决思路 报这个错误意思是连接数过多,我们都知道,连接数据库获取的连接数是有上限的,虽然上限可以设置,但是就我这么小的小项目,mysql不至于顶不住啊?另外,所有的获取连接操作,我都是try-with-resource代码块实现的,也就是说,所有获取的connection,在使用之后都正常释
JSP
+STRUTS+EJB+DAO+HIBERNATE实例
例子只是一个简单的登录测试.
JSP
调用
STRUTS的ACTION,然后在ACTION
中
调用
EJB,EJB
中
的DAO
调用
HIBERNATE,用了JBOSS的数据库
连接池
.数据库为MYSQL.包里面有test.sql数据库表结构,导入到MYSQL就可以了.mysql-db.xml配置数据库
连接池
,和EAR放到同一个DEPLOY目录下.运行JBOSS就可以了.我要的版本是3.2.5
java.sql.SQLException: No suitable driver
问题
解决
最近在学习java,用到c3p0数据库
连接池
,遇到一个很奇怪的现象,用main方法测试是可以正常连接数据库的,但是使用
jsp
调用
代码,就会报如下图的错误! 最下面的java.sql.SQLException: No suitable driver才是重点 解决办法是将mysql的驱动jar包,放到D:\Program Files\Java\jdk1.8.0_91\jre\...
02.
jsp
复习
/前端form设置enctype,记得设置文件名字,由于低版本servlet不支持Part方法,需要在前端设置url以便得到文件名,post的内容是放在请求题里面的,payload就是请求体,无法直接设置参数进去。7.公用目录是WEB-INF 或 public ,私有目录是src目录(编译后)A、Java文件与Bean所定义的类名可以不同,但一定要注意区分字母的大小写。Javabean的部署有两种方式,一种是公有目录下,一种是私有目录下。C、被引用的Bean文件的文件名后缀为.java //class。
Web 开发
81,111
社区成员
341,725
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章