Spring Service Bean 作为 Servlet
Posted
技术标签:
【中文标题】Spring Service Bean 作为 Servlet【英文标题】:Spring Service Bean as Servlet 【发布时间】:2012-04-10 20:26:32 【问题描述】:我的应用程序中有以下架构。
客户端(GWT) Servlet Service Dao
我想让这个架构更容易改变。 例如:当我想从 Dao 层返回一个对象的插入 id 时,因为我在客户端需要它,所以我必须更新服务和 servlet 层。因此,对于这个小改动,我必须更新所有 3 层(3 个类和 3 个接口),在 6 个地方进行更改。 我明白为什么我需要道层了。 我也明白为什么我需要服务层。 我不明白为什么服务层也不能是 servlet。目前我所有的 servlet 所做的就是将请求转发到服务层。
关于 Java Servlets 的***文章说:
Servlet 最常用于 1 处理或存储从 html 表单提交的数据 2 提供动态内容,例如数据库查询的结果 3 管理无状态HTTP协议中不存在的状态信息
1 和 2 只是数据库调用,我在我的 dao 层中进行,而服务层使额外的业务逻辑成为可能。 3 我目前没有使用会话。到目前为止,我还没有登录,我只是在玩弄我的架构,但我认为服务层也可以处理这个问题。
我想知道这种架构更改的优点和优点:
优点:
如果发生更改,需要更新的层数会减少。缺点
服务层变得更加复杂。感谢您的回答。
【问题讨论】:
【参考方案1】:您需要 servlet 层,因为它允许访问会话。
此外,您不希望您的服务层需要了解有关 HTTP 的任何信息,因为您希望能够在其他应用程序中重用服务和 DAO 层(例如,如果您编写一个桌面应用程序重用这些层)并且需要包含 servlet API 在那里没有意义。
如果需要,您可以在简单情况下直接从 servlet 调用 DAO 层,以免在服务层和 DAO 层中重复方法。
servlet API 具有过滤器,这些过滤器是在您的 Web 应用程序中实现安全性的好地方。
如果您已经在 Web 应用程序中使用 Spring 框架,则可以使用 Spring Security。
【讨论】:
我也可以在服务层上使用 Spring Security,因为它是一个 servlet 层,还是我错了? Spring security 的主要入口点实现了 servlet 规范中的过滤器,因此它建立在 servlet 层之上。它本身不是一个 servlet 层。 您还可以使用 Spring Security 注释服务层中的方法:static.springsource.org/spring-security/site/docs/3.0.x/…。您可以自己使用 AOP 或使用常规代码并在服务层中传入用户对象来完成这一切。 无论哪种方式,您仍然需要在 Web 应用程序中使用 servlet API以上是关于Spring Service Bean 作为 Servlet的主要内容,如果未能解决你的问题,请参考以下文章