EL和ValueStack對象
ValueStack介紹
值棧,存儲數據容器。
值:存儲數據有,request(2種類型對象)、session(2種)、application(2種)、action、parameters等
棧:存儲涉及了棧結構。
ValueStack底層有root棧和context Map存儲區。通過ognl工具包對兩個存儲區進行存取操作。ognl工具需要藉助OGNL表達式使用。
"name":訪問ValueStack中root值棧中存儲的對象name屬性
"#session":訪問ValueStack中context儲存的key爲session的對象
ActionContext和ServletActionContext是訪問ValueStack中context存儲區的工具API。
EL表達式爲什麼能訪問到Action屬性值?
JSP中${error}-->request.getAttribute("error").
Struts2框架底層將request做了封裝,重寫了底層的getAttribute方法,底層首先去原有request中獲取,如果沒有就去ValueStack的root棧的action獲取同名屬性值。
Struts2攔截器
Struts2攔截器可以在Action調用前和Result調用後進行邏輯的切入。
攔截器編寫規則
編寫攔截器需要實現Interceptor接口及其約定的方法。
攔截器配置規則
<interceptors>
<interceptor name="someInterceptor" class="xxx"/>
</interceptors>
<action name="xxx" class="xxx">
<interceptor-ref name="someInterceptor"/>
</action>
底層利用<default-interceptor-ref name="defaultStack"/>配置,爲所有action指定了一個默認攔截器.如果爲action元素追加了<interceptor-ref>,默認defaultStack將不再調用,這樣會破壞原有很多流程功能。需要將defaultStack顯示定義追加。
攔截器主要做通用功能封裝,例如登錄檢查、參數接收等。