Struts2如何傳值到jsp頁面
技術標籤:javaStruts2pageScoperequestScopesessionScopeapplication
一、一般是在Action中定義一個成員變數,然後對這個成員變數提供get/set方法,在JSP頁面就可以取到這個變數的值了。
1)在Action中定義成員變數
//定義一個成員變數
privateStringmessage;
//提供get/set方法
publicStringgetMessage(){
returnmessage;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
2)在JSP頁面中取值
${message}
2、但是定義的成員變數多了,感覺整個Action的程式碼就很長了。這個時候可以使用一些ServletAPI進行值的存取操作:HttpServletRequest、HttpSession和ServletContext。Struts2對這個三個物件用Map進行了封裝,我們就可以使用Map物件來存取資料了。
1)在Action中存值
package cn.com.action; public class testAction extends ActionSupport { privateStringmessage; publicStringgetMessage(){ returnmessage; } publicvoidsetMessage(Stringmessage){ this.message=message; } public String getDataSourceStat() { ActionContext actionContext = ActionContext.getContext();// ValueStack可以使用requestScope Map<String, Object> session = ActionContext.getContext().getSession();// 對應sessionScope Map<String, Object> application = ActionContext.getContext().getApplication();// 對應applicationScope actionContext.put("b", "123"); session.put("c", "456"); application.put("d", "789"); return SUCCESS; } }
2)在xml配置檔案
<struts> <package name="test" extends="struts-default"> <action name="getDataSourceStat" class="cn.com.action.testAction" method="getDataSourceStat"> <!-- <result name="success">/index.jsp</result> --> <result name="success">/test/jsp/datasource.jsp</result> </action> </package> </struts>
3)在JSP頁面上取值
<body>
<%
//從小到大的4個容器
pageContext.setAttribute("aa", "aaa");//${pageScope.aa }
request.setAttribute("bb", "bbb");//${requestScope.bb }
session.setAttribute("cc", "ccc");//${sessionScope.cc }
application.setAttribute("dd", "ddd");//${applicationScope.dd }
%>
<%= request.getAttribute("b")%>
<br> ${a} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
<br> ${b} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
<br> ${c} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
<br> ${d} <!-- 取值順序pageScope->requestScope->sessionScope->applicationScope -->
<br> ${pageScope.aa }
<br> ${requestScope.b }
<br> ${sessionScope.c }
<br> ${applicationScope.d }
<br>
</body>
web標準的存放資料的範圍有:
pageContext域,request域,session域,application域(ServletContext)。
struts2自己又定義了一個容器來存放資料,即:ActionContext。
ActionContext是個Map集合,它持有了web標準的4個域,通過它可以直接獲取這四個標準容器。
不僅如此,它還引用了其它struts2自己定義的物件:
jsp的4個作用域 pageScope、requestScope、sessionScope、applicationScope的區別
1、區別:
1.page指當前頁面有效。在一個jsp頁面裡有效
2.request指在一次請求的全過程中有效,即從http請求到伺服器處理結束,返回響應的整個過程,存放在HttpServletRequest物件中。在這個過程中可以使用forward方式跳轉多個jsp。在這些頁面裡你都可以使用這個變數。
3.Session是使用者全域性變數,在整個會話期間都有效。只要頁面不關閉就一直有效(或者直到使用者一直未活動導致會話過期,預設session過期時間為30分鐘,或呼叫HttpSession的invalidate()方法)。存放在HttpSession物件中
4.application是程式全域性變數,對每個使用者每個頁面都有效。存放在ServletContext物件中。它的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用
總結:當資料只需要在下一個forward有用時,用request就夠了;
若資料不只是在下一個forward有用時,就用session。
上下文,環境資訊之類的,用application。