Servlets Struts 2中的SessionAware设计
我已经使用Struts 2很长时间了 在实现action类的Servlets Struts 2中的SessionAware设计,servlets,struts2,struts,httprequest,httpsession,Servlets,Struts2,Struts,Httprequest,Httpsession,我已经使用Struts 2很长时间了 在实现action类的SessionAware接口的情况下,我们将得到SessionMap但不是HttpSession对象 在ServletRequestAware和ServletResposeAware的情况下,我们得到HttpServletRequest和HttpServletResponse对象,但在SessionAware的情况下,不会得到像SessionMap这样的包装器对象 我的问题是,如果Struts给我们提供了SessionMap而不是Htt
SessionAware
接口的情况下,我们将得到SessionMap
但不是HttpSession
对象
在ServletRequestAware
和ServletResposeAware
的情况下,我们得到HttpServletRequest
和HttpServletResponse
对象,但在SessionAware
的情况下,不会得到像SessionMap
这样的包装器对象
我的问题是,如果Struts给我们提供了SessionMap
而不是HttpSession
,将我们的操作类与Servlet API和Http协议解耦,那么为什么它在caseServletRequestAware
和servletresponse
中为我们提供HttpServletRequest
和ServletResponseAware
对象呢
如果Struts不想将Servlet API和HTTP协议与action类分离,那么在使用SessionAware接口的情况下,为什么它会给我们提供SessionMap
为什么我们不获取HttpSession
对象
为什么我们不获取HttpSession
对象
您可以从servlet的HTTP请求获取此对象。没有理由定义附加接口来将HttpSession
注入操作。另一方面,Struts为HTTP请求、会话和应用程序定义映射,以便使用Map
接口更容易地访问/修改其属性。如果实现了相应的xxxAware
接口,则可以将这些对象注入到操作中
此拦截器可以注入的接口列表:
ServletContextAware
ServletRequestAware
ServletResponseAware
ParameterAware
RequestAware
SessionAware
ApplicationWare
Principalware
HttpSession
如果struts不想将ServletAPI和HTTP协议与操作类分离,那么在SessionAware接口的情况下,为什么它会给我们SessionMap呢
出于充分的理由,它确实希望解耦Servlet API。它迫使您显式地请求Servlet API工件,因为它们是一种代码味道。它不会阻止你得到它们,因为在极少数情况下它们很重要
HttpSession
几乎只是一个属性映射,它不包含通常在操作中有用的信息。在更罕见的情况下,你需要一个你仍然可以得到它