【问题标题】:SessionAware design in Struts 2Struts 2 中的 SessionAware 设计
【发布时间】:2015-11-30 19:05:54
【问题描述】:

我已经使用 Struts 2 很长时间了。

如果为我们的操作类实现SessionAware 接口,我们将获得SessionMap 而不是HttpSession 对象。

ServletRequestAwareServletResposeAware 的情况下,我们得到HttpServletRequestHttpServletResponse 对象,但在SessionAware 的情况下没有像SessionMap 这样的包装对象。

我的问题是,如果 Struts 给我们 SessionMap 而不是 HttpSession 以将我们的动作类与 Servlet API 和 Http 协议分离,那么为什么它给我们 HttpServletRequestHttpServletResponse 对象以防@987654334 @ 和ServletResponseAware

如果 Struts 不想将 Servlet API 和 HTTP 协议从操作类中分离出来,那么为什么它在 SessionAware 接口的情况下给我们SessionMap

为什么我们没有得到HttpSession 对象?

【问题讨论】:

    标签: servlets struts2 struts httprequest httpsession


    【解决方案1】:

    在 ServlectRequestAware 和 ServletResposeAware 的情况下,我们得到 HttpServletRequest 和 HttpServletRespose 对象,但在 SessionAware 的情况下没有像 SessionMap 这样的包装对象。

    因为那些在极少数情况下会直接暴露 servlet 请求和响应,而实际上它们确实是必要的(或至少有用)。

    我的问题是,如果 struts 给我们 SessionMap 而不是 HttpSession 来将我们的动作类与 Servlet API 和 Http 协议解耦,那么为什么它给我们 HttpServletRequest 和 HttpServletRespose 对象以防 ServlectRequestAware 和 ServletResposeAware。

    因为与实际请求或响应相比,您需要HttpSession 的可能性要小得多。

    如果 struts 不想将 Servlet API 和 HTTP 协议从操作类中分离出来,那么为什么它在 SessionAware 接口的情况下给我们提供 SessionMap。

    确实想要解耦 Servlet API,这是有充分理由的。它迫使您明确要求 Servlet API 工件,因为它们是代码异味。它不会阻止您获得它们,因为在极少数情况下它们很重要。

    HttpSession 几乎只是一个属性映射,它不包含通常在操作中有用的信息。在更罕见的情况下,你需要一个你仍然可以得到它。

    【讨论】:

      【解决方案2】:

      为什么我们没有得到HttpSession 对象?

      您可以从 servlet 的 HTTP 请求中获取此对象。没有理由定义额外的接口来将HttpSession 注入到操作中。另一方面,Struts 为 HTTP 请求、会话、应用程序定义了映射,以便使用Map 接口更轻松地访问/修改其属性。如果servletConfig interceptor实现了对应的xxxAware接口,则servletConfig interceptor可以将这些对象注入到动作中。

      此拦截器可以注入的接口列表:

      • ServletContextAware
      • ServletRequestAware
      • ServletResponseAware
      • ParameterAware
      • RequestAware
      • SessionAware
      • ApplicationAware
      • PrincipalAware

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-26
        • 1970-01-01
        • 2013-12-31
        • 1970-01-01
        • 2011-07-01
        • 2015-01-31
        • 2012-06-21
        • 1970-01-01
        相关资源
        最近更新 更多