Actioncontext跟ServletActionContext的区别---未完待续

  

    

    //
public class BaseAction extends ActionSupport{
public static HttpServletRequest getRequest(){
return ServletActionContext.getRequest();
}
public static HttpServletResponse getResponse(){
return ServletActionContext.getResponse();
}
public static HttpSession getSession(){
return ServletActionContext.getRequest().getSession();
}
public static ServletContext getApplication(){
return ServletActionContext.getServletContext();
}
}
//

//一个博客看到的想法
Map request=(Map)ActionContext.getContext().get("request");
Map request=(Map)ActionContext.getContext().get("session");
ActionContext().getContext().get("request");//
ActionContext().getContext().getSession()//获取的是session,然后用put存入相应的值,只要在session有效状态下,这个值一直可用
ActionContext().getContext().getSession().put("x",x);//对象默认的放入map中
ActionContext().getContext().getValueStack().push(x);//在Struts2中,一个请求在最终到达Action的方法之前,Action对象本身会被压入ValueStack,可以把一个对象直接压入到valuestack中
//关于ActionContext.getContext()的用法心得
ActionContext context=ActionContext.getContext();
Map request=context.get("request");
Map session=context.getSession();
Map application=context.getApplication();
request.put("greeting","欢迎访问曾志伟的空间");//在请求中保存信息
session.put("user",user);//在session中保存user对象
application("counter",count);
在jsp页面中直接使用
<body>
<h3>${sessionScope.user.username},${requestScope.greeting}。<br>本站的访问量是:${applicationScope.counter}</h3>
</body>
当然也可以直接使用
ActionContext.getContext().put("greeting","欢迎你来访问我的网站");
${requestScope.greeting}或者<%=request.getAttribute("greeting")%>
//百度百科:actioncontext和servletContext有什么区别
ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,
该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,
那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问Servlet的相关对象.
注意:在使用ActionContext时有一点要注意:
不要在Action的构造函数里使用ActionContext.getContext(),
因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null;
同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,
也不要直接将req作为类变量给其赋值。至于原因,我想是因为前面讲到的static ThreadLocal actionContext = new ActionContextThreadLocal(),
从这里我们可以看出ActionContext是线程安全的,而ServletActionContext继承自ActionContext,所以ServletActionContext也线程安全,
而线程安全要求每个线程都独立进行,所以req的创建也要求独立进行,所以ServletActionContext.getRequest()这句话不要放在构造函数中,
也不要直接放在类中,而应该放在每个具体的方法体中(eg:login()、queryAll()、insert()等),这样才能保证每次产生对象时独立的建立
了一个req。
//

 http://www.cnblogs.com/ningvsban/p/3740717.html

 http://www.cnblogs.com/xwdreamer/archive/2010/09/26/2297083.html

---- 动动手指关注我!或许下次你又能在我这里找到你需要的答案!ZZZZW与你一起学习,一起进步!
原文地址:https://www.cnblogs.com/zzzzw/p/4954934.html