Struts2中的OGNL表達式語言是對Xwork的OGNL的封裝。我們要理解一下幾點:
1. Struts2中將ActionContext作為OGNL的上下文環境(ActionContext內部含有一個Map對象)
2. Struts2中的OGNL表達式語言的根對象是一個ValueStack,ValueStack中的每一個對象都被視為根對象。
Struts2框架將實例化的Action對象放入ValueStack中,如果是Action鏈,則多個Action都存在於ValueStack中。而ValueStack中除了Action外,Struts2框架還將parameters,request,response,session,application,attr等對象放到ActionContext中,訪問這些對象需要加前綴#。
總結:Struts2中的數據處理基於Xwork的OGNL,它在OGNL的基礎上進行了一定的封裝。OGNL的核心概念是根對象(root)和上下文環境(context)---你可以傳入一個Map對象作為上下文,向其中put進一個對象,那么這個對象可以作為根對象(ognl中可以向函數中傳入不同的Map對象作為根對象來操作,也可以指定不同的根對象,而Struts2中,它固定了根對象ValueStack)。在Struts2中,ActionContext作為OGNL的上下文環境,它的根對象是一個ValueStack,ValueStack中的每個對象都被視為根對象。Struts2中的Action作為根對象存在(如果多個Action以chain的形式存在,則多個Action均存在於ValueStack中,均為根對象)。