建议从servlet和JDBC迁移到DAOs和Spring?
我们有一些带有servlet的webapps,可以直接调用JDBC。我们已经用SpringJDBC替换了JDBC调用,这是一个巨大的改进(不再有泄漏的连接!) 我想进一步处理这些乱七八糟的代码并使用DAO。但是,我不知道如何在混合中使用servlet,因为我知道servlet不能@autowired 例如,现在我有一个界面:建议从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
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请求方法调用的方法。