Java WEB開發框架 Paoding-Rose
Rose (原名 Paoding-Rest) 是一個基于Servlet規范、Spring“規范”的WEB開發框架。
Rose 框架通過在web.xml配置過濾器攔截并處理匹配的web請求,如果一個請求應該由在Rose框架下的類來處理, 該請求將在Rose調用中完成對客戶端響應. 如果一個請求在Rose中沒有找到合適的類來為他服務,Rose將把該請求移交給web容器的其他組件來處理。
Rose使用過濾器而非 Servlet來接收web請求,這有它的合理性以及好處。
Servlet規范以“邊走邊看”的方式來處理請求, 當服務器接收到一個web請求時,并沒有要求在web.xml必須有相應的Servlet組件時才能處理,web請求被一系列Filter過濾時, Filter可以拿到相應的Request和Response對象 ,當Filter認為自己已經能夠完成整個處理,它將不再調用chain.doNext()來使鏈中下個組件(Filter、Servlet、JSP)進行處理。
使用過濾器的好處是,Rose可以很好地和其他web框架兼容。這在改造遺留系統、對各種uri的支持具有天然優越性。正是使用過濾器,Rose不再要求請求地址具有特殊的后綴。
為了更好地理解,可以把Rose看成這樣一種特殊的Servlet:它能夠優先處理認定的事情,如無法處理再交給其它Filter、Servlet 或JSP來處理。這個剛好是普通Servlet無法做到的 : 如果一個請求以后綴名配置給他處理時候 ,一旦該Servlet處理不了,Servlet規范沒有提供機制使得可以由配置在web.xml的其他正常組件處理 (除404,500等錯誤處理組件之外)。
一個web.xml中可能具有不只一個的Filter,Filter的先后順序對系統具有重要影響,特別的,Rose自己的過濾器的配置順序更是需要講究 。如果一個請求在被Rose處理前,還應該被其它一些過濾器過濾,請把這些過濾器的mapping配置在Rose過濾器之前。
RoseFilter 的配置,建議按以下配置即可:
<filter> <filter-name>roseFilter</filter-name> <filter-class>net.paoding.rose.RoseFilter</filter-class> </filter> <filter-mapping> <filter-name>roseFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>
1) 大多數請況下,filter-mapping 應配置在所有Filter Mapping的最后。 2) 不能將 FORWARD、INCLUDE 的 dispatcher 去掉,否則forward、 include的請求Rose框架將攔截不到
Rose 框架內部采用"匹配 ->執行"兩階段邏輯。Rose內部結構具有一個匹配樹, 這個數據結構可以快速判斷一個請求是否應該由Rose處理并進行, 沒有找到匹配的請求交給過濾器的下一個組件處理。匹配成功的請求將進入”執行“階段。 執行階段需要經過6個步驟處理:“參數解析 -〉 驗證器 -〉 攔截器 -〉 控制器 -〉 視圖渲染 -〉渲染后"的處理鏈。