• 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与你一起学习,一起进步!
  • 相关阅读:
    修改msn密碼的地址
    Global.asax.cs中的方法的含义 Application_AcquireRequestState验证Session[轉]
    工作筆記DMIS項目
    给创业者的忠告
    Windows 2008 / Windows 7 x64: The ‘Microsoft.Jet.OLEDB.4.0′ provider is not registered on the local machine.
    Case Study: Nick Leeson and The Barings Debacle
    如何减小MS SQL Server的Log文件尺寸
    如何使windows7的默认共享可以被访问
    Android 开发人员必须掌握的 10 个开发工具
    在Windows Server 2008 R2上设置FTP 服务
  • 原文地址:https://www.cnblogs.com/zzzzw/p/4954934.html
Copyright © 2020-2023  润新知