1. org.apache.struts2.dispatcher.ActionContextCleanUp 這個類在strtus2-core-2.5.2裡面沒有了呢
filter內容按以下方式修改即可解決struts-cleanuporg.apache.struts2.dispatcher.ActionContextCleanUpstruts-cleanup/*-->注釋以上,版改為以下內容權struts-prepareorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilterstruts-prepare/*struts-executeorg.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilterstruts-execute/*
2. struts2中ActionContext是什麼
ActionContext是Action的上下文,Struts2自動在其中保存了一些在Action執行過程中所需的對象,比如, parameters, locale等。Struts2會根據每個執行HTTP請求的線程來創建對應的ActionContext,即一個線程有一個唯一的ActionContext。因此,使用者可以使用靜態方法ActionContext.getContext()來獲取當前線程的ActionContext,也正是由於這個原因,使用者不用去操心讓Action是線程安全的。
無論如何,ActionContext都是用來存放數據的。Struts2本身會在其中放入不少數據,而使用者也可以放入自己想要的數據。ActionContext本身的數據結構是映射結構,即一個Map,用key來映射value。所以使用者完全可以像使用Map一樣來使用它,或者直接使用Action.getContextMap()方法來對Map進行操作。
Struts2本身在其中放入的數據有ActionInvocation、application(即ServletContext)、conversionErrors、Locale、action的name、request的參數、HTTP的Session以及值棧等。完整的列表請參考它的Javadoc(本文附錄有對它包含內容的討論)。
由於ActionContext的線程唯一和靜態方法就能獲得的特性,使得在非Action類中可以直接獲得它,而不需要等待Action傳入或注入。需要注意的是,它僅在由於request而創建的線程中有效(因為request時才創建對應的ActionContext),而在伺服器啟動的線程中(比如fliter的init方法)無效。由於在非Action類中訪問其的方便性,ActionContext也可以用來在非Action類中向JSP傳遞數據(因為JSP也能很方便的訪問它)。
3. 使用struts2時不配置ActionContextCleanUp會發生什麼
這個filter主要是為了整合SiteMesh 等一些頁面統一化管理的..自己下載一個流程圖對應看一專下..不配置屬ActionContextCleanUp的話 struts封裝的一些request response等信息會在主filter StrutsPrepareAndExecuteFilter里被清空,,這樣後續的filter 就無法獲取了 而如果配置了ActionContextCleanUp的話 清空工作主filter就不管了 交與ActionContextCleanUp處理 而整合的其他filter 在應答響應的時候 是在主filter之後 ActionContextCleanUp之前...
4. ActionContext.initialize();這里的initialize起什麼作用
初始化作用,在web.xml文件中配置的init-param參數也會隨之載入過來
5. struts2中ActionContext的作用范圍。
ActionContext.getContext().getSession().put(key,value)可以將session的值保存在值棧(ValueStack)中,由於session在一次會回話中的數據是共享的,所以在其他頁面也就可答以通過<s:property value="#session.key" />訪問值棧中的值了
6. struts2中ActionContext是什麼東東
ActionContext是Action的上下文,Struts2自動在其中保存了一些在Action執行過程中所需的對象,比如session, parameters, locale等。Struts2會根據每個執行HTTP請求的線程來創建對應的ActionContext,即一個線程有一個唯一的ActionContext。因此,使用者可以使用靜態方法ActionContext.getContext()來獲取當前線程的ActionContext,也正是由於這個原因,使用者不用去操心讓Action是線程安全的。
無論如何,ActionContext都是用來存放數據的。Struts2本身會在其中放入不少數據,而使用者也可以放入自己想要的數據。ActionContext本身的數據結構是映射結構,即一個Map,用key來映射value。所以使用者完全可以像使用Map一樣來使用它,或者直接使用Action.getContextMap()方法來對Map進行操作。
Struts2本身在其中放入的數據有ActionInvocation、application(即ServletContext)、conversionErrors、Locale、action的name、request的參數、HTTP的Session以及值棧等。完整的列表請參考它的Javadoc(本文附錄有對它包含內容的討論)。
由於ActionContext的線程唯一和靜態方法就能獲得的特性,使得在非Action類中可以直接獲得它,而不需要等待Action傳入或注入。需要注意的是,它僅在由於request而創建的線程中有效(因為request時才創建對應的ActionContext),而在伺服器啟動的線程中(比如fliter的init方法)無效。由於在非Action類中訪問其的方便性,ActionContext也可以用來在非Action類中向JSP傳遞數據(因為JSP也能很方便的訪問它)。
7. ActionContext.getContext().getSession() 怎麼用在線等,希望有高手教我~!
ActionContext.getContext().getSession() .put("鍵","要存放的值");
這樣就存進去了
然後在JSP里就<%=session=getAttribut("鍵")%>就可以了
8. ServletContext和ServletActionContext有什麼區別
ServletActionContext和ActionContext有著一些重復的功能,在我們的Action中,該如何去抉擇呢?我們遵循的原則是:如果ActionContext能夠實現我們的功能,那最好就不要使用ServletActionContext,讓我們的Action盡量不要直接去訪問Servlet的相關對象. 注意:在使用ActionContext時有一點要注意: 不要在Action的構造函數里使用ActionContext.getContext(),因為這個時候ActionContext里的一些值也許沒有設置,這時通過ActionContext取得的值也許是null; 同樣,HttpServletRequest req = ServletActionContext.getRequest()也不要放在構造函數中,也不要直接將req作為類變數給其賦值。至於原因,我想是因為前面講到的static ThreadLocal actionContext = new ActionContextThreadLocal(),從這里我們可以看出ActionContext是線程安全的,而ServletActionContext繼承自ActionContext, 所以ServletActionContext也線程安全,而線程安全要求每個線程都獨立進行,所以req的創建也要求獨立進行,所以ServletActionContext.getRequest()這句話不要放在構造函數中,也不要直接放在類中,而應該放在每個具體的方法體中(eg:login()、queryAll()、insert()等),這樣才能保證每次產生對象時獨立的建立了一個req。
9. session=ActionContext.getContext().getSession().get();這個方法偶爾取出來的值為空。
你的xwork jar包的版本如果是 2.1.2之後的,那使用session的時候,需要自己創建session。
在action類中,private Map<String, Object> session;
public void setSession(Map<String, Object> session) {
this.session = session;
}
通過setSession覆蓋原來的代碼,將自己定義的session添加到 ActionContext.getContext()中。然後再將內容添加到session中,ActionContext.getContext().getSession().put(key,value);
10. ActionContext.getContext()的幾種用法
ActionContext.getContext().getSession() 獲取的是session,然後用put存入相應的值,只要在session有效狀態下,這個值一直可用
ActionContext.getContext().put("x", x) 默認的是request,在這個request未結束之前都是可用的
ActionContext.getContext().getValueStack().push(x),在Struts2中,一個請求在最終到達Action的方法之前,Action對象本身會被壓入ValueStack,可以把一個對象直接壓入到valuestack中