Servlet数据库连接池

2023-05-16

  • 使用连接池连接数据库
    首先在一下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

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Servlet数据库连接池 的相关文章

  • 安卓4.4手机运行崩溃,类无法找到,实际却是存在

    java lang RuntimeException Unable to get provider com SdkFileProvider java lang ClassNotFoundException Didn t find class
  • [学习笔记] EL 使用EL表达式获得作用域属性

    采用EL表达式 对于属性的访问的隐含访问顺序是 pageContext httpServletRequest HttpSession ServletContext 通过以下实例 来说明 servlet scopeVar java impor
  • 芯片细分领域

  • Xception论文解读

  • 如何创建HttpServletRequest对象

    我们常用的就是在Controller层的接口入参时定义 这样我们就能直接用了 如下图 但是某些情况 我们需要传递这个request 到各种工具类中 传递这个request 相对要麻烦一些 我们可以不用传递 在需要用到request的地方 通
  • Codeup(云效)手把手教部署SpringCloud项目到私有主机

    博主介绍 小黄鸭技术 擅长领域 Java 实用工具 运维 系列专栏 开发工具 Java之路 八股文之路 如果文章写作时有错误的地方 请各位大佬指正 一起进步 欢迎大家点赞 收藏 评论 支持博主 开通云效 上传代码仓库 配置SSH公钥或者是H
  • 什么是servlet?servlet有什么用?

    servlet概述 什么是servlet servlet有什么用 servlet是java编写的服务器端的程序 运行在web服务器中 作用 接收用户端发来的请求 调用其他java程序来处理请求 将处理结果 返回到服务器中 servlet的生
  • Cannot forward after response has been committed问题解决及分析

    通过TOMCAT把系统启动 可以正常登陆门户 登陆进去选择子系统的时候点击登陆的时候 可是去又回到了登陆界面 如此反复就是不能够进入子系统 查看后台报的错误 Cannot forward after response has been co
  • 【往届均已检索】2023年控制理论与应用国际会议(ICoCTA 2023)

    往届均已检索 2023年控制理论与应用国际会议 ICoCTA 2023 重要信息 会议网址 www icocta org 会议时间 2023年10月20 22日 召开地点 福建 厦门 截稿时间 2023年8月30日 录用通知 投稿后2周内
  • 基于微信小程序的短视频管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端框架 VUE 数据库 MySQL5 7 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Maven项目 是 目录 一 项目简介 二
  • Filter过滤器实现权限拦截

    一 要求 用户登陆之后才能进入主页 用户注销之后不能进入首页 二 思路 用户登陆之后 向session中放入用户的数据 进入主页的时候要判断用户是否已经登陆 在过滤器中实现 public void doFilter ServletReque
  • 编写程序: 从键盘分别输入年、月、日,判断这一天是当年的第几天

    编写程序 从键盘分别输入年 月 日 判断这一天是当年的第几天 注 判断一年是否是闰年的标准 1 可以被4整除 但不可被100整除或 2 可以被400整除 import java util Scanner public class Test
  • Servlet+JDBC实战开发书店项目讲解第五篇:购物车实现

    Servlet JDBC实战开发书店项目讲解第五篇 购物车实现 引言 在之前的几篇博客中 我们讲解了如何使用Servlet和JDBC开发一个简单的书店管理系统 在本文中 我们将深入探讨购物车的实现 这是一个关键功能 允许用户将所需图书添加到
  • Java代码判断当前操作系统是Windows或Linux或MacOS

    package com magic system public class SystemUtils 判断操作系统是否是 Windows return true 操作系统是 Windows false 其它操作系统 public static
  • bean的有效范围和生命周期(scope)

    scope 的取值范围给出了bean的生命周期 存活时间 即scope 取值决定了Tomcat服务器分配给用户的 bean 的有效范围和生命周期 因此需要理解 scope取值的具体意义 下面就JSP动作标记useBean 中scope取值的
  • Qt小项目2 图片查看器

    头文件 ifndef WIDGET H define WIDGET H include
  • c3p0数据库连接池死锁问题和mysql重连,连接丢失

    c3p0参数解释 最常用配置 initialPoolSize 连接池初始化时创建的连接数 default 3 取值应在minPoolSize与maxPoolSize之间 c3p0 initialPoolSize 10 minPoolSize
  • JAVA WEB 中间件为SERVLET(四)

    写一个用户登录部署到tomcat 本地 先找到一个模板 HTML代码复制到本地的项目index jsp中 这个登录模板包含一个JSP 一个JS 三个CSS等文件 这个是index jsp代码
  • 数学建模——论文排版

    目录 一 参考文献的排版 1 三种方案 通常使用方案一 方案一有两种方法 2 参考文献排版要点总结 二 附录的排版 具体方法 补充 代码高亮 三 表格标题自动编号 进阶做法 四 公式编辑软件的介绍 1 LaTeX 较难 有时间可学 2 wo
  • java毕业设计

    包含部署视频 1 基于ssh的婴幼儿产品销售系统毕业设计 项目报告 答辩PPT 源代码 数据库 截图 部署视频 2 基于jsp的医院管理住院系统毕业设计 项目报告 答辩PPT 源代码 数据库 部署视频 3 基于ssh的医院在线挂号系统毕业设

