例如在Action中访问session的2种方式:
1. ServletActionContext.getRequest().getSession() 返回一个HttpSession对象
2. ActionContext.getContext().getSession() 返回一个对应与session的Map<String, Object>请问这两种方式,哪一种在实际项目开发中更常用呢?
struts2提供第二种的目的难道仅仅是为了测试方便?
1. ServletActionContext.getRequest().getSession() 返回一个HttpSession对象
2. ActionContext.getContext().getSession() 返回一个对应与session的Map<String, Object>请问这两种方式,哪一种在实际项目开发中更常用呢?
struts2提供第二种的目的难道仅仅是为了测试方便?
通过ActionContext取得HttpSession: Map session = ActionContext.getContext().getSession();ServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了上面介绍的ActionContext,它提供了直接与Servlet相关对象访问的功能。如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问Servlet的相关对象.
注意:在使用ActionContext时有一点要注意: 不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null;同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,也不要直接将req作为类变量给其赋值。
1. ServletActionContext.getRequest().getSession() 直接访问了servlet API 中的session
2. ActionContext.getContext().getSession() struts封装的session
两种效果几乎一样。但是在实际项目中,如果使用了struts2 就尽量避免直接访问servlet API,而是使用struts2 提供的API。