监听器的使用与案例

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.测试成功!!!

监听器的使用与案例 - lishirong - The CTO of LiShirong
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值