随机推荐

  • MySQL事务

    xff08 1 xff09 概念 xff1a 一个包含多个步骤业务操作 xff0c 被事务管理 xff0c 这些操作具有统一性 xff08 要么成功 xff0c 要么失败 xff09 操作开启事务 xff08 start transacti
  • 软件产品化

    1 产品化定义 xff1a 软件产品化是指客户无需为软件添加或调整代码和语句即能完成软件的安装配置 应用初始化 系统管理 用户使用的全过程 xff0c 并且软件至少能满足80 以上的用户某一组应用需求 微软Office或杀毒软件就是产品化软
  • MySQL忘记root密码

    1 cmd gt net stop mysql 停止mysql服务 需要管理员运行该cmd 2 使用无验证方式启动mysql服务 xff1a mysqld skip grant tables 3 打开新的cmd窗口 直接输入mysql命令
  • 对象转型

    一 对象转型介绍 对象转型分为两种 xff1a 一种叫向上转型 父类对象的引用或者叫基类对象的引用指向子类对象 xff0c 这就是向上转型 xff0c 另一种叫向下转型 转型的意思是 xff1a 如把float类型转成int类型 xff0c
  • 获取文件的真实(服务器)路径

  • jQuery选择器

    1 基本选择器 标签选择器 xff08 元素选择器 xff09 xff0c 语法 xff1a 34 html标签名 34 id选择器 xff0c 语法 xff1a 34 id的属性值 34 类选择器 xff0c 语法 xff1a 34 cl
  • MySQL8:Unknown initial character set index ‘255‘ received from server. Initial client character 解决方法

    Unknown initial character set index 39 255 39 received from server Initial client character set can be forced via the 39
  • mybatis延迟加载

    1 什么是延迟加载 在使用时候才加载数据 xff0c 不用的时候不加载 2 关联对象是1时 xff0c 采用立即加载 xff1b 关联对象是多是 xff0c 采用延迟加载 3 一对一 xff08 一对多 xff09 延迟加载步骤及配置 xf
  • springmvc拦截器

    一 springmvc拦截器只有springmvc有 xff0c Servlet的拦截器可以适用任何web项目 二 步骤 1 编写拦截器类 xff0c 实现 HandlerInterceptor 接口 xff1b 配置拦截器 2 案例 pu
  • SSM整合

    一 spring整合springmvc mybatis 二 配置文件 43 注解 1 创建相应的类 xff1a dao controller domain service service impl 2 首先配置spring xff0c 使用
  • Maven 骨架创建 Java Web 项目

    Maven 骨架创建 Java Web 项目 1 File gt New gt Project 2 如下图 3 xff09 如下图 GroupId和ArtifactId lt 项目名 gt 还有Version xff0c 这三个属性目的是标
  • IntelliJ IDEA集成maven

    一 idea中maven的配置 1 maven配置 首先需要在idea中对maven进行集成 xff0c 目录为File Setting Build Execution Deployment Build Tools maven xff0c
  • 批量替换tab为空格

    利用find 找出需要替换的文件 xff0c 然后使用sed命令执行替换 如将src 路径下的所有cpp 文件的tab 替换为空格的命令如下 sed span class hljs attribute i span span class h
  • idea工具集成配置maven最详细的

    IDEA 全称 IntelliJ IDEA xff0c 是java语言开发的集成环境 xff0c IntelliJ在业界被公认为最好的Java开发工具之一 IDEA是JetBrains公司的产品 现在有逐步取代老牌Java开发工具Eclip
  • Maven的安装与配置

    一 安装本地Maven tips 官网为外网 xff0c 下载速度较慢 xff0c 这里提供3 6 3版本的三方链接下载Maven下载 无视下载速度以及需要其他版本的伙伴点此进入Maven官网下载 选择左侧Download 点击箭头所指的链
  • Maven骨架

    Maven骨架 Maven骨架简单的来说就是一种模型 结构 xff0c Maven根据我们的不同的项目和需求 xff0c 提供了不同的模型 xff0c 这样就不需要我们自己建模型了 举个简单的例子 xff1a 就比如我们要做一套普通的楼房
  • 实现分页功能

    可以先看这个 xff08 1 xff09 https www baidu com link url 61 1O13jXHEC3F2wEP5jCw0KQZCsjW4S7LFdruGJxbJO7G8dkAFgLA2sNKe48F5vOjmP8G
  • jsp中select数据回显

    xff08 1 xff09 https blog csdn net qq 23190729 article details 76774801 utm medium 61 distribute pc relevant none task bl
  • 简单的jsp插入多条数据

    lt 64 page import 61 34 java sql Connection 34 gt lt 64 page import 61 34 java sql Statement 34 gt lt 64 page import 61
  • Servlet数据库连接池

    使用连接池连接数据库 首先在一下apache中的conf文件夹中的context xml文件添加下面这段配置信息 lt Resource name 61 34 jdbc message 34 auth 61 34 Container 34