struts2中valueStack,stackContext以及actionContext的關系


一,首先給出三者的定義

  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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM