3

在我的 Web 应用程序中,我想在它的所有“页面”中包含某些必要的东西,例如与数据库的连接、用户信息、模板处理等。直到最近我才会有一个抽象的 servlet 来初始化所有在其doGetordoPost方法中,定义抽象方法doLocalLogic(HttpServletRequest req, HttpServletResponse res)并从doGet/doPost方法中调用它。所有扩展类都将享受数据库连接、用户信息等。不幸的是,结果证明这是不好的做法。

我现在想的是创建一个抽象类来完成所有这些工作,来自我的 servlet 的所有逻辑都将转移到这个类的子级,而 servlet 只会创建这些子级的实例。

但是,这导致我的应用程序中的每个页面都创建了一个类。此外,当您创建一个新的 servlet 时,您没有任何需要重写的抽象方法形式的线索,就像您拥有一个抽象 servlet 一样。

有更好的方法吗?

4

2 回答 2

2

首先,我认为doLocalLogic()只要您通过参数而不是通过字段(线程在请求​​/线程之间共享线程)传递此本地逻辑,您的方法就不错:

public void doLocalLogic(
  Connection connection,
  UserInformation user,
  //...
  HttpServletRequest req,
  HttpServletResponse res
)

唯一的问题是您确实准备了大量数据,即使您在 servlet 中不需要它们。而且它不可扩展。

你真正需要的是一个更健壮的...框架。首先,您可能需要一个 Web 框架来避免直接对 servlet API 进行编码。其次,您需要像 Spring 这样的 IoC 来管理您的依赖项。而不是急切地创建它们并传递,每个服务只要求所需的依赖关系。

于 2012-11-17T19:04:15.657 回答
1

我会推荐使用spring-mvc
之类 的框架,该框架将允许您在 Web 应用程序中实现MVC
据我所知,它可以让您在整个请求流中传递应用程序上下文,
甚至可以在不同的页面之间传递它 handlign ;
并且当然会让您将大部分逻辑与 Servlet 类分开。

于 2012-11-17T19:11:53.717 回答