美国上市公司,专注Java培训21年

servlet中数据库连接池的使用!


我们知道jdbc的性能开销很大部分是浪费在频繁connection的建立与销毁,于是我就想到了能不能把前面学到的数据库连接池与servlet配合使用呢?有想法就会有尝试,通过不断的查资料,了解更加详细的servlet生命周期,我摸索出了使用方法,与大家分享一下。

一、介绍一下servlet里几个可以绑定对象的对象

①servletContext : 这个对象是从web服务器(工程)开启就存在,直到web服务器关闭才销毁。一般用来保存全局的重要资源,保证每个servlet创建之初就可以访问到。

② Session : 这个对象是从用户连接servlet服务器开始就存在,保存着客户机访问服务器的一些信息,方便服务器实现对客户机的数据追踪。客户机明确断开连接或者服务器超时就销毁,服务器默认是30分钟,这个时间可以调整。

③ServletConfig:这个对象从servlet开启就存在,一直到servlet结束就销毁,用来保存当前servlet的配置信息。

④request: 这个对象从一次请求的开始到完成请求就销毁,这个用的最多,我也不废话了,这个对象在内存存在的时间最短。别问我为什么,越频繁创建销毁的对象服务器就越不会让你活的长久。

二、载体的选择

上述几个对象都具有绑定对象实现共享的作用(setAttribute(String name,Object obj)),但是根据生命周期的不同、资源消耗来选择不同的载体。

比如,我们实现转发的时候用request就够用了,因为我们转发一次往往就会完成对绑定对象的使用,等我们当前servlet使用结束的时候会自动销毁掉这个request与绑定在上面的对象,不必操心资源消耗的问题。

比如,context与session都可以实现计算用户访问服务器的次数,但是为了尽可能的减少资源的消耗,我们不会把计数器绑定在context对象上。

那么,我们回到数据库连接池的问题上,数据库连接池也是个对象,我们要绑在哪里呢?这也不会固定的,一般而言,为了保证整个工程都能用到一个数据库连接池,我们绑在servletContet对象上。

三、连接池的绑定

我们先建一个DBUtil类,里面建一个连接池,然后写两个静态方法getconnection与delete方法,这里我就不贴代码了,不会的同学可以去学校代码网站JSDCode/jsd1504/Teaching/06_jdbc/day02/去下载DBUtil的源码。

然后我们建一个servlet类继承HttpServlet抽象类,重写里面的init()方法,记住要重写无参数的那个,不是有参数的那个。

接着在init方法中用this.getServletContext方法获取ServletContext对象“sc”。然后通过sc.setAttribute("DBUtil",new DBUtil())来绑定连接池对象到ServletContext对象。

<font size="4">@Override
        public void init() throws ServletException {
                this.getServletContext().setAttribute("DBUtil", new DBUtil());
                
        }</font>

最后,为了能让工程在开始的时候我们就能把连接池对象就创建出来,我们给这个servlet的增加标签(xml配置文件里),这里不会的就去程祖红老师的servlet&jsp部分day04查看笔记。

四、连接池的使用

在需要connection的地方,一般是DAO里,DAO部分是封装的数据库访问。DAO操纵数据库的部分范传奇老师与程祖红老师的代码里都有,不会的去下载。这里我也不多说废话了。需要说明的是,如何获取保存在Servletcontext对象里的DBUtil对象。

<font size="4">this.getServletContext().getAttribute("DBUtil");</font>
至此,我们已经完成了连接池的调度。 

五、后续说明

数据库连接池并不是什么高大上的东西,就是人为的去控制数据库的连接数目,达到资源有效利用的目的。我这边其实有建立一个数据库连接池的源码,但是我不准备贴出来,有兴趣的同学可以去网上搜。所以我在附件里放了apache的几个jar包,大家只要把包拷过去就可以很方便的建立一个数据库连接池了。这是范传奇老师当时放在共享里面的。by:青岛jsd1504


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多

Java开班时间

收起