熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

常用的Java Web框架簡介

2013-11-23 19:07:42  來源: Java核心技術 

  Web框架是人們在使用某種語言編寫Web應用服務端時關於架構的最佳實踐

  有些Web框架是從實際的Web項目抽取出來的也就是說做一個具體的應用項目時采取的架構比較理想就把這部分和領域無關而僅和Web的請求和響應處理有關的設計拿出來形成一個基礎在開發別的應用項目的時候則可以從這基礎做起讓開發者更關注領域問題而不是Web的請求和響應的控制

  也有些Web框架是直接設計出來的很多Web框架在設計的時候也都借鑒了別的框架吸取優點修改不足並根據自己的框架的定位在特定方面有自己的發揮形成了自己的特點比如有的web框架追求的是松耦合性層次結構之間都不密切綁定有的Web框架則追求敏捷性強調約定而不是配置

  Java 的 Web框架雖然各不相同但基本也都是遵循特定的路數的使用Servlet或者Filter攔截請求使用MVC的思想設計架構使用約定XML或 Annotation實現配置運用Java面向對象的特點面向抽象實現請求和響應的流程支持JspFreemarkerVelocity等視圖

  JSF

  優點

  Java EE標准這意味著有很大的市場需求和更多的工作機會

  上手快速並且相對容易

  有大量可用的組件庫

  缺點

  大量的JSP標簽

  對REST和安全支持不好

  沒有一個統一的實現既有SUN的實現又有Apache的實現——MyFaces

  國內的OperaMasks還支持AJAX以及有開發工具 支持

  Spring MVC

  優點

  對覆蓋綁定(overriding binding)驗證(validation)等提供生命周期管理

  與許多表示層技術/框架無縫集成JSP/JSTLTilesVelocityFreeMarkerExcelXSLPDF 等

  便於測試——歸功於IoC

  缺點

  大量的XML配置文件

  太過靈活——沒有公共的父控制器

  沒有內置的Ajax支持

  Stripes

  優點

  不需要書寫XML配置文件

  良好的學習文檔

  社區成員很熱心

  缺點

  社區比較小

  不如其他的項目活躍

  ActionBean裡面的URL是硬編碼的

  Struts

  優點

  架構簡單——易於擴展

  標記庫很容易利用FreeMarker或者Velocity來定制

  基於控制器或者基於頁面的導航

  缺點

  文檔組織得很差

  對新特征過分關注

  通過Google搜索到的大多是Struts x的文檔

  Tapestry

  優點

  一旦學會它將極大地提高生產率

  HTML模板——對頁面設計師非常有利

  每出一個新版本都會有大量的創新

  缺點

  文檔過於概念性不夠實用

  學習曲線陡峭

  發行周期長——每年都有較大的升級

  Wicket

  優點

  對Java開發者有利(不是Web開發者)

  頁面和顯示綁定緊密

  社區活躍——有來自創建者的支持

  缺點

  HTML模板和Java代碼緊挨著

  需要對OO有較好的理解

  Wicket邏輯——什麼都用Java搞定

  在Java的Web框架中我使用過StrutsStruts試用過StripesWicket了解過JSFSpringMVC以我使用的經驗我覺得看一個Java Web框架應看看下面幾個方面

  設計理念

  一個框架設計出來應該有一個基本的思路它為什麼要要被設計出來?有的框架的目標 就是提高效率有的框架的目標的給用戶充分的選擇有的框架的目標是充分了解實際需求給用戶一個盡量合理的默認選擇有的框架是要給使用者開發桌面程序的感覺應該說一個好的框架應該是實現了預期目標體現出了自己的設計理念的

  設計的合理性

  設計的合理性表現在框架在一些關鍵問題上的處理比如靈活性和敏捷性之間的權衡硬編碼和文本配置之間的權衡靈活性指的是可以適應用戶多樣的需求很特殊的要求也能得到支持有的框架的實現基於太多的約定使得用戶只能遵循而敏捷性指的是用戶在解決絕大多數常規問題的時候能盡量少做工作提高效率框架設計者只能在這兩者見達到一個平衡點權衡的怎麼樣就很見水平了硬編碼和文本配置之間的權衡也很有意思文本配置的意義在於Java是一個編譯語言強調代碼的封閉講究擴展而不是修改這種情況下文本配置信息可以很方便的在不修改程序的情況下改變程序行為但是隨著一些靈活的腳本語言實現的 Web框架的出現人們發現在這樣的框架中腳本語言即做程序編碼語言也做配置語言還做視圖上的標記語言這使我們對Java實現的框架有了一番新的審視既然配置文件並沒有消除對程序的修改為什麼不能在應編碼上下下功夫呢?

  設計的平衡性

  設計的平衡性指的是框架在設計流程中各階段各層次的實現方式時所達到的上述權衡(靈活性和敏捷性之間的權衡等)應該是具有一致的水平一個在控制上過分靈活而視圖上具有非常大限制的框架是不能算做一個好的框架的

  框架真的解放了開發者嗎

  框架的目的是讓開發者把更多的精力放在領域問題而非Web的請求和響應的處理問題上而事實上框架都做到這一點了嗎?不可否認框架的使用提高代碼的可維護性但是框架在解放開發者這點上就未必了有時還給開發者帶來了額外的負擔事實上直接使用Servlet只要維持好代碼風格一樣可以很有效率當然直接使用Servlet的靈活性就不用說了

  在我接觸的Web框架中我最推崇的是Struts設計優雅偏重靈活也基本不造成額外的負擔當然這些評價是和我參與的項目的規模有關的其他規模的項目Struts就未必合適了我希望Struts能在下面幾個方面有些改善

  在提供文本配置方式的基礎上給一個約定配置的方式讓開發者在大多數情況下可以不配置

  配置也支持硬編碼因為有時候維護可修改的硬編碼是很有效率的

  在攔截請求上能借鑒下RORDjango的思路適應新的Url的需求考慮大家對?後添加屬性的回避支持帶占位符的Url


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26313.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.