zoukankan      html  css  js  c++  java
  • [原]ZolltyMVC框架简介

    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 查看评论
  • 相关阅读:
    键盘输入thisisunsafe
    vscode
    iterm2 rz sz
    homebrew镜像更换
    mac
    homebrew下载不成功
    shutil:高层文件操作
    tempfile:临时文件系统对象
    linecache:读取文本文件的指定内容
    fnmatch:Unix式glob模式匹配,简单场景下可以代替正则
  • 原文地址:https://www.cnblogs.com/zollty/p/3450143.html
Copyright © 2011-2022 走看看