社区
Web 开发
帖子详情
jsp中调用连接池的问题。
redv
2003-03-28 10:37:54
在servlet中调用连接池,会在servlet destroy时,执行连接池的release操作。
而jsp中没有,这样会发生连接池用户计数clients在jsp页面每刷新一次时都不断地增长。该怎么办?
...全文
57
5
打赏
收藏
jsp中调用连接池的问题。
在servlet中调用连接池,会在servlet destroy时,执行连接池的release操作。 而jsp中没有,这样会发生连接池用户计数clients在jsp页面每刷新一次时都不断地增长。该怎么办?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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();}
%>
jsp
连接数据库
连接池
代码示例
jsp
连接数据库
连接池
代码示例,有
连接池
类
jsp
中
调用
存储过程的方法
jsp
调用
存储过程的小例子,java
中
如何
调用
存储过程方法简介。
JSP
数据库编程指南
JSP
数据库编程指南
jsp
连接mysql数据库
这是一个简单的用
jsp
,连接mysql 的数据库。 用到java jdbc连接方法。 希望对初学者有所帮助!
jsp
连接数据库
jsp
中
连接数据库的ppt
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章