1. 程式人生 > >struts2值棧

struts2值棧

  1. OGNL 1.1 OGNL的全稱是Object Graph Navigation Language(物件圖導航語言),它是一種強大的表示式語言 1.2 OgnlContext(ongl上下文)其實就是Map

    OgnlContext=根物件(1)+非根物件(N) 非根物件要通過"#key"訪問,根物件可以省略"#key"

    注1:context:英文原意上下文,環境/容器

1.3 把根物件和非根物件說出來

  1. ValueStack ValueStack實際上就是一個容器。它由Struts框架建立. 2.1 值棧 先進後出的資料結構,彈夾 push/pop 2.2 為什麼要使用ValueStack作為根物件 放到值棧中的物件都可視為根物件

EL表示式 從小到大 page -> request -> session -> application

OGNL表示式 從上至下 A B C D

//虛擬碼 *.action 3. ActionContext 每次發出請求時都會建立一個ActionContext,也就是說,ActionContext的生命週期是和request相同的, 3.1 ActionContext ac = ActionContext.getContext();//保證同一請求中只建立一個上下文 request session application parameters ValueStack(root)

3.2 向ValueStack壓棧 push(XxxAction)//helloAction push(ModelDirver.getModel())//model不為null user

3.3 Map<String,String[]> map = request.getParamterMap(); //引數名==OGNL表示式 {“userName”:“aaa”,“uname”:“bbb”,“upwd”:“ccc”,“age”:“22”}

  setValue("userName", ac, vs, "aaa");
  setValue("uname", ac, vs, "bbb");
  setValue("upwd", ac, vs, "ccc");
  setValue("age", ac, vs, "22");
總結一下:
一:ActionContext生命週期是一次請求,每次發出請求都會建立一個新的ActionContext,就和	request一樣,每次建立新的ActionContext時會重新引用那些物件。
二:而且不只生命週期一樣,它本身也具備了request域的功能,可以從後臺攜帶資料到前臺,也和request一樣
三:通過ActionContext可以直接獲得session和application各自的域物件,操作時更方便
四:最重要一點是:ActionContext本身是一個Map,它儲存了很多的物件例如request,response.
  1. struts2中傳遞資料 可以使用作用域,但更多的是利用ValueStack或ActionContext

4.1.ValueStack的特點(值棧):

1).把一個物件放到vs裡面之後,我們從這個vs中是拿不到這個物件的,但是我們可以直接拿到這個物件裡面的屬性以及屬性值. 2).從vs中拿值的時候,是從vs中的property name這一個列來拿的,拿到的是property value這一列的值.所以如果我們通過vs把一個值傳到頁面,我們不能直接把這個值放到vs裡,因為這樣拿不到,我們應該把這個值放到一個物件的屬性裡面,然後再把這個物件放vs中,這個時候就可以通過vs拿到這個物件的屬性了,也就是我們要傳的值. 3).每次瀏覽器傳送一個新的請求,都會生成一個新的ValueStack物件,上一次的ValueStack物件就沒了,找不到了.(類似之前學習的request物件的特點) 4).每次建立一個新的ValueStack物件後,會把這個物件放到ActionContext裡面.

4.2.ActionContext的特點

1).向ac裡面放值的時候是通過key-value的形式存放的,key是String型別,value是Object型別,取值的是同樣通過key拿到value. 2).struts框架預設向這個物件裡面存放的物件(資料)很多,包括request、session、application、ValueStack、parameters等

3.每次請求都會建立一個新的ActionContext物件(每次請求打印出ac的地址值可以看出來)