關於Struts2的碎碎念

2021-09-07 06:28:27 字數 1486 閱讀 3721

我入行比較晚,那會spring mvc什麼的都很流行了,一直覺得struts2作為乙個web mvc框架實在太笨重了點。所以雖然之前一直在用,但是其實沒有真正研究過。

今天公司又遇到乙個比較嚴重的struts的安全問題,最後檢查了很久,換最新版也無效。但是因為公司一直在用strtus2,作為乙個愛著自己工作的人(逃),還是決定大致了解一下struts2的原始碼了。

直接讀**難免一頭霧水,這裡推薦一本書《struts2技術內幕》,有書上的理論作指導就容易得多。這本書講的挺詳細,同時在設計思想上也有不少著力,非常值得一讀。

看了一部分**後,仔細除錯了一下,確認了這個是乙個比較嚴重的安全問題,不知道是否已被官方發現,但是確實在最新版2.3.15.3中仍存在。已經發了郵件給官方,希望能得到乙個好的解決方案。

但是本文的主要的目的不在這裡。本文就是理一下struts2的裡裡外外,不至於遇到問題一頭霧水,就足夠了。

struts2結構圖如下(自己畫的,可能不嚴謹):

ognl是底層的表示式引擎,也是安全方面廣為詬病的地方。

xwork是個什麼東西呢?它可以理解為乙個請求-響應模式的通用框架(不僅僅侷限於web),這個action就是乙個命令。而struts2可以說是xwork在web領域的乙個特定實現。

xwork是包括action/interceptor/result幾個大部分,還有用於執行流程的actionproxy和actioninvoker,以及處理資料的actioncontext和valuestack。xwork的執行流程如下(這裡引用了《struts2技術內幕》的圖):

今天說到在讀struts**,jfinal的作者@jfinal 說struts**很爛。

可能我功力不夠,倒是沒覺得**很爛,struts2的**層次化、結構化、擴充套件性其實都做得不錯,比如動態外掛程式機制,比如result是乙個介面,裡面包含了乙個excute()方法用於決定渲染方式等。但是設計思想上,可能與當前的趨勢不符了。

struts2有個很重要的設計思想:解耦。它希望框架不要侵入業務,包括servlet api裡的request/response,盡量讓大家寫乙個pojo就好了。這個pojo脫離了框架,甚至是在其他領域都是可用的。其實在如今web大行其道的時代,其實也沒有人會需要無侵入的框架進行遷移,這種設計也不知該說超前還是過時了,但是反而會帶來一些不便。

相反,我覺得框架就該限定領域,好的框架應該提供必要的約束,清晰勾勒出這個領域開發的一種方式,而不是一味追求通用性。這一點我覺得spring mvc就做的好一些,大家的接受程度也會比較高。場景越確定,框架能做的事越多,開發就越方便,比如jfinal這種框架。

對於struts,我只能說可能當年的web還未一統天下,大家仍有不同場景的需求吧。

ps:web框架是個很大很熱的話題,博主一家之言,大家聽聽就好。

關於ip位址碎碎念

ip位址分為網路號,主機號。ip位址劃分為二進位制,八位乙個空格,可分為a.b.c.d.e類網路字段。a類位址網路號佔乙個位元組,只有七位可供使用。該欄位第一位固定為0 類別位 ip位址中,全0表示本網路的意思 網路號為01111111 127 表示環迴測試。主機號佔3個位元組。全0主機號表示該ip...

關於最近的碎念

最近懶懶的,什麼也不想做 高數 線代和電子技術還是感覺好難跟上,再不努力又要掛科了 整天玩魔獸世界,嗯,算是每天都玩吧,倒不是怎麼喜歡玩,說不清的感覺 很少寫 c 學了好幾個月居然還沒學完,和老師的進度一樣一樣的 閒來聽聽歌,常聽nightwish 的,中午更偏向the eagles一點 陽台的外面...

碎碎念 廣州的生活

這篇文字或許就是 不知道說點什麼的說點什麼 之前有看過一篇文章,關於如何寫東西的,有句話是,如果你不知道寫什麼,那就 寫上 我不知道寫什麼 哈哈,仔細想來這也不失為乙個辦法,感覺最近 下筆 很糾結啊。來廣州工作快要乙個月了,說說這邊的生活吧 地點 一直在說自己在廣州工作,的確是廣州,不過是廣州 中國...