Servlet数据库连接池

  • 使用连接池连接数据库
    首先在一下apache中的conf文件夹中的context.xml文件添加下面这段配置信息
    <Resource
    name="jdbc/message"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive = "100"
    maxIdle="30" maxWait="10000" username="root" password="123456"
    driverClassName = "com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/message"
    />

可将上面的配置信息直接在项目中创建一个context.xml文件将信息复制进去
当然也可在项目中的web.xml中写入配置信息(二者选其一)
<resource-ref>
<description>news DateSource</description>
<res-ref-name>jdbc/message</res-ref-name>
<res-type>javax.sql.DateSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

在BaseDao中的连接方法如下

public Connection getConnection(){
        Context ctx = null;
            try {
                ctx = new InitialContext();//初始化上下文
                DataSource ds= (DataSource)ctx.lookup("java:comp/env/jdbc/message");//date对象
                conn = ds.getConnection();
            } catch (NamingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        return conn;
}

记得添加mysql的jar包,这点很重要!


 

 

 

一个动态的网站频繁地从数据库中取得数据来构成html页面。每一次请求一个页面都会发生数据库操作。但连接数据库却是一个需要消耗大量时间的工作,因为请求连接需要建立通讯,分配资源,进行权限认证。这些工作很少能在一两秒内完成。所以,建立一个连接,然后再后续的查询中都使用此连接会大大地提高性能。因为servlet可以在不同的请求间保持状态,因此采用数据库连接池是一个直接的解决方案。

  Servlet在服务器的进程空间中驻留,可以方便而持久地维护数据库连接。接下来,我们介绍一个完整的连接池的实现。在实现中,有一个连接池管理器管理连接池对象,其中每一个连接池保持一组数据库连接对象,这些对象可为任何servlet所使用。

一、数据库连接池类 DBConnectionPool,提供如下的方法:

  1、从池中取得一个打开的连接;

  2、将一个连接返回池中;

  3、在关闭时释放所有的资源,并关闭所有的连接。

  另外,DBConnectionPool还处理连接失败,比如超时,通讯失败等错误,并且根据预定义的参数限制池中的连接数。

二、管理者类,DBConnetionManager,是一个容器将连接池封装在内,并管理所有的连接池。它的方法有:

  1、 调用和注册所有的jdbc驱动程序;

  2、 根据参数表创建DBConnectionPool对象;

  3、 映射连接池的名字和DBConnectionPool实例;

  4、 当所有的连接客户退出后,关闭全部连接池。

Tomcat数据库连接池技术

在其Tomcat的安装目录\conf\Context 文件中,找到Context标签,在Context节点中加入一个子标签Resource,配置如下:
<Resource name="jdbc/mysql" auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/library?characterEncoding=GBK"
              username="root"
              password="root"
              maxActive="200"
              maxIdle="50"
              maxWait="3000"/>

配置Context.xml效果如下:

2.在你的项目中找到WEB-INF文件夹中的web.xml文件并打开,在web-app节点中加入resource-ref标签,配置如下:

  </welcome-file-list>
  <!-- 引用数据库连接池 -->
  <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/mysql</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>

</web-app>

配置web.xml效果如下:

至此,数据库连接池的配置已经完成。

注意:

若用eclipse编写servlet程序时,仅仅修改Tomcat安装目录中的Context文件是不够的,还需要修改你所编写的项目中的Context文件(打开eclipse中的Project Explorer,在servers文件夹下的Context.xml文件),修改的代码和Tomcat中的context文件代码一致。此举可解决Cannot create JDBC driver of class “for connect URL null”问题。
如果不在项目的WEB-INF中添加context.xml文件,则需要在tomcat\conf\catalina\localhost文件夹中添加.xml(这个代表你的项目的名称),添加代码:
<Context docBase="D:\jee workspace\tomcat11\WebContent" debug="0">
    <ResourceLink name="mysqlDataSource" global="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>

配置完后,数据库连接成功。

原文链接:https://blog.csdn.net/pride_xu/article/details/78285326

 

Servlet实现注册+数据库连接—连接池
本文章只是提供部分源码,一个思路来实现一个简单的数据库注册的功能连接的功能
总体流程:
配置c3p0-config.xml,导入jar包。
创建JDBCUtils类,实现数据库资源连接和释放
创建页面:action指向对应的servlet
创建servlet,获取页面输入参数,连接数据库,进行insert操作
配置web.xml文件
一、 注册页面
自己填写表单,form标签的action填写对应需要处理的servlet类

二、 c3p0-config.xml配置文件(名字不能改位置在src根目录下,数据库名字,用户名,密码根据自己的填写)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">
            com.mysql.jdbc.Driver
        </property>
        <property name="jdbcUrl">
            jdbc:mysql:///user?useUnicode=true&amp;characterEncoding=utf-8//防止乱码
        </property>
        <property name="user">
            root
        </property>
        <property name="password">
            123
        </property>
    </default-config>
</c3p0-config>

三、 所需jar包
WebContent/WEB-INF/lib目录下
c3p0.jar/mysql-connector.jar
下载地址:https://download.csdn.net/download/qq_36826635/10605648

四、 Web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>User</display-name>
  <welcome-file-list>
    <welcome-file>backend/regist.jsp</welcome-file>
  </welcome-file-list>


  <servlet>
    <description></description>
    <display-name>自己的servlet名字</display-name>
    <servlet-name>自己的servlet名字</servlet-name>
    <servlet-class>自己的servlet路径</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>自己的servle名字</servlet-name>
    <url-pattern>自己的访问路径</url-pattern>
  </servlet-mapping>
</web-app>

五、 JDBCUtils类
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
    private static ComboPooledDataSource pool 
                    = new ComboPooledDataSource();
    private JDBCUtils() {}
    /**3.提供getConn方法, 用于从连接池中获取一个连接对象    */
    public static Connection getConn() throws Exception {
        try {
            return pool.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            throw e;
        }
    }

    /**
     * 4.提供close方法, 用于释放资源
     * @param conn 连接对象
     * @param ps 传输器对象
     * @param rs 结果集对象
     */
    public static void close(Connection conn, Statement stat,
            ResultSet rs) {
        if(rs != null ){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                rs = null;
            }
        }
        if(stat != null ){
            try {
                stat.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                stat = null;
            }
        }
        if(conn != null ){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                conn = null;
            }
        }
    }
}

