• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数据库连接池,过滤器和监听器

武飞扬头像
利之欲
帮助1

1.数据库连接池

概念:

(1) 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

(2)常见数据库连接池

        a. C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate [2] 一起发布,包 括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对 象。

        b. Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连 接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可 以透明地为现存的JDBC驱动程序增加连接池功能。

        c. Jakarta DBCP:DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池。 DBCP可以直接的在应用程序中使用。

        d. 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做了特别优化,比如:

        i. Oracle的PS Cache内存占用优化

        ii. 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分析语义实现的。

作用:我们每一次操作数据库,都需要走创建连接,并且用过就关闭。考虑一波并发。假如现在同时有10000个人访问数据库。mysql扛不住,内存扛不住。数据库连接池就能通过时间换空间,空间换时间的方式很好的解决这个问题。

代码实现:

第一步:先导jar包,并且添加db.properties配置文件

第二步:改造BaseDAO文件:

  1.  
    private static DataSource dataSource;
  2.  
     
  3.  
    static {
  4.  
    try {
  5.  
    InputStream is = BaseDAO.class.getClassLoader().getResourceAsStream("/db.properties");
  6.  
    Properties properties = new Properties();
  7.  
    properties.load(is);
  8.  
    dataSource = DruidDataSourceFactory.createDataSource(properties);
  9.  
    } catch (IOException e) {
  10.  
    e.printStackTrace();
  11.  
    } catch (Exception e) {
  12.  
    e.printStackTrace();
  13.  
    }
  14.  
     
  15.  
    }
  16.  
     
  17.  
    public static Connection getCollection(){
  18.  
    Connection con = null;
  19.  
    try {
  20.  
    con = dataSource.getConnection();
  21.  
    } catch (SQLException e) {
  22.  
    e.printStackTrace();
  23.  
    }
  24.  
    return con;
  25.  
    }
学新通

  2.过滤器

概念:对目标资源的请求和响应进行拦截/过滤,过滤器是javaweb的三大组件,这三大组件分别为servlet、filter(过滤器)、listener(监听器)。过滤器就像是生活中的过滤嘴。

作用:一般用于完成通过的操作。如:登录过滤,编码处理,敏感字符过滤等。

实现步骤:

1. 实现接口Filter 重写方法 1. chain.doFilter(req,resp);放行方法 2. 配置访问拦截路径 注解配置

web.xml注解

  1.  
    <filter>
  2.  
    <filter-name>MyFilter1</filter-name>
  3.  
    <filter-class>com.filter.MyFilter1</filter-class>
  4.  
    </filter>
  5.  
    <filter-mapping>
  6.  
    <filter-name>MyFilter1</filter-name>
  7.  
    <!--*:过滤访问当前项目的所有请求-->
  8.  
    <url-pattern>/*</url-pattern>
  9.  
    </filter-mapping>

过滤器声明周期

1.init():初始化

2.doFilter():放行方法

3.destory():销毁方法  当服务器关闭时,执行

过滤器器过滤路径配置

i. 具体的资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行

ii. 拦截目录:/user/* 访问user目录下的所有资源时,过滤器会被执行

iii. 后缀名拦截:*.jsp / *.do 访问所有后缀名为.jsp .do时,过滤器会被执行

iv. 拦截所有资源: /* 访问所有资源时,过滤器都会被执行

3.监听器

作用:监听你的web应用,监听许多信息的初始化,销毁,增加,修改,删除值等。 Servlet 监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

监听器分类:

1.上下文监听器

  1.  
    //@WebListener
  2.  
    public class ApplicationListener implements ServletContextListener {
  3.  
     
  4.  
    @Override
  5.  
    public void contextInitialized(ServletContextEvent sce) {
  6.  
    System.out.println("监听到了网站启动");
  7.  
    }
  8.  
     
  9.  
    @Override
  10.  
    public void contextDestroyed(ServletContextEvent sce) {
  11.  
    System.out.println("监听到了网站销毁");
  12.  
    }
  13.  
    }

2.session监听

  1.  
    //@WebListener
  2.  
    public class SessionListener implements HttpSessionListener {
  3.  
     
  4.  
    @Override
  5.  
    public void sessionCreated(HttpSessionEvent se) {
  6.  
    System.out.println("sessionListener监听到session创建了" se.getSession().getId());
  7.  
    }
  8.  
     
  9.  
    @Override
  10.  
    public void sessionDestroyed(HttpSessionEvent se) {
  11.  
    System.out.println("sessionListener监听到了session销毁了" se.getSession().getId());
  12.  
    }
  13.  
    }

3.session中属性监听

  1.  
    //@WebListener
  2.  
    public class SessionAttributeListener implements HttpSessionAttributeListener {
  3.  
     
  4.  
    @Override
  5.  
    public void attributeAdded(HttpSessionBindingEvent se) {
  6.  
    System.out.println("监听到了添加属性" se.getName() " " se.getValue());
  7.  
    }
  8.  
     
  9.  
    @Override
  10.  
    public void attributeRemoved(HttpSessionBindingEvent se) {
  11.  
    System.out.println("监听到了删除属性" se.getName() " " se.getValue());
  12.  
     
  13.  
    }
  14.  
     
  15.  
    @Override
  16.  
    public void attributeReplaced(HttpSessionBindingEvent se) {
  17.  
     
  18.  
    }
  19.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkjaef
系列文章
更多 icon
同类精品
更多 icon
继续加载