数据库连接池,过滤器和监听器
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文件:
-
private static DataSource dataSource;
-
-
static {
-
try {
-
InputStream is = BaseDAO.class.getClassLoader().getResourceAsStream("/db.properties");
-
Properties properties = new Properties();
-
properties.load(is);
-
dataSource = DruidDataSourceFactory.createDataSource(properties);
-
} catch (IOException e) {
-
e.printStackTrace();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
-
}
-
-
public static Connection getCollection(){
-
Connection con = null;
-
try {
-
con = dataSource.getConnection();
-
} catch (SQLException e) {
-
e.printStackTrace();
-
}
-
return con;
-
}
2.过滤器
概念:对目标资源的请求和响应进行拦截/过滤,过滤器是javaweb的三大组件,这三大组件分别为servlet、filter(过滤器)、listener(监听器)。过滤器就像是生活中的过滤嘴。
作用:一般用于完成通过的操作。如:登录过滤,编码处理,敏感字符过滤等。
实现步骤:
1. 实现接口Filter 重写方法 1. chain.doFilter(req,resp);放行方法 2. 配置访问拦截路径 注解配置
web.xml注解
-
<filter>
-
<filter-name>MyFilter1</filter-name>
-
<filter-class>com.filter.MyFilter1</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>MyFilter1</filter-name>
-
<!--*:过滤访问当前项目的所有请求-->
-
<url-pattern>/*</url-pattern>
-
</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.上下文监听器
-
//@WebListener
-
public class ApplicationListener implements ServletContextListener {
-
-
-
public void contextInitialized(ServletContextEvent sce) {
-
System.out.println("监听到了网站启动");
-
}
-
-
-
public void contextDestroyed(ServletContextEvent sce) {
-
System.out.println("监听到了网站销毁");
-
}
-
}
2.session监听
-
//@WebListener
-
public class SessionListener implements HttpSessionListener {
-
-
-
public void sessionCreated(HttpSessionEvent se) {
-
System.out.println("sessionListener监听到session创建了" se.getSession().getId());
-
}
-
-
-
public void sessionDestroyed(HttpSessionEvent se) {
-
System.out.println("sessionListener监听到了session销毁了" se.getSession().getId());
-
}
-
}
3.session中属性监听
-
//@WebListener
-
public class SessionAttributeListener implements HttpSessionAttributeListener {
-
-
-
public void attributeAdded(HttpSessionBindingEvent se) {
-
System.out.println("监听到了添加属性" se.getName() " " se.getValue());
-
}
-
-
-
public void attributeRemoved(HttpSessionBindingEvent se) {
-
System.out.println("监听到了删除属性" se.getName() " " se.getValue());
-
-
}
-
-
-
public void attributeReplaced(HttpSessionBindingEvent se) {
-
-
}
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgkjaef
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13