1、流程简述
1)上下文初始化时得到通知(Web应用部署时)。
a)从ServletContext中得到上下文初始化参数(配置在web.xml中)。
b)使用初始化参数创建一个新的数据库连接。
c)把数据库连接作为属性保持到ServletContext上下文中,使得整个Web应用的各个部分都能访问。
2)上下文撤消时得到通知(Web应用取消部署或结束时)
a)关闭数据库连接
2、需要用到web.xml文件及四个类
1)web.xml:部署描述符,配置Web应用上下文初始化参数(数据库连接信息)以及监听器。
2)MyServletContextListener类:监听器类,用于监听上下文初始化及销毁事件。
3)DBConnConfig:数据库配置对象,用于封装数据库连接所需的数据。
4)DBMangerUtil:数据库连接工具类,用于获取和关闭数据库连接。
5)DBConnServletTest:测试类,在Servlet中测试能否获取保存在ServletContext中的数据库连接对象。
3、实例代码
1)web.xml配置如下:
<!-- 数据库连接初始化参数 --> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/student</param-value> </context-param> <context-param> <param-name>username</param-name> <param-value>admin</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>mysqladmin</param-value> </context-param> <!-- ServletContext监听器 --> <listener> <listener-class>com.linwei.listener.MyServletContextListener</listener-class> </listener>
2)MyServletContextListener类:监听器类
package com.linwei.listener; import java.sql.Connection; import java.sql.SQLException; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.linwei.model.DBConnConfig; import com.linwei.util.DBMangerUtil; /** * @author Linwei * 监听器保证每新生成一个servletContext都会有一个可用的数据库连接, * 并且所有的连接会在context销毁的时候随之关闭。 */ public class MyServletContextListener implements ServletContextListener { Connection conn=null; //上下文初始化 public void contextInitialized(ServletContextEvent event) { try { //使用数据库配置对象初始化数据库连接工具类 DBConnConfig dbConfig = getDBConnConfig(event); if(dbConfig!= null){ DBMangerUtil.initDBMangerUtil(dbConfig); } // 创建数据库连接 conn = DBMangerUtil.getConncection(); //将连接保存到ServletContext上下文中 event.getServletContext().setAttribute("dbconn", conn); } catch (SQLException e) { e.printStackTrace(); } } //上下文销毁 public void contextDestroyed(ServletContextEvent event) { try { // 关闭数据库连接 DBMangerUtil.close(); } catch (SQLException e) { e.printStackTrace(); } } //读取Web.xml中数据库初始化参数,然后实例化并返回数据库配置对象 private DBConnConfig getDBConnConfig(ServletContextEvent event){ //使用获取Web应用上下文初始化参数 ServletContext ctx = event.getServletContext(); String driver = ctx.getInitParameter("driver"); String url = ctx.getInitParameter("url"); String username = ctx.getInitParameter("username"); String password = ctx.getInitParameter("password"); DBConnConfig dbConfig=null; dbConfig = new DBConnConfig(driver, url, username, password); return dbConfig; } }
3)DBConnConfig类:数据库配置对象
package com.linwei.model; public class DBConnConfig { public String driver; public String url; public String username; public String password; public DBConnConfig(String driver, String url, String username, String password) { super(); this.driver = driver; this.url = url; this.username = username; this.password = password; } //getter()和setter() }
4)DBMangerUtil类:数据库连接工具类
package com.linwei.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import com.linwei.model.DBConnConfig; public class DBMangerUtil { public static String driver = ""; public static String url = ""; public static String username = ""; public static String password = ""; public static Connection conn = null; // 初始化DBMangerUtil的实例变量 public static void initDBMangerUtil(DBConnConfig dbConfig) { DBMangerUtil.driver = dbConfig.getDriver(); DBMangerUtil.url = dbConfig.getUrl(); DBMangerUtil.username = dbConfig.getUsername(); DBMangerUtil.password = dbConfig.getPassword(); } // 获取连接 public static Connection getConncection() throws SQLException { try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } conn = DriverManager.getConnection(url, username, password); return conn; } // 关闭连接 public static void close() throws SQLException { if (conn != null) { conn.close(); } } }
5)DBConnServletTest类:测试类
package com.linwei.servlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DBConnServletTest extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); //获取ServletContext上下文中保存连接对象 Connection dBconn=(Connection) getServletContext().getAttribute("dbconn"); PrintWriter out=response.getWriter(); out.println(dBconn.toString()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
相关推荐
数据库连接池,又称为数据源,是管理和复用数据库连接的一种机制,可以有效地提高应用处理数据库请求的效率,避免频繁地创建和关闭数据库连接。 本资源包含对JNDI数据库连接池的详细讲解,以及监听器的代码实例和...
这意味着,我们可以在这个方法中执行一些清理操作,例如关闭数据库连接,释放资源等。 下面通过两个具体的例子来介绍 ServletContextListener 的用法。 例一:在服务启动时,将数据库中的数据加载进内存,并将其...
在Java Web开发中,`ServletContextListener`是一个非常重要的接口,它是Servlet API的一部分,定义了两个方法:`contextInitialized`和`contextDestroyed`。这个接口的主要作用是监听Servlet上下文(`...
例如,使用连接池(如C3P0或HikariCP)可以更高效地管理和复用数据库连接,提高应用性能。此外,了解SQL优化、安全性最佳实践等也是十分重要的。 总结来说,JSP连接数据库是Web应用开发的基础技能,通过JDBC API和...
这可能包括在`ServletContextListener`中创建数据库连接池,或者在应用程序启动时执行初始化脚本。 **源码分析** 标签中的“源码”意味着可能有关于实际代码实现的详细信息。在博文链接中,你可能会找到如何配置和...
- `ServletContextListener`: 监听ServletContext的创建与销毁,通常用于初始化和清理资源,如数据库连接池的初始化和关闭。 - `HttpSessionListener`: 监听HttpSession的创建和销毁,可以用于统计在线用户数量、...
要创建一个监听器,你需要编写一个类,实现`ServletContextListener`接口,并重写它的两个方法:`contextInitialized(ServletContextEvent sce)`和`contextDestroyed(ServletContextEvent sce)`。前者在Web应用启动...
在第20天的课程中,你将学习到如何加载和注册JDBC驱动,创建数据库连接,执行查询、更新和删除操作,以及关闭数据库连接。此外,还会讲解如何使用PreparedStatement避免SQL注入攻击,提高代码的可读性和安全性。 接...
3. **数据库连接池监听器**: 在数据库管理中,像C3P0或HikariCP这样的连接池库提供了连接创建和销毁的监听机制,帮助开发者监控和管理数据库连接资源。 4. **网络监听器**: 网络监听器通常用于监听网络连接和数据...
`ServletContextListener`是Java Servlet API中定义的一个接口,用于监听Web应用上下文(`ServletContext`)的创建和销毁事件。通过实现这个接口,开发者可以定义在应用启动和关闭时需要执行的操作。 ##### 2.1 ...
1. ServletContextListener: 这个监听器在Web应用启动时被调用,用于初始化一些全局资源,比如数据库连接池。当Web应用关闭时,它也会被调用来进行清理工作。 2. HttpSessionListener: 这个接口允许开发者监听HTTP...
Java Web程序设计是开发互联网应用程序...每一个章节的源码都是一个独立的学习单元,可以帮助你逐步建立起完整的Java Web开发技能树。在实际练习中,遇到问题时,可以参考源码中的实现,加深理解,提升解决问题的能力。
- 在Web应用启动时进行全局资源初始化,如加载配置文件、数据库连接池等。 总的来说,Servlet监听器是Java Web开发中不可或缺的一部分,它们扩展了Web应用的功能,使开发者能更灵活地管理和响应Web应用中的各种事件...
【宿舍管理系统】是一个基于Web的项目,主要使用Java技术栈中的JSP(JavaServer Pages)和Servlet进行开发,遵循经典的MVC(Model-View-Controller)设计模式。在这个系统中,用户可以进行登录、注册、浏览主界面...
- 配置Hibernate:创建hibernate.cfg.xml文件,配置数据库连接信息,以及实体类和表的映射文件。 - 实体类:定义Java类,用注解或XML文件描述其与数据库表的关系。 - 映射文件:在.hbm.xml文件中,详细定义实体类...
5. `destroy()`: 当Servlet不再需要时,容器调用此方法释放资源,如关闭数据库连接。 **ServletConfig接口** `ServletConfig`接口提供了Servlet的配置信息,包括: 1. `getServletName()`: 返回Servlet的唯一名称...
1. **ServletContextListener**:当Web应用启动时,Servlet容器会调用`contextInitialized`方法,这通常用于初始化全局资源,如数据库连接池、设置全局属性等。而在Web应用关闭时,`contextDestroyed`方法会被调用,...
- **资源初始化**:如数据库连接池的初始化和关闭。 - **日志记录**:跟踪应用程序的生命周期事件。 - **缓存管理**:监控和管理应用程序的缓存数据。 - **性能统计**:收集应用程序的运行时信息,如请求次数、响应...
6. **监听器Listener**:可以添加ServletContextListener来监听整个Web应用的生命周期,例如在应用启动时初始化MyBatis的SqlSessionFactory,关闭时关闭连接池等。还可以使用HttpSessionListener来监听用户的会话...