天天看點

初覽nutz的DEMO-CMS

很是喜歡國内的開源項目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類,增加的方法很簡單,目标權當是層次劃分或專用處理吧。

此次走馬觀花,僅僅是初體驗^_^!

我還漏掉了什麼?同學們拍磚~