<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ordinary hut

    人間一福地,勝似天仙宮
    posts - 61, comments - 50, trackbacks - 0, articles - 1

    關于struts2的ActionContext和ValueStack的簡單理解

    Posted on 2009-04-07 20:47 landor 閱讀(3672) 評論(0)  編輯  收藏 所屬分類: struts2
    ActionContext是被存放在當前線程中的,獲取ActionContext也是從ThreadLocal中獲取的。所以在執(zhí)行攔截器、 action和result的過程中,由于他們都是在一個線程中按照順序執(zhí)行的,所以可以可以在任意時候在ThreadLocal中獲取 ActionContext。
    ActionContext包括了很多信息,比如Session、Application、Request、Locale、ValueStack等,其中 ValueStack可以解析ognl表達式,來動態(tài)后去一些值,同時可以給表達式提供對象。值棧是建立在ognl的基礎之上的。

    HttpServletRequest等對象是如何與struts2的ActionContext互通的
    是struts2重新實現(xiàn)了HttpServletRequest接口,就是類StrutsRequestWrapper,看下struts2的說明:
    All Struts requests are wrapped with this class, which provides simple JSTL accessibility. This is because JSTL works with request attributes, so this class delegates to the value stack except for a few cases where required to prevent infinite loops. Namely, we don't let any attribute name with "#" in it delegate out to the value stack, as it could potentially cause an infinite loop. For example, an infinite loop would take place if you called: request.getAttribute("#attr.foo").
    說明struts重新包裝了request接口,所以如果用request.getAttribute()的話,是執(zhí)行了StrutsRequestWrapper類,在這個類里面有訪問ActionContext的代碼:
    public class StrutsRequestWrapper extends HttpServletRequestWrapper {

        
    /**
         * The constructor
         * 
    @param req The request
         
    */
        
    public StrutsRequestWrapper(HttpServletRequest req) {
            
    super(req);
        }

        
    /**
         * Gets the object, looking in the value stack if not found
         *
         * 
    @param s The attribute key
         
    */
        
    public Object getAttribute(String s) {
            
    if (s != null && s.startsWith("javax.servlet")) {
                
    // don't bother with the standard javax.servlet attributes, we can short-circuit this
                
    // see WW-953 and the forums post linked in that issue for more info
                return super.getAttribute(s);
            }

            ActionContext ctx 
    = ActionContext.getContext();
            Object attribute 
    = super.getAttribute(s);
            

    在這里實現(xiàn)了getAttribute方法,然而沒有實現(xiàn)全部,所以只有用getAttribute方法才能獲取ActionContext中的信息
    但是它繼承了sun的HttpServletRequestWrapper類,所以其他的方法還是用的默認實現(xiàn),也就是不能訪問到ActionContext中的信息
    jstl標簽會觸發(fā)request等的getAttribute方法,所以jstl也能獲取到ActionContext的數(shù)據(jù),比如Struts2的Action中的屬性等等。
    主站蜘蛛池模板: 青青草a免费线观a| 9久热精品免费观看视频| 丁香花在线观看免费观看图片| 99久久99这里只有免费费精品| 亚洲av无码不卡私人影院| 久久亚洲AV永久无码精品| 欧美日韩亚洲精品| 一二三四在线播放免费观看中文版视频 | 毛片a级毛片免费播放100| 亚洲免费观看在线视频| 亚洲国产精品SSS在线观看AV| 九九九精品视频免费| 亚洲成a人片在线观看日本麻豆 | 又黄又爽无遮挡免费视频| 日韩国产精品亚洲а∨天堂免| 国产成人青青热久免费精品| 免费播放美女一级毛片| 亚洲精品成人a在线观看| 中文字幕在线免费观看视频| 亚洲AV日韩AV永久无码下载| 四虎免费影院ww4164h| 亚洲精品国产suv一区88| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲av日韩综合一区久热| 亚洲精品无码日韩国产不卡?V| 大地资源网高清在线观看免费| 亚洲免费在线视频| 久久久久国产精品免费免费搜索 | 亚洲jjzzjjzz在线播放| 日韩一区二区在线免费观看 | 四虎精品成人免费视频| 亚洲av无码一区二区三区不卡| 99久久99这里只有免费费精品| 亚洲精品色在线网站| 亚洲精品成人网站在线观看| 啦啦啦完整版免费视频在线观看| 亚洲一久久久久久久久| 国产亚洲精品自在线观看| 欧洲一级毛片免费| 青青青视频免费观看| 久久久久久久亚洲Av无码 |