第一步:在Servers中的content.xml文件中配置需要连接的数据源
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/mysqlDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost/bbs"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000"/>
第二步:在项目WEB-INF的Web.xml引用配置好的数据源
<resource-ref>
<!-- 引用名称 -->
<res-ref-name>jdbc/mysqlDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!--配置监听器数据连接池 -->
<listener>
<listener-class>com.bbs.listener.ContentListener</listener-class>
</listener>
<!-- 数据库连接池Servlet的配置 -->
<servlet>
<servlet-name>ContextListener</servlet-name>
<servlet-class>com.bbs.listener.ContextListener</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ContextListener</servlet-name>
<url-pattern>/ContextListener</url-pattern>
</servlet-mapping>
<!-- log4jLocation:log4j配置文件存放路径 -->
<context-param>
<param-name>log4jLocation</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param>
第三步:通过数据库连接池的监听器,获取到数据源对象,并设置的数据库连接操作的帮助类
public class ContentListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
//通过Web.xml中配置的数据库连接池获取数据源对象
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup
("java:comp/env/jdbc/mysqlDB");
//并把数据源对象设置到数据库帮助类里面进行连接的封装操作。
DBUTil.setDataSource(ds);
//这里是获取路径
ServletContext sc = arg0.getServletContext();
String path = sc.getRealPath("/");
//获取绝对路径
System.out.println(path);
File logfile = new File(path+"log");
//判断是否存在 不存在就自动创建
if(!logfile.exists()){
logfile.mkdir();
}
String log4JFile = sc.getInitParameter("log4jLocation");
//log4jLocation与xml里面的log4jLocation:log4j配置文件存放路径 是一样的
System.setProperty("logLocaltion", logfile.getAbsolutePath());
//logLocaltion这与log4j.properties里面EL表达式里面的是一样的
PropertyConfigurator.configure(path+log4JFile);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
第四步:定义数据库连接操作的帮助类,然后在需要连接数据库的地方直接调用方法即可。
public class DBUTil {
private static DataSource dataSource;
public static void setDataSource(DataSource ds){
dataSource=ds;
}
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
}
public static void closeResultSet(ResultSet rs) throws SQLException {
rs.close();
}
public static void closeStatement(PreparedStatement ps) throws SQLException {
ps.close();
}
public static void closeConnection(Connection conn) throws SQLException {
conn.close();
}
}