关于servlet的一点小疑问
在servlet中的init()建立数据库连接,在多人同时访问这个servlet时,他们是使用的同一个连接吗?如果是,这样做会出现问题吗?
在servlet中的init()建立数据库连接,在多人同时访问这个servlet时,他们是使用的同一个连接吗?如果是,这样做会出现问题吗?
你只要清楚一点:你得到的连接(无论是以什么方式)只是一个物理连接的“句柄”,你所有的操作只是通过这个“句柄”去操作那个jdbc Connection对象---
并且在servlet的业务方法中调用完JDBC以后,你肯定要去关闭那个刚刚操作过的jdbc Connection----所以,每个客户端得到的并不是同一个连接。
一般更通用的做法是:写一个专门负责数据库连接生成与释放的java Class,在servlet中就可以将这个Class import进来,直接调用其方法即可。
我在int()中建立连接,而在destory()中释放连接,由于destory()等到服务关闭才调用 ,所以我觉得多用户同时访问时应该用的是一个连接吧!同时访问时,会遇到问题吗?
提供一验证登录的 servlet 程序,供楼主参考:
|
谢谢
这个类本身设计的很糟糕。
juniper解释是有道理的,但是juniper的例子好像和楼主的要求“init()建立数据库连接”有些不一致。juniper的例子的数据库连接是在dopost中生成,如果将Connection con=null成为类变量,在init方法中获得con,那么在doPost使用con时,将会是同一个连接了。
就思路上而言,你还是用juniper的例子吧,最好放弃你在“init()建立数据库连接,将Connection con=null成为类变量”。
我在int()中建立连接,而在destory()中释放连接,由于destory()等到服务关闭才调用 ,所以我觉得多用户同时访问时应该用的是一个连接吧!同时访问时,会遇到问题吗?
???
一个用户启动一个Servlet线程哪!
那么变量呢?
真是个SB问题!
在init()里得到的Connection不通过类变量能被doPost()用吗?
使用ThreadLocal不就可以了?
不一定啊
[该贴被xfzhu2003于2007-12-20 22:34修改过]