所有的都用一个连接吗?SERVLET在容器中只有一个对象,那么所有的这个SERVLET的访问就一个连接,断了怎么弄,还有就是用一个连接的话程序到数据库这就并发就没有意义了,都在等待这个连接资源.找个数据库连接池就好了,随便在程序的任何地方获得CONNECTION就可以了,proxool或者C3P0或者直接用TOMCAT的连接池就好了

解决方案 »

  1.   

    可以这么写。当遇到请求Connection资源频繁的时候就可以把获得连接的语句写到
    Servlet中随Servlet启动。
    需要调用资源的时候只要在需要的地方调用就可以了。
    我是这么写的:
    package base;import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.sql.*;
    public class DatebaseServletBase extends HttpServlet {

    protected Connection conn; /**
     * Constructor of the object.
     */
    public DatebaseServletBase() {
    super();
    }//通过销毁Servlet来关闭conn
    public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    if(conn!=null){
    try {
    conn.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }//通过init()方法初始化,获得一个数据库连接
    public void init() throws ServletException {
    try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
            String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";
            try {
    conn = DriverManager.getConnection(url, "sa", "");
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }}
    然后谁想调用谁就建一个继承它的Servlet就行了
      

  2.   

    还是用连接池好一点在init建立连接和在destroy关闭连接都是不行的,因为一个servlet只有一个instance,不会每个客户端调用该servlet的时候又会去调用init和destroy一般是在doPost、doGet中获取连接,处理完,然后释放连接,都放在一起http://community.csdn.net/Expert/TopicView3.asp?id=5285465
      

  3.   

    用SPRING的IOC的PROTOTYPE模式,可以保证一个请求一个SERVLET实例