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

标签 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 

并提出为该 servlet 创建方法 addCar,但这不可能是正确的。该 addCar 方法必须位于 DAO 类中(位于数据库文件夹中)。

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

最佳答案

错误消息表明它正在 MainServlet 类上查找名为 addCar 的方法(当然没有找到)。

您需要指定在哪里查找 addCar 方法。 servlet 需要引用 DAO 对象,并且 servlet 代码需要调用 DAO 对象上的方法。

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

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

并从 doPost 方法调用 addCar:

dao.addCar(newCar);

关于java - 将一个 servlet 类拆分为 servlet 和 DAO 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21337549/

相关文章:

java - 检查值是否没有数字,如果是,则用简写 Java 替换为 'Invalid'

java - 我的信号量应用程序出了什么问题?

java - 我如何打印这个?

java - 结果集 If Null 语句

java - 标签liferay-ui :include is missing on liferay 6. 2

java - 服务器启动的监听器和所有 spring bean 完全加载

macos - 适用于 Mac/Windows 的 Java 7 安装程序

javascript - html5 下载属性在 FF 中不起作用

java - getParameter 对于 post 和 get 操作的行为是什么?

java - 不使用 cookie 访问 URL 参数