import .....
public class FirstDBServlet extends HttpServlet {
private String url;
private String user;
private String password; public void init() {
String driverclass = getInitParameter("driverClass");
url = getInitParameter("url");
password = getInitParameter("password");
Class.forName(driverClass);
} pulic void doGet(HttpServletRequest req, HttpServletResponse resp) {
Connection conn = null;
Statement stmet = null;
conn = DriverManager.getConnection.getConnection(url, user, password);
.....
}
}请问,这段例子代码中,为何不将conn定义成成员变量,然后再init()里使用conn = DriverManager.getConnection.getConnection(url, user, password);
这样,不用每个用户来访问这个servlet时都去重复构建conn了。
孙鑫老师的例子中,这样写,原因是何?

解决方案 »

  1.   

    这个涉及到Servlet是否线程(thread)问题.具体去看看这个吧. 
    http://www.yesky.com/334/1951334.shtml
      

  2.   

    这只是个例子,当然碰到实际情况当然会有所谓的best practice
      

  3.   

    这个例子中多线程使用的conn都是用相同的管理员账号连接到相同的数据库,并且整个过程中并没有去修改conn
    的值.能不能多线程共用conn(不会产生数据不一致啊,conn一直不变)
    然后在该servlet的destroy()方法里写conn.close();
      

  4.   

    如果在init()方法里面加上加载你那段内容,就是初始化的时候做了。。如果是一个房子或者仓库,你会一直把门打开吗?
      

  5.   

    连接不能一直打开的,就像你喝水,你把水龙头打开就喝,喝完了就关.可以在tomcat配置数据源
      

  6.   

    你肯定对Servlet的生命周期不了解吧···
    当客户端提交之后就会转到Servlet中,而在servlet是有生命周期的,代码刚跳进servlet中先执行init()方法,因为它是初始化,一个程序如果不初始化的话那怎么往后执行呢。所以它应该先初始化再进行判断你调用的是get 还是 post 。
      

  7.   

    如果只是创建一个con,那么所有的人用的都是一个连接,这样不安全,而且资源也是浪费了
      

  8.   

    一个servlet的init方法只会初始化的时候调用,但是如果销毁必须手动调用一个destory()才会销毁..如果你在init中创建,那么就等于说把con一直挂着,但是一个数据库的连接是非常有限的而且决定了性能的高低.
      

  9.   

    一个init只会在初始化的时候执行一次,如果conn在里面初始化的话,即是说这个servlet将一直打开着数据库,及时这个servlet没被调用到,它也会一直占有数据库资源,那如果有多个这样的servlet的话,你数据库可能就挂了,因为一直给一些没调用的servlet占着
      

  10.   

    init()只在初始化时才执行一次,conn如果放在init()里面,则只有一个conn产生,且一直存在于servlet的整个生命周期,这样一来程序就会一直和数据库建立连接。这样做即不划算也不安全。
      

  11.   

    如果将Connection对象做为该Servlet的成员变量,在Servlet的init方法中进行初始化,这样做:
    1、会消耗系统大量内容空间(因为Connection一种占用此空间在Servlet的生命周期期间);
    2、如果某用户关闭了此连接(例如,当前用户操作出现异常),由于init在Servlet的整个生命周期只调用一次,这将导致其他用户无法访问;
    3、安全性。所有的用户都是用一个对象,如果该变了此对象,则所有的用户都只能使用修改后的对象(不止针对本程序)。