为了解耦,学习到要求 servlet 要与 Service 分离( jsp/servlet 表现层; service 业务逻辑层; Dao 持久化层),但自己在写小项目实践练习时感觉很难受,比如:
用户登录成功之后,应该向 request 域中注入登录成功的 msg,即
request.setAttribute("msg","登录成功");
因为在 jsp 中会有
${requestScope.msg}可这件事不应该属于业务逻辑吗?而 Service 层中不应该拿到 request 这个东西,只能交给 servlet 去完成吗?
request.getSession.setAttribute("authority","admin");
这该是业务逻辑层的事情了吧?可 Service 层理论上不能接收 request 对象的话应该完成不了这种任务。
而且如果要交给 Servlet 去做的话,相当于 login 方法还要返回一个 User 对象,然后 Servlet 中得到这个 User 对象再获取其 authority 属性值,注入 session 中。。。这个怎么想都觉得是业务逻辑啊!!怎么能让 Servlet 来处理呢!!
就头大,望有前辈能解答一下,谢谢!
1
lhx2008 2018-05-26 09:32:12 +08:00 via Android
完全分离是不可能的,servlet 去调 service 不也是耦合在一起了吗
|
2
Newyorkcity OP @lhx2008 emmmm 那请问这里第二个问题想向 session 注入 authority 信息,你会怎么实现呢?
|
3
az422 2018-05-26 10:38:43 +08:00 via Android
就是楼主第二种做法嘛,servlet 是控制层,负责参数检验和返回数据封装,不算业务逻辑
|
4
yestodayHadRain 2018-05-28 11:46:48 +08:00
servlet 封装数据,然后到 service,service 处理业务逻辑。service 层没有 request 没办法获取登录用户的级别,但是数据库中有,servlet 封装请求数据用 User 存储,然后把 user 传给 service,然后在传到 dao,如果用户有级别表中应该有级别这个字段,从库里查到 user 后 dao 返回 service,service 不就可以获取 user 的级别了吗?
|