2012-03-27 67 views
1

我在我的应用程序下面的架构。Spring事务的Bean作为Servlet的

客户端(GWT)< --calls - > Servlet的< --calls - >服务< --calls - >道

我想使这个架构更容易更改。 例如:当我想从DAO层返回一个对象的插入ID,因为我需要它在客户端,我必须更新服务和Servlet层为好。所以对于这个小改动,我必须更新所有3层(3个班级和3个接口),对6个地方进行更改。 我明白了为什么我需要Dao层。 我也明白为什么我需要的服务层。 我不明白的是为什么服务层也不能是一个servlet。目前,我所有的servlet都将请求转发给服务层。

关于Java Servlet的维基百科的文章说:

Servlet的最经常使用到从HTML表单提交
1的过程或存储数据
2提供动态内容,如的结果数据库查询
3管理不无状态的HTTP协议

1和2都只是数据库调用,这是我在做存在状态信息我的dao层和服务层使得额外的业务逻辑已经成为可能。 3我目前没有使用会话。我没有登录,到目前为止,我只是玩弄我的架构,但我认为,服务层可以处理这一点。

我想知道这个架构变化的COS和优点:

优点:

  • 一层少,如果发生变更,更新。

利弊

  • 服务层得到络合剂。

THX你的答案。

回答

2

您需要servlet层,因为这是允许访问会话的原因。

此外,由于您希望能够在其他应用程序中重新使用服务和DAO层,因此您不希望服务层需要了解有关HTTP的任何信息(例如,如果您编写的桌面应用程序重新使用这些层),并需要包含servlet API在那里没有意义。

如果需要,您可以直接从servlet调用DAO层以获得简单情况,以便不重复服务和DAO层中的方法。

servlet API具有过滤器,它们是在Web应用程序中实现安全性的好地方。

如果您已经为您的Web应用程序使用Spring框架,则可以使用Spring Security

+0

我也可以在服务层上使用Spring Security,因为它是一个servlet层,或者我错过了? – SCBoy 2012-03-27 10:17:07

+1

Spring Security的主入口点实现了来自servlet规范的过滤器,因此它构建在servlet层上。它本身不是一个servlet层。 – 2012-03-27 10:22:27

+0

您还可以使用Spring Security在服务层中注释方法:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#ns-method-security。您可以使用AOP或使用常规代码并在服务层中传递用户对象来完成这一切。 – 2012-03-27 10:32:03