1.将项目启动时将要加载的数据存到一个xml文件中,此处以存数据库的连接参数为例。由于初始化的时候是将参数读取到context中,因此在web.xml中是放在<context-param></context-param>中。
<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/training</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
2.创建保存连接数据库参数的JavaBean
package bean;
public class DBParam {
private String driver;
private String url;
private String user;
private String password;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
还有一个JavaBean,它是用来保存Team信息的
package bean;
public class Team {
private int id;
private String name;
private String slogan;
private String leader;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSlogan() {
return slogan;
}
public void setSlogan(String slogan) {
this.slogan = slogan;
}
public String getLeader() {
return leader;
}
public void setLeader(String leader) {
this.leader = leader;
}
}
3.编写监听程序对ServletContext程序进行监听,在ServletContext程序创建时读取web.xml中的配置信息,并将其加入到ServletContext中。
package listener;
import bean.*;
import javax.servlet.*;
public class JDBCListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
ServletContext servletContext=event.getServletContext();
//获取ServletContext对象
//读取配置文件中的数据库连接参数
String driver=servletContext.getInitParameter("driver");
String url=servletContext.getInitParameter("url");
String user=servletContext.getInitParameter("user");
String password=servletContext.getInitParameter("password");
//创建一个DBParam对象dbParam
DBParam dbParam=new DBParam();
//把数据库连接参数设置为dbParam的属性
dbParam.setDriver(driver);
dbParam.setUrl(url);
dbParam.setUser(user);
dbParam.setPassword(password);
//把dbParam保存到servletContext里
servletContext.setAttribute("dbParam", dbParam);
}
}
4.在web.xml文件中配置监听器程序
<!--配置监听器-->
<listener>
<listener-class>listener.JDBCListener</listener-class>
</listener>
5.让数据库从ServletContext中读取Servlet中已经创建的数据库连接参数信息,创建数据库连接Connection
package database;
import bean.DBParam;
import java.sql.*;
public class DataSource {
public static Connection getConnection(DBParam dbParam)
throws Exception{
Class.forName(dbParam.getDriver());
Connection cn=DriverManager.getConnection(dbParam.getUrl(),dbParam.getUser(),dbParam.getPassword());
return cn;
}
}
6.业务类调用数据库进行业务处理
package business;
import bean.*;
import database.DataSource;
import java.sql.*;
public class TeamBusiness {
public static void addTeam(Team team,DBParam dbParam)throws Exception{
Connection cn=DataSource.getConnection(dbParam);
String sql="insert into team(name,slogan,leader) values(?,?,?)";
PreparedStatement pst=cn.prepareStatement(sql);
pst.setString(1, team.getName());
pst.setString(2, team.getSlogan());
pst.setString(3, team.getLeader());
pst.executeUpdate();
}
}
7.调用业务类进行测试
package business;
import bean.Team;
import bean.DBParam;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class test extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
Team team=new Team();
ServletContext servletContext=getServletContext();
DBParam dbParam=(DBParam)servletContext.getAttribute("dbParam");
team.setName("alibaba");
team.setSlogan("alimama");
team.setLeader("alibaby");
TeamBusiness tb=new TeamBusiness();
try{
tb.addTeam(team, dbParam);
}catch(Exception e){
e.printStackTrace();
}
}
}
8.测试成功!!!