建议从servlet和JDBC迁移到DAOs和Spring?

建议从servlet和JDBC迁移到DAOs和Spring?,spring,servlets,jdbc,dao,Spring,Servlets,Jdbc,Dao,我们有一些带有servlet的webapps,可以直接调用JDBC。我们已经用SpringJDBC替换了JDBC调用,这是一个巨大的改进(不再有泄漏的连接!) 我想进一步处理这些乱七八糟的代码并使用DAO。但是,我不知道如何在混合中使用servlet,因为我知道servlet不能@autowired 例如,现在我有一个界面: public interface AdminDao { public boolean isAdmin(int id); } 和一个实现 package myapp.d

我们有一些带有servlet的webapps,可以直接调用JDBC。我们已经用SpringJDBC替换了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调用。然而,这感觉不对

谢谢


Paul

我会研究SpringMVC,使用Spring控制器而不是直接使用java servlet


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

您需要使用MVC框架(最流行的是Struts 1.x、Struts 2和Spring MVC),并且您可以从控制器中调用DAO(在Struts框架中称为“操作”)

以下是关于这方面的宝贵资源:


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

目前我们有许多servlet,所有前端代码都调用这些servlet。从那到SpringMVC需要付出巨大的努力吗?或者你是说我将servlet的位置映射到控制器中的方法,然后这些方法将处理servlet正在处理的任何事情?这将非常简单。您可以通过在web.xml中定义将所有请求映射到同一个servlet(Spring的DispatcherServlet)来实现这一点,servlet将所有请求定向到您定义的控制器。从控制器中,您可以指定由其上的注释为指定的路径和http请求方法调用的方法。