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