将一个servlet类拆分为servlet和DAO类

时间:2014-01-24 16:24:46

标签: java jsp servlets

我从JSP请求信息并通过Java Servlet将它们放到数据库中。我有这种(简化的)Java Servlet。

protected void doPost(//parameters etc.){

String brand = request.getParameter("brand");
String model = request.getParameter("model");
CarBean newCar = new CarBean(brand, model);

try {
          Connection con = ConnectionFactory.getInstance().getConnection();
          PreparedStatement ps = con.prepareStatement("INSERT INTO Cars (brand, model)"
          + "VALUES (?, ?)";              
          ps.setString(1, newCar.getBrand());
          ps.setString(2, newCar.getModel());
          ps.executeUpdate();
          ps.close();
} catch ... {
}

一切正常,但现在我想把这个数据库连接分开到它自己的类。我想做一个只有三种方法(添加,删除,编辑)的数据库。

我可以在一个不同包中的类中以某种方式使用newCar对象作为参数吗?我已经这样做了,但这不起作用。

public class DAO{

public void addCar(CarBean newCar) throws ServletException {
 try {
         Connection con = ConnectionFactory.getInstance().getConnection();
         PreparedStatement ps = con.prepareStatement("INSERT INTO Cars (brand, model)"
         + "VALUES (?, ?)";
         ps.setString(1, newCar.getBrand());
         ps.setString(2, newCar.getModel());
         ps.executeUpdate();
         ps.close();
} catch (SQLException e) {
            throw new ServletException(e);
}

...
public void deleteCar ...
public void editCar ...

然后我就像这样从Servlet调用addCar:

protected void doPost(//parameters etc.){

String brand = request.getParameter("brand");
String model = request.getParameter("model");
CarBean newCar = new CarBean(brand, model);
addCar(newCar);

这是说

cannot find symbol, symbol: method addCar(CarBean), location: class MainServlet 

并提供将方法addCar添加到此servlet,但这不可能是正确的。 addCar方法必须在DAO类中(在Database文件夹中)。

我不知道这是否令人困惑?如何将正在进行数据传输的try-catch移动到另一个类?

1 个答案:

答案 0 :(得分:1)

错误消息说它正在MainServlet类中寻找一个名为addCar的方法(当然它没有找到它)。

您需要指定addCar方法的位置。 servlet需要引用DAO对象,servlet代码需要调用DAO对象上的方法。

假设这个DAO没有状态,你可以在servlet中为它创建一个实例变量,如:

private Database.DAO dao = new Database.DAO();

并从doPost方法调用addCar:

dao.addCar(newCar);