[原]ZolltyMVC框架簡介

Zollty發表於2013-11-29

ZolltyMVC框架是一款輕量級的Java應用程式設計框架(Java Application Framework),融合了常用的IOC/DI、MVC(註解、XML配置式、RESTful風格、模型驅動、檢視模板等)功能。雖說輕量、小巧(只有一個JAR包,幾百KB),但是常用功能一應俱全!!我們致力於幫助大家開發很高效、很靈活、很NICE的應用,並減輕工作量,提高產品質量。

 

一、功能簡介 

 

1)IOC(DI)依賴注入

 

如果你用過Spring,你應該知道IOC這個概念。

引用書上的一個例子:


IOC是ZolltyMVC框架的基礎構件。其底層的實現原理,就是通過Java的反射機制,在這裡不詳細講解。

需要說明的是,ZolltyMVC的IOC遠遠沒有Spring的那麼複雜(但是日常應用應該是足夠了),而且還獨創一些很酷、很實用的用法。

 

關於其用法,我舉個例子:

 

寫一個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只提供最好的、最簡潔高效的那一、兩種方式)。

在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等(前提是,你不需要用它們的那些高階功能)。

 

二、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

作者:zollty 發表於2013-10-11 21:18:26 原文連結
閱讀:24 評論:0 檢視評論

相關文章