1. 程式人生 > >Struts2為什麼要使用OGNL

Struts2為什麼要使用OGNL

引言:眾所周知,在mvc中,資料是在各個層次之間進行流轉是一個不爭的事實。而這種流轉,也就會面臨一些困境,這些困境,是由於資料在不同世界中的表現形式不同而造成的:

  1. 資料在頁面上是一個扁平的,不帶資料型別的字串,無論你的資料結構有多複雜,資料型別有多豐富,到了展示的時候,全都一視同仁的成為字串在頁面上展現出來。

  2. 資料在Java世界中可以表現為豐富的資料結構和資料型別,你可以自行定義你喜歡的類,在類與類之間進行繼承、巢狀。我們通常會把這種模型稱之為複雜的物件樹。

  此時,如果資料在頁面和Java世界中互相流轉傳遞,就會顯得不匹配。所以也就引出了幾個需要解決的問題:

  1. 當資料從View層傳遞到Controller層時,我們應該保證一個扁平而分散在各處的資料集合能以一定的規則設定到Java世界中的物件樹中去。同時,能夠聰明的進行由字串型別到Java中各個型別的轉化。

  2. 當資料從Controller層傳遞到View層時,我們應該保證在View層能夠以某些簡易的規則對物件樹進行訪問。同時,在一定程度上控制物件樹中的資料的顯示格式。

       如果我們稍微深入一些來思考這個問題,我們就會發現,解決資料由於表現形式的不同而發生流轉不匹配的問題對我們來說其實並不陌生。同樣的問題會發生在Java世界與資料庫世界中,面對這種物件與關係模型的不匹配,我們採用的解決方法是使用ORM框架,例如hibernate,iBatis等等。那麼現在,在Web層同樣也發生了不匹配,所以我們也需要使用一些工具來幫助我們解決問題。為了解決資料從View層傳遞到Controller層時的不匹配性,Struts2採納了XWork的一套完美方案。並且在此的基礎上,構建了一個完美的機制,從而比較完美的解決了資料流轉中的不匹配性。相信大家看到這一定猜出來了這裡的完美方案和完美機制了。對,這就是OGNL方案和OGNLValueStack機制