六、 ProdAddServlet类
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 处理商品的添加请求
 * @author:KaiLeon
 * @time:2018年8月17日 下午3:45:43
 */
public class ProdAddServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;  
    protected void doGet(
            HttpServletRequest request, 
            HttpServletResponse response) 
                    throws ServletException, IOException {
        //0.处理请求参数乱码
        request.setCharacterEncoding("utf-8");
        //0.处理响应乱码
        response.setContentType("text/html;charset=utf-8");
        //1.获取添加的用户(请求参数)
        String name = request.getParameter("name");
        String category = request.getParameter("password");
        //2.将用户信息添加到数据库保存
        addUser(name,password);

        //3.提示用户添加成功,3秒跳转到主页面
        PrintWriter out = response.getWriter();
        out.write("<h1 style='color:green;magin:15px 5px;'>");
        out.write("添加成功,"
                + "3秒跳转到商品列表页面");

        out.write("</h1>");

        //4.定时刷新,3秒跳转商品列表
        response.setHeader("Refresh", "3;url="
                      +request.getContextPath()
                      +"主页面");
    }

    /**
     * 将用户信息加入到数据库
     */
    private void addUser(
            String name, String passwoord) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            //1.获取数据库连接
            conn = JDBCUtils.getConn();
            //2.声明sql骨架
            String sql = "insert into user values(null,?,?)";
            //3.获取传输器
            ps = conn.prepareStatement(sql);
            //4.设置sql参数
            ps.setString(1, name);
            ps.setString(2, password);  
            //5.执行sql语句,添加商品信息
            ps.executeUpdate();//注意不要传sql
            System.out.println("插入成功");
        } catch (Exception e) {
            e.printStackTrace();//一定将异常信息打印出来
            System.out.println("添加失败");
        }finally {
            //释放资源
            JDBCUtils.close(conn, ps, null);
        }

    }
    protected void doPost(
            HttpServletRequest request,
            HttpServletResponse response) 
                    throws ServletException, IOException {
        doGet(request, response);
    }

}
————————————————

原文链接:https://blog.csdn.net/qq_36826635/article/details/81807073

 

https://www.cnblogs.com/nuccch/p/8120349.html

 

https://blog.csdn.net/dzy21/article/details/51952138?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-6.control

https://blog.csdn.net/tuke_tuke/article/details/51532510?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-2.control

https://blog.csdn.net/Ljj657137723/article/details/45151217?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

 

 

https://www.cnblogs.com/xdp-gacl/p/4002804.html

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值