一,首先給出三者的定義
1.valueStack: 裡面存放的是Action類中通過set方法設置的屬性值(表單傳過來的值等),由OGNL框架實現; 2.stackContext: 也是用來存值的,stack上下文,它包含一些列對象,包括request/session/attr/application map等。 3.actionContext: 是action的上下文,可以得到request,session,application等. 我們在JSP頁面中訪問value stack的內容時,是不用加#,而如果是訪問stack context的其他對象則要加上#。 二,如何獲得ActionContext? 1.在自定義的攔截器中:使用ActionInvocation.getInvocationContext()或者使用ActionContext.getContext()。 2.在Action類中:讓攔截器注入或者使用ActionContext.getContext()。 3.在非Action類中:讓Action類傳遞參數、使用注入機制注入或者使用ActionContext.getContext()。 注意:只有運行在request線程中的代碼才能調用ActionContext.getContext(),否則返回的是null。 三,ActionContext有什麼作用? 1.通過ActionContext可以獲得HttpServletRequest類:HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);2.通過ActionContext也可以獲得request的Map:
Map requestMap = (Map) actionContext.get("request");
因此,在JSP中,用“#request”來獲得request的Map,用“#request.key”或者“#request[‘key‘]”來讀取Map中的值。
四,那ValueStack與ActionContext到底有什麼聯系和區別:
~~~簡單兩句話概括就是:~~~
相同點:它們都是在一次HTTP請求的范圍內使用的,即它們的生命周期都是一次請求。 不同點:值棧是棧的結構,ActionContext是映射(Map)的結構。
需要詳細了解ActionContext的可以去參考這篇文章:http://www.bubuko.com/infodetail-355138.html