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 查看评论

[原]ZolltyMVC框架简介的更多相关文章

  1. Hadoop MapReduceV2(Yarn) 框架简介[转]

    对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 H ...

  2. Hadoop MapReduceV2(Yarn) 框架简介

    http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详 ...

  3. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  4. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  5. 《HiWind企业快速开发框架实战》(0)目录及框架简介

    <HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...

  6. Yaf零基础学习总结1-Yaf框架简介

    从今天开始,给大家讲解下yaf框架,讲解之前肯定要了解下yaf是个什么东西,当然,从标题我们已经知道yaf是个PHP框架了,也许大家对于PHP框架并不陌生,一般PHP程序员用过的框架至少有一两个吧,国 ...

  7. hdwiki 框架简介

    虽然HDwiki是一个开源的wiki系统,并且代码简洁易懂,但如果想在系统上做做进一步开发还需要对框架有一个整体的认识.熟悉了HDwiki的框架以后完全可以独立出来做其他功能的开发,当做一个开源的PH ...

  8. Apache—DBUtils框架简介

    转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner ...

  9. Jersey框架一:Jersey RESTful WebService框架简介

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

随机推荐

  1. git tag的用法

    我们常常在代码封板时,使用git 创建一个tag ,这样一个不可修改的历史代码版本就像被我们封存起来一样,不论是运维发布拉取,或者以后的代码版本管理,都是十分方便的 git的tag功能 git 下打标 ...

  2. MySQL开发——【介绍、安装】

    什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 数据库的分类? 关系型数据库 ...

  3. C++中重载操作符[ ]

    1.首先说说为什么要重载操作符[ ] 主要是因为系统只给了整数类型(int)的重载函数,即只能在方括号中输入整数进行查找,但有时候我们可能存放数据时,下标的类型是自定义的,希望也能像数组直接通过下标访 ...

  4. spring boot项目升级到2.0.1,提示java.lang.ClassNotFoundException: org.apache.log4j.Logger错误

    首先肯定是版本出现了一点兼容问题 所以我就进入项目,查看依赖树,cd到项目目录下,mvn dependency:tree 我看到我的项目原先是1.5.9和现在2.0.1的区别在于org.slf4j的依 ...

  5. android studio 关闭SVN关联

    <?xml version="1.0" encoding="UTF-8"?> <project version="4"&g ...

  6. 谷歌发布了 T2T(Tensor2Tensor)深度学习开源系统

    谷歌开源T2T模型库,深度学习系统进入模块化时代! 谷歌大脑颠覆深度学习混乱现状,要用单一模型学会多项任务 https://github.com/tensorflow/models https://g ...

  7. 1.3eigen中数组类和系数的运算

    1.3数组类和系数的运算 与矩阵类只适用与线性代数运算相反,数组类提供通用的数组类,能不利用线性代数的知识来对系数进行操作,比如对每个系数加上一个常数,或者乘上两个数组的系数. 1.数组类型 跟矩阵类 ...

  8. Mac os下android studio模拟器无法联网解决方法

    步骤1: https://blog.csdn.net/qq_33945246/article/details/79908298 步骤2: 访达进入/Users/文件夹 步骤3: shift+cmman ...

  9. J2CACHE 两级缓存框架

    概述 缓存框架我们有ehcache 和 redis 分别是 本地内存缓存和 分布式缓存框架.在实际情况下如果单台机器 使用ehcache 就可以满足需求了,速度快效率高,有些数据如果需要多台机器共享这 ...

  10. [GO]简单的http服务器和客户端的实现

    package main import ( "net/http" "fmt" ) func Hello(w http.ResponseWriter, r *ht ...