很是喜歡國内的開源項目nutz,不僅是它的簡易易用,功能齊全;更是裡面包含項目團隊的認真的執着。
正文開始~~
今晚由于zxh冒雨溜達去了,和群内的小靈同學吹了一下水,無所事事之餘,懷着無尚緻敬的心情,深入學習的态度,打算好好學習一下nutz的綜合demo-CMS。
大緻看了一圈記錄一下自己覺得關鍵的地方,再深入的地方黑盒化,大家可以看nutz的源碼。
真正的正文開始~~~
1.WEB.xml,大家都知道,這是配置入口。
NutzFilter做了幾件事
獲得MainModule來初始化Ioc容器,主要看MainModule的@IocBy的args讀取的json配置檔案和掃描的包;
建構ActionHandler,主要就是每個Action的URL映射,然後每次對通路的URL進行攔載,指向Action的方法。
其它内容可檢視控制台輸出,或斷點到doFilter方法來檢視執行情況。
2.知道nutz是怎麼在cms裡初始化後,就可以直接通路http://localhost:8080/cms。
當nutzFilter攔截到這個通路的URL後,就會在handler(ActionHandler)裡找到IndexAction。
沒錯,檢視IndexAction可以看到類的注解有:
@At("/")
@Fail("jsp:error.404")
看就明白了,映射的是上下文的根目錄,失敗時。。。
于是,Nutz就會建構IndexAction:
NutIoc會把datasource.json的dao就注入到BasicDao中,BasicDao又注入到BaseAction中,一系列的動作後,Make...'indexAction'。
[http-apr-8080-exec-2] DEBUG org.nutz.mvc.impl.UrlMappingImpl - find mapping (DEFT&[]) for path '/'
[http-apr-8080-exec-2] DEBUG org.nutz.ioc.impl.NutIoc - Get 'indexAction'<class com.scxxs.cms.controller.IndexAction>
[http-apr-8080-exec-2] DEBUG org.nutz.ioc.impl.NutIoc - >> Load definition
[http-apr-8080-exec-2] DEBUG org.nutz.ioc.loader.combo.ComboIocLoader - Found IocObject(indexAction) in IocLoader(AnnotationIocLoader[basicDao, indexPicAction, navModelAction, messageTypeAction, articleTypeAction, messageTypeDao, task, managerDao, templeteAction, articleAction, siteAction, roleAction, taskExcutor, adminAction, contactAction, indexAction, oneArticleAction, groupAction, oneArticleTypeAction, permissionAction, downloadAction, linkAction, messageAction])
[http-apr-8080-exec-2] DEBUG org.nutz.ioc.impl.NutIoc - >> Make...'indexAction'<class com.scxxs.cms.controller.IndexAction>
嗯,延時建構,不錯!
3.IndexActon的index方法主體
1.查詢了幾個資料集合出去,newses、reports、pics、groups、link1、link2、link3。
2.最後return new JspView("upload.index");很明顯,指向項目upload目錄的index.jsp顯示頁面。
3.由index.jsp中可以看到應用了jstl、fckeditor和自定義的security标簽來作頁面資料顯示用。
4.回過頭來看整個項目的架構規劃
1.基于nutz的主體應用,周邊增加了一些工具類。
2.dao包,主要是注入nutz的Dao類來建構了一個泛型接口的BasicDao,這裡可以看作是對nutz的一個隔離或對項目DAO的規範,思路很清析的。
3.沒有service包,估計是網站應用很簡單,直接在action包裡注入BasicDao來解決資料存儲的問題
4.項目各個資料表對應的實體類都放在model包了,這方面應該細化看看各實體的關系建構。
5.餘下的編輯器fckeditor、上傳工具類、字元存儲壓縮等放在util,配置檔案就不說了吧
6.有趣的是,在BasicDao的基礎上,作者寫了ManagerDao、MessageTypeDao兩個專用DAO類,增加的方法很簡單,目标權當是層次劃分或專用處理吧。
此次走馬觀花,僅僅是初體驗^_^!
我還漏掉了什麼?同學們拍磚~