是一个数据库的工具 能够分配,管理和释放数据库连接
它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
常见数据库连接池
-
C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate [2] 一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
-
Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。
-
Jakarta DBCP:DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池。DBCP可以直接的在应用程序中使用。
-
DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。
-
Druid(德鲁伊特):
DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池)。
Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。
支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。
Druid针对Oracle和MySql做了特别优化,比如:
- Oracle的PS Cache内存占用优化
- MySql的ping检测优化
Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。
简单SQL语句用时10微秒以内,复杂SQL用时30微秒。
通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter,就是通过Druid的SQL Parser分析语义实现的
因为使用JDBC的时候每一次使用都会加载驱动和创建连接对象 关闭连接
创建连接对象和关闭连接其实是非常耗内存的
而数据库连接池中的连接可以频繁使用 连接是提前创建好放在连接池的
3、数据库连接池怎么用我们可以根据需要连接的数量提前设置好一个时间段的连接对象 以适应客户端的需求
- 先上jar包
- 设置druid.properties
注意连接的名字是提前设置好的
- 设置JDBCutil文件
注意要测试是否成功
对目标资源的请求和响应进行过滤和拦截
例如::登录验证,字符编码处理,敏感字符过滤等
共性特点:过滤的是每一次的请求和响应,意味着每一次的请求和响应一定要先走过滤器!
过滤信息处理敏感信息 ,编码处理,登录过滤等
3、过滤器的使用javaWeb三大组件:servlet (应用程序) , filter (过滤器), listener(监听器)
- 实现Filter接口
- 重写方法
- 在doFilter里面配置访问拦截路劲
注解配置
web.xml配置
- 小心web.xml的配置错误
- 过滤器的执行流程
请求和响应后都会执行过滤器 - 生命周期
和servlet生命周期一样
init():初始化
doFilter():放行方法
destroy():销毁方法 当服务器正常关闭时,执行。 - 过滤器配置
路劲配置
具体资源路劲 : /index.jsp只有访问index.jsp资源时,过滤器才会被执行
@WebFilter( value = "/index.jsp")
拦截目录: /aaa
public class MyListener implements ServletContextListener,ServletContextAttributeListener {
//监听ServletContext对象的销毁
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContexet被销毁了");
}
// 监听Servletcontext对象的创建
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("创建了ServletContext");
}
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("ServletContext新增");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("ServletContext删除");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("ServletContext修改");
}
}
Session监听
public class MySessionListener implements HttpSessionAttributeListener,HttpSessionListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("session对象增加");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session对象删除");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("session对象修改");
}
@Override//对象的创建
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session对象创建");
}
@Override//对象的销毁
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session对象的销毁");
}
}
总结
连接池 为了方便数据使用
过滤器 为了过滤交互的信息
监听器 监听信息内容



