从 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、Struts 2 和 Spring MVC),并且您将能够从控制器中调用 daos(在 Struts 框架中称为“Actions”) .
这是一个有价值的资源:@987654321@
如果您没有太多可重用的业务逻辑,我不确定您是否需要服务。
【讨论】:
以上是关于从 Servlet 和 JDBC 迁移到 DAO 和 Spring,建议?的主要内容,如果未能解决你的问题,请参考以下文章
带有 JDBC 的 JSF 项目,我无法在 Servlet 上调用 DAO [重复]
将 Arraylist 从 Servlet 返回到 DAO,然后返回到 Servlet,然后返回到 Jsp
在 servlet mvc 中创建 jdbc 连接哪个更好?