我们已经获得了带有直接进行JDBC调用的servlet的webapps。我们大多用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调用。但是,这感觉不对。
谢谢!
保
答案 0 :(得分:1)
我会研究SpringMVC,并使用Spring Controller而不是直接使用java servlets。
这很容易使用。您可以创建一个简单的web.xml部署描述符,以使端点调用Springs DispatcherServlet。完成此操作后,您可以创建一个控制器类,将这些端点映射到控制器中的方法。您的控制器可以定义为applicationContext的一部分,因此可以注入其DAO(或其他服务)。
答案 1 :(得分:0)
您需要使用MVC框架(最受欢迎的是Struts 1.x,Struts 2和Spring MVC),您将能够从控制器(在Struts框架中称为“操作”)中调用您的daos。
以下是有价值的资源:http://www.ibm.com/developerworks/java/library/j-sr2/index.html
如果您没有太多可重复使用的业务逻辑,我不确定您是否需要服务。