ZolltyMVC框架是一款輕量級的Java應用編程框架(Java Application Framework),融合了經常使用的IOC/DI、MVC(註解、XML配置式、RESTful風格、模型驅動、視圖模板等)功能。雖然說輕量、小巧(只有一個JAR包,幾百KB),可是經常使用功能包羅萬象!!咱們致力於幫助你們開發很高效、很靈活、很NICE的應用,並減輕工做量,提升產品質量。html
1、功能簡介 前端
1)IOC(DI)依賴注入java
若是你用過Spring,你應該知道IOC這個概念。jquery
引用書上的一個例子:git
IOC是ZolltyMVC框架的基礎構件。其底層的實現原理,就是經過Java的反射機制,在這裏不詳細講解。github
須要說明的是,ZolltyMVC的IOC遠遠沒有Spring的那麼複雜(可是平常應用應該是足夠了),並且還首創一些很酷、很實用的用法。web
關於其用法,我舉個例子:編程
寫一個JSP,而後寫一個Action,一個Service類,後面再寫一個DAO後端
即一般所說的三層結構,將DAO配置給Service,再把Service配置給Action。設計模式
這個功能比較流行的寫法是SSH(Struts+Spring+Hibernate),或者SpringMVC+JdbcTemplate。
傳統寫法,一個JSP,好比用戶註冊。代碼略。
一個Action/Controller類。好比UserAction
public class UserAction{ private IUserService userService; public IUserService getUserService(){ return this.userService; } …… }
同理,還有UserServiceImpl類,裏面集成了UserDAO……而後UserDAO裏面又集成了數據源……代碼略。
用普通Struts+Spring的話,就要進行一些XML配置,使用SpringMVC的話,能夠XML配置,也可使用註解配置。
使用ZolltyMVC也很容易作到這一點,和SpringMVC相似,可是比SpringMVC乾脆直接。(Spring爲了兼容老版本,有許多冗餘的東西(所謂條條大路通羅馬,Spring中有多種方式能夠通羅馬,而ZolltyMVC只提供最好的、最簡潔高效的那1、兩種方式)。
在ZolltyMVC中,推薦使用註解模式:
public class UserAction{ @Inject private IUserService userService; …… }
看到沒,多麼簡潔,連set/get方法均可以省了(由於我經過Java反射,直接將屬性值和對象綁定)。
固然,在ZolltyMVC中,也支持XML配置,例如:
<bean id="user" class="com.test.User" > <property name="name" >zollty</property> <property name="age" value="26" /> </bean> <bean id="user" class="com.test.UserDemo" > <property name="user" ref="user"/> </bean>
以上的這些,都是初級用法,ZolltyMVC的IOC還支持一些高級用法,好比給方法注入類的實例:
@Inject
public void setUser(User user) {
this.user = user;
}
還好比支持複合對象:
<bean id="user2" class="com.test.User > <property name="name" value="zollty" /> <property name="age" value="26" /> <property name="students" > <list> <value>jack</value> <value>lily</value> </list> </property> </bean>
還好比支持從方法中獲取一個對象實例:
<bean id="dataSource" class="org.test.JndiCreator#getDataSource" > <property name="jndiName" value="jdbc/web"/> </bean>
我參考了Spring的設計,頂層是定義了一個BeanFactory來容納這些bean實例的。
借用Spring的BeanFactory設計圖來讓你們看看:
這一套東西有點多,但倒是框架的基礎。從最基礎的簡陋模型,到參考Spring的設計,再到我本身重寫了兩遍,保證了這套東西的高效和高擴展性。
並且,從個人設計上,體現了一個基礎性的東西:
該IOC框架能夠:
1,徹底基於XML配置,或者徹底基於註解配置,或者基於XML和註解的混合配置;
2,能夠用於Web環境的項目,也能夠用於純JavaSE的非Web項目。
3,高屋建瓴,頂層只實現了一些基礎性的、共有性的東西,外層能夠擴展,實際上Web層也是IOC的一個擴展(WebApplicationContext)
2)控制器Action/Controller
控制器是MVC框架的核心,它鏈接了WEB的前端和後端。
ZolltyMVC的控制器,是基於原生Servlet進行設計的。有相似於SpringMVC的地方,可是效率比SpringMVC要高不少!
其實,最初我並無想寫一個MVC框架,我只是想基於Servlet寫一個「請求轉發控制器」,借鑑了OSChina創始人紅薯的寫法和RESTful的設計模式,以及Struts、Spring的具體實現方式,摸索出了一條極爲便捷易用的道路。
下面是一個UserController
@Controller public class UserController{ @RequestMapping("/admin/logout") public View logout(HttpServletRequest request){ try { request.getSession().invalidate(); }catch (Exception e) {} return new RedirectView("/admin?info=bye"); } @RequestMapping("POST:/admin/login") public View login(@HttpParam("userName")String userName, @HttpParam("password")String password){ // ……省略 return new JspView("/admin/main.jsp"); } }
看上面的代碼,登陸的時候,訪問的URL爲http://www.zollty.com/admin/login,ZolltyMVC框架會按照這個URL定位到login()這個方法,而後把參數自動賦值進去。而後login方法執行完會返回到一個視圖(View,視圖能夠是JSP、HTML、XML、模板、靜態文件等等)。這樣作會很是方便,編程更爲靈活。
支持返回的類型包括(但不限於)以下類型:
JspView
HtmlView
TextView
JsonView
傳入的參數,也能夠是一個POJO對象類型,好比寫一個VO,ZolltyMVC能夠把頁面參數自動封裝成VO對象傳進來……這一切其實經過Java反射很容易實現。
對於URL的支持,ZolltyMVC支持原生RESTful,固然,你也能夠不遵循RESTful風格,我我的以爲OSChina那種URL風格更簡潔、優雅,好比:
http://www.oschina.net/code
http://www.oschina.net/blog
http://www.oschina.net/code/tag/jquery
http://www.oschina.net/code/list?lang=java
其實你若是不想用任何框架,你能夠像OSChina那樣,本身寫一個Servlet轉發控制器。不過,ZolltyMVC就是在簡單的Servlet轉發控制器的基礎上發展起來的,因此簡潔、高效。
ZolltyMVC能夠和其餘框架混合使用。不過,建議你使用ZolltyMVC代替SpringMVC、Struts等(前提是,你不須要用它們的那些高級功能)。
2、ZolltyMVC入門教程
1)新建一個動態web項目,引入zollty-mvc-1.0.7.jar包。
2)新建一個HelloController.java(假設包爲com.zolltymvc.demo),內容以下:
@Controller public class UserController{ @RequestMapping("/admin/logout") public View logout(HttpServletRequest request){ try { request.getSession().invalidate(); }catch (Exception e) {} return new RedirectView("/admin?info=bye"); } @RequestMapping("POST:/admin/login") public View login(@HttpParam("userName")String userName, @HttpParam("password")String password){ // ……省略 return new JspView("/admin/main.jsp"); } }
而後,在/WEB-INF/pages目錄下,新建一個hello.jsp,內容大概以下
<html> <head> <metahttp-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <p>${msg}</p> </body> </html>
再弄一下配置,在classpath目錄下,新建一個zollty-mvc.xml,內容以下:
<?xmlversion="1.0" encoding="UTF-8"?> <beans xmlns="http://www.zollty.org/mvc/schema/beans"> <!-- 包的掃描路徑--> <component-scan base-package="com.zolltymvc.demo" /> <!-- 視圖路徑 --> <mvc view-path="/WEB-INF/pages" view-encoding="UTF-8" /> <!-- 指定日誌實現類 --> <logger class="ConsoleLogger" level="DEBUG" /> </beans>
這幾個配置很簡單吧,而後在找到web.xml,讓web容器啓動時加載ZolltyMVC框架,配置以下:
<listener> <listener-class>org.zollty.framework.mvc.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>zolltyMVC</servlet-name> <servlet-class>org.zollty.framework.mvc.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>zolltyMVC</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping>
OK,這樣項目發佈到服務器上,訪問 http://www.zollty.com/app/hello 便可看到咱們的輸出內容了!
稍後附上Demo下載,連項目帶jar一共大小才幾百kb!本身動手試試吧!今後,你就多了一種輕量級的MVC框架選擇。
ZolltyMVC項目開源地址:
http://code.google.com/p/zollty-mvc/
https://github.com/zollty-org/zollty-mvc