V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · 2018-05-26 09:15:15 +08:00 · 1060 次点击
    这是一个创建于 2134 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了解耦,学习到要求 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 来处理呢!!
    就头大,望有前辈能解答一下,谢谢!

    4 条回复    2018-05-28 11:46:48 +08:00
    lhx2008
        1
    lhx2008  
       2018-05-26 09:32:12 +08:00 via Android
    完全分离是不可能的,servlet 去调 service 不也是耦合在一起了吗
    Newyorkcity
        2
    Newyorkcity  
    OP
       2018-05-26 09:53:21 +08:00
    @lhx2008 emmmm 那请问这里第二个问题想向 session 注入 authority 信息,你会怎么实现呢?
    az422
        3
    az422  
       2018-05-26 10:38:43 +08:00 via Android
    就是楼主第二种做法嘛,servlet 是控制层,负责参数检验和返回数据封装,不算业务逻辑
    yestodayHadRain
        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 的级别了吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5652 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:31 · PVG 14:31 · LAX 23:31 · JFK 02:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.