从 Servlet 和 JDBC 迁移到 DAO 和 Spring,建议?

Posted

技术标签:

【中文标题】从 Servlet 和 JDBC 迁移到 DAO 和 Spring,建议?【英文标题】:Migrating to DAOs and Spring from Servlets and JDBC, advice? 【发布时间】:2011-08-09 01:19:44 【问题描述】:

我们有带有 servlet 的 webapps,可以直接调用 JDBC。我们大部分都用 Spring JDBC 替换了 JDBC 调用,这是一个巨大的改进(不再有泄漏的连接!)。

我想进一步处理这些乱七八糟的代码并使用 DAO。但是,我不确定如何使用混合中的 servlet 来执行此操作,因为我知道 servlet 不能是 @autowired。

例如,现在我有一个界面:

public interface AdminDao

  public boolean isAdmin(int id);

和一个实现

package myapp.dao.impl;

@Repository
public class AdminDaoSpring extends SimpleJdbcDaoSupport implements AdminDao

  private static final String _isAdminSql 
    = "SELECT count(*) from admin WHERE id=?";

  public boolean isAdmin(int id);
  
    int cnt = getSimpleJdbcTemplate().queryForInt(_isAdminSql, id);
    return (cnt > 0);
  

在我的 applicationContext.xml 中有

<bean id="adminDao" class="myapp.dao.impl.AdminDaoSpring"></bean>

我有一个 servlet,AdminCheckServlet,它当前可以进行上述查询。如何更改它以使用 adminDao 实例?我无法使用 @Service 注释 servlet,因为 DAO 不会被注入,因为 servlet 是由容器(Tomcat)而不是 Spring 构造的。

我是否应该创建另一个类 AdminService,并让它使用 AdminDao 处理所有调用?影响 Admin 表的 servlet 将全部实例化 AdminService 并使用它而不是直接 JDBC 调用。然而,这感觉不对。

谢谢!

保罗

【问题讨论】:

【参考方案1】:

我会研究 SpringMVC,并使用 Spring Controller 而不是直接使用 java servlet。

Spring MVC

它很容易使用。您创建一个简单的 web.xml 部署描述符,让您的端点调用 Springs DispatcherServlet。完成此操作后,您可以创建一个控制器类来将这些端点映射到控制器中的方法。您的控制器可以定义为 applicationContext 的一部分,因此可以注入其 DAO(或其他服务)。

【讨论】:

目前我们有很多servlet,所有的前端代码都会调用这些servlet。从那个到 Spring MVC 需要付出巨大的努力吗?或者您是说我将 servlet 的位置映射到控制器中的方法,然后由控制器处理 servlet 正在处理的任何事情? 这很简单。您可以通过在 web.xml 中定义将所有请求映射到同一个 servlet(Spring 的 DispatcherServlet)来做到这一点,并且 servlet 会将所有请求定向到您定义的控制器。在控制器中,您可以指定哪个方法被指定的路径和 http 请求方法的注释调用。【参考方案2】:

您需要使用 MVC 框架(最流行的是 Struts 1.x、St​​ruts 2 和 Spring MVC),并且您将能够从控制器中调用 daos(在 Struts 框架中称为“Actions”) .

这是一个有价值的资源:@​​987654321@

如果您没有太多可重用的业务逻辑,我不确定您是否需要服务。

【讨论】:

以上是关于从 Servlet 和 JDBC 迁移到 DAO 和 Spring,建议?的主要内容,如果未能解决你的问题,请参考以下文章

带有 JDBC 的 JSF 项目,我无法在 Servlet 上调用 DAO [重复]

将 Arraylist 从 Servlet 返回到 DAO,然后返回到 Servlet,然后返回到 Jsp

在 servlet mvc 中创建 jdbc 连接哪个更好?

JavaWeb数据库应用开发基础

传递 jdbc 数据源与传递 Connection 对象 - 从 servlet 到 java 类

在 Servlet 和 JDBC 中为 JUnit 分离 H2 数据库 [关闭]