Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · May 26, 2018 · 1465 views
    This topic created in 2918 days ago, the information mentioned may be changed or developed.

    为了解耦,学习到要求 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 replies    2018-05-28 11:46:48 +08:00
    lhx2008
        1
    lhx2008  
       May 26, 2018 via Android
    完全分离是不可能的,servlet 去调 service 不也是耦合在一起了吗
    Newyorkcity
        2
    Newyorkcity  
    OP
       May 26, 2018
    @lhx2008 emmmm 那请问这里第二个问题想向 session 注入 authority 信息,你会怎么实现呢?
    az422
        3
    az422  
       May 26, 2018 via Android
    就是楼主第二种做法嘛,servlet 是控制层,负责参数检验和返回数据封装,不算业务逻辑
    yestodayHadRain
        4
    yestodayHadRain  
       May 28, 2018
    servlet 封装数据,然后到 service,service 处理业务逻辑。service 层没有 request 没办法获取登录用户的级别,但是数据库中有,servlet 封装请求数据用 User 存储,然后把 user 传给 service,然后在传到 dao,如果用户有级别表中应该有级别这个字段,从库里查到 user 后 dao 返回 service,service 不就可以获取 user 的级别了吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1024 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:58 · PVG 02:58 · LAX 11:58 · JFK 14:58
    ♥ Do have faith in what you're doing.