+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//通过ActionContext访问数据
//davy ,2007-06-08
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
0.ActionContext的缺陷:
我们通过静态方法访问ActionContext的,而它本身是ThreadLocal的实现,所以对
action进行自动的单元测试将需要更多的工作;此外,由于能在线程调用栈的任意位
置访问ActionContext,因此你能与任意ThreadLocal协作,但请不要依赖这一点,如
过多依赖这一点,则你会陷入深层次的代码,而对你的action没有一的好处!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
00.好多方案是让你的action Class实现SessionAware接口,当然你可以认为此action
依赖于CompleteStack.代码如下:
public class Login extends ActionSupoort implements SessionAware,UserDaoAware
{
Map session;
User user;
UserDao userDao;
//设置session,SessionAwear接口保证在action执行以前,先设置好session Map;
public void setSession(Map session)
{
this.session = session;
}
//用户登陆
public String execute() throws Exception
{
user = this.control.getUser(user.getName,user.getPassword);
if(user == null)
{
return INPUT;
}else
{
session.put("user",user);
return SUCCESS;
}
}
}
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
01.获取session.
Map session = ActionContext.getContext().getSession();
session.put("user",user);
return SUCCESS;
注意:这里得到的session已经不是servlet特有的HttpSession了,此session表现为
Map,此Map中封装了HttpSession.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
02.获得HttpSession.
(1).
ActionContext context = ActionContext.getContext();
HttpServletRequest req = context.get(ServletActionContext.HTTP_REQUEST);
HttpSession session = req.getSession();
session.put("user",user);
return SEUCCESS;
注意:不到万不得以,不要同时使用ActionContext和ServletActionContext这两个类.
(2).这是在下常用的方法.
HttpServletRequest req = ServeletActionContext.getRequest();
HttpSession session = req.getSession();
session.put("user",user);
return SUCCESS;
(3).以下才是最推荐的方式,通过让你的action class实现ServletRequestAwear接口.
public class Login extends ActionSupport implements ServletRequestAwear,UserDaoAwear
{
HttpServletRequest req;
User user;
UserDao userDao;
public void setServletRequest(HttpServletRequest req)
{
this.req = req;
}
public String execute() throws Exception
{
user = userDao.findUser(user.getName(),user.getPassword());
if(user == null)
{
return INPUT;
}else
{
HttpSession session = req.getSession();
session.put("user",user);
return SUCCESS;
}
}
}