1.課程回顧(理解)
1)ValueStack結構和數(shù)據(jù)存儲狀態(tài)
ValueStack包含3個組成
a. OGNL引擎:負責解析OGNL表達式
b. root對象:CompountRoot(棧結構)
存放了當前請求的Action對象(處于棧頂位置)
c. context對象:Map結構
存放了其他象.
request:Object
session:Object
application:Object
2) ValueStack原理
a.當客戶發(fā)送一個請求后,控制器會創(chuàng)建一個ValueStack對象
b.控制器創(chuàng)建請求對應的Action對象,并壓入到ValueStack的root棧中
c.將request,session等對象的引用,存入到ValueStack的context中
d.將ValueStack再存入到request對象中,struts.valueStack
e.客戶再發(fā)新請求,重復以上操作.
*2.重構列表顯示示例
3.EL表達式在Struts2中的使用(理解)
EL為什么可以獲取Action對象的屬性?
可以訪問pageContext,request,action,session,application范圍數(shù)據(jù)
在原有的JavaWeb程序中,JSP如果使用${username},會調用如下方法查找.
HttpServletRequest接口
request.getAttribute("username")
session.getAttribute("username")
application.getAttribute("username")
在Struts2中,將request對象進行了封裝,類型為StrutsRequestWapper.
public class StrutsRequestWapper
extends HttpServletRequestWrapper{
//重寫了getAttribute
public Object getAttribute(String expression){
//首先去原始的request中查找
Object val = super.getAttribute(expression));
//如果找不到,去valuestack查找
if(val == null){
val = ValueStack.findValue(expression);
}
return val;
}
}
JSP使用 ${"username"} -->先去原有request中查找
找不到調用ValueStack.findValue("username");
觸發(fā)Ognl.getValue("username")//獲取root中棧頂action的username屬性
4. Struts2中Action組件的核心應用
1)Action組件原理
a.當客戶發(fā)生一個請求,控制器會創(chuàng)建一個Action對象
不必擔心線程并發(fā),不安全問題.
b.Action對象創(chuàng)建后會放入ValueStack中,當root對象的棧頂
c.Action對象提供一個業(yè)務方法,默認是execute
d.Action對象在請求處理完畢后銷毀
2)Action如何使用request,session,application
a.利用工具類ActionContext,ServletActionContext
如何將HttpServletRequest,HttpSession等對象轉換成Map結構
public class SessionMap extends AbstractMap{
private HttpSession session;
public SessionMap(HttpSession session){
this.session = session;
}
public void put(Object key,Object value){
session.setAttribute(key.toString(),value);
}
public Object get(Object key){
2015年全國職稱計算機考試教材(2007模 .. 定價:¥225 優(yōu)惠價:¥213 更多書籍 | |
全國職稱計算機考試速成過關系列套裝:W .. 定價:¥133 優(yōu)惠價:¥133.0 更多書籍 |