在实践 servlet 和 service 隔离时自己产生的疑惑

2018-05-26 09:15:15 +08:00
 Newyorkcity

为了解耦,学习到要求 servlet 要与 Service 分离( jsp/servlet 表现层; service 业务逻辑层; Dao 持久化层),但自己在写小项目实践练习时感觉很难受,比如:
用户登录成功之后,应该向 request 域中注入登录成功的 msg,即

request.setAttribute("msg","登录成功");

因为在 jsp 中会有

${requestScope.msg}
可这件事不应该属于业务逻辑吗?而 Service 层中不应该拿到 request 这个东西,只能交给 servlet 去完成吗?
如果说这件事最终影响的是 jsp 层,也就是表示层,所以可以把它交给 servlet 来处理,好吧。那现在我碰上这么一个情况,网站的会员还有不同的权限。登录成功之后我想要把用户的权限信息注入到 session 中

request.getSession.setAttribute("authority","admin");

这该是业务逻辑层的事情了吧?可 Service 层理论上不能接收 request 对象的话应该完成不了这种任务。
而且如果要交给 Servlet 去做的话,相当于 login 方法还要返回一个 User 对象,然后 Servlet 中得到这个 User 对象再获取其 authority 属性值,注入 session 中。。。这个怎么想都觉得是业务逻辑啊!!怎么能让 Servlet 来处理呢!!
就头大,望有前辈能解答一下,谢谢!

1064 次点击
所在节点    问与答
4 条回复
lhx2008
2018-05-26 09:32:12 +08:00
完全分离是不可能的,servlet 去调 service 不也是耦合在一起了吗
Newyorkcity
2018-05-26 09:53:21 +08:00
@lhx2008 emmmm 那请问这里第二个问题想向 session 注入 authority 信息,你会怎么实现呢?
az422
2018-05-26 10:38:43 +08:00
就是楼主第二种做法嘛,servlet 是控制层,负责参数检验和返回数据封装,不算业务逻辑
yestodayHadRain
2018-05-28 11:46:48 +08:00
servlet 封装数据,然后到 service,service 处理业务逻辑。service 层没有 request 没办法获取登录用户的级别,但是数据库中有,servlet 封装请求数据用 User 存储,然后把 user 传给 service,然后在传到 dao,如果用户有级别表中应该有级别这个字段,从库里查到 user 后 dao 返回 service,service 不就可以获取 user 的级别了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/457904

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX