方法1.通過 ActionContext.getActionContext() 返回了一個ActionContext
通過以下方法擷取
代碼如下 |
複製代碼 |
ActionContext ac = ActionContext.getContext(); ac.get("tip"); //預設是擷取request中的屬性,擷取request內建對象的tip屬性 如果要擷取其他範圍的屬性 ac.getApplication().get("tip") //擷取application範圍的tip屬性 ac.getApplication().put("tip", "abc"); //設定application範圍的tip屬性為abc ac.getSession().get("tip"); //擷取session範圍的tip屬性 ac.getSession().put("tip", "abc"); //設定session範圍的tip屬性為abc |
map application = ac.getApplication();
說明:上面的方法獲得得到的是map對象,這個是struts類比出來的application真實的application,被封裝在struts架構之中,這樣的好處是使得action與servlet API之間解耦
方法2.通過實現下面的介面
ServletContextAware:實現這個介面可以訪問Web應用的ServletContext執行個體
ServletRequestAware:實現這個介面可以訪問Web應用的HttpServletRequest執行個體
ServletResponseAware:實現這個介面可以訪問Web應用的HttpServletResponse執行個體
例如下面這個例子
代碼如下 |
複製代碼 |
public class LoginAction extends ActionSupport implements ServletRequestAware { HttpServletRequest hsr = null; @Override public void setServletRequest(HttpServletRequest request) { hsr = request; } @Override public String execute() throws Exception { hsr.getAttribute("tip"); //擷取request範圍的tip屬性 } } |
其他介面與這個類似;
說明:這個擷取到的是純正的jsp內建對象,沒有經過struts封裝。也就是說我們的action可以直接使用Servlet的API,同時產生了之間的耦合
方法3.ServletActionContext
利用這個靜態類,可以之間擷取到jsp的內建對象
代碼如下 |
複製代碼 |
ServletActionContext.getServletContext(); ServletActionContext.getRequest(); ServletActionContext.getRequest().getSession(); |
說明:個人覺得這個比較方便,如果要直接使用servlet中的api推薦用這個方法