zoukankan      html  css  js  c++  java
  • 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与你一起学习,一起进步!
  • 相关阅读:
    http协议
    db2 将逗号分隔数据转换为多值IN列表
    jquery deferred
    ps -ef|grep htpd|wd -l
    mysql 触发器
    css 五角星 (转)
    java 问题
    浏览器假死
    js math atan2
    CSS伪类选择器
  • 原文地址:https://www.cnblogs.com/zzzzw/p/4954934.html
Copyright © 2011-2022 走看看