關於 struts2 的 value stack

    咱們都知道,struts 能夠在action中綁定數據,進而在頁面中經過s 標籤,ognl表達式輸出。session

    關於 value stack以及 action contextapp

        用 <s:debug/> 能夠查看 value stack 以及 action context, 很是清楚。value stack 的棧頂就是 所訪問的actionspa

        對於s標籤裏面的內容,例如<s:property value="username"/>,struts 在解析這個標籤的時候,會首先在action中查找有沒有這個屬性,找不到纔去 action context中找。而若是這樣寫,<s:property value="#username"/>,struts會直接去 action context 中找。經過 ServletActionContext.getContext() 可獲取到 action context, 是一個map。.net

        而 action 自己也在 action context 中,action context存儲了大部分經常使用的對象,例如 request,response,session,application 等等,具體能夠在 s:debug 中看到。debug

        對於ognl表達式,用#就代表從 action context中查找,不用#就是直接去value stack棧頂,即action中查找對象

由於session就在action context中,所以 訪問session就須要加 #, <s:property value="#session.username"/> .blog

        疑問:可是對於 <s:property value="#request.username"/> 若是request中沒有username屬性,則依次去 action,action context,session中去找。 這多是由於 action,  action context, session 都在request中有引用的緣故吧。get

 

關於更詳細的原理,參閱:io

        Struts2數據傳輸的背後機制:ValueStack(值棧) 原理

        在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等

相關文章
相關標籤/搜索