简略版本MVC框架JWork的实现

1.Servlet结合JSP做MVC三层开发遇到的问题?

接着上一篇博客里面讲的实现一个简略版本的MVC框架,这个框架是基于Servlet技术的,为什么要写这个Mini版本的MVC框架呢,相信做过Servlet和JSP开发的哥们都有一个感受,贴上代码:

public class UserServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码
        request.setCharacterEncoding("UTF-8");

        //获取请求参数
        String method = request.getParameter("method");

        //根据不同的method执行相应的方法
        if("add".equals(method)){
            add(request,response);
        } else if("update".equals(method)){
            update(request,response);
        } else if("delete".equals(method)){
            delete(request,response);
        }
    }

    /* 删除逻辑代码 */
    private void delete(HttpServletRequest request, HttpServletResponse response) {
        //code
    }

    /* 更新逻辑代码 */
    private void update(HttpServletRequest request, HttpServletResponse response) {
        //code
    }

    /* 添加逻辑代码 */
    private void add(HttpServletRequest request, HttpServletResponse response) {
        //code
    }

    /* 方便Post请求和Get请求一起处理的方式 */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

2.框架的诞生解决实际开发遇到的问题

1.为什么要有框架?

框架是用来解决实际的开发问题而出现的。

2.为什么会有MVC?

MVC可以这样理解M是Model的意思 V是View视图而C是控制层,当时Java刚开始做web系统的时候只有JSP,如果将数据库连接和数据显示都放到一个JSP页面中完成,这样页面非常混乱为了解决这个问题诞生了一种解决方案,JSP+Servlet结合开发JSP负责显示数据,连接数据库的逻辑放在Servlet中实现,可以说出现了两层了V+C,可是这样发现数据直接显示中间没有得到数据的复用,如果数据多了不好办了,这个时候JavaBean就加入了进来充当了Model负责数据的封装,封装从数据库读取的数据。到这里MVC就完全出现了。小型网站最适合这种三层架构方案JavaBean+JSP+Servlet

下图可以帮助理解MVC:

3.简略版MVC框架JWork实现方案

以上知道了为什么会出现框架,其实都是为了简化开发。

1.JWork的优点:

a.使用注释进行映射访问URI

b.使用Servlet的方式进行设计

c.约定Action结尾为.go后缀

d.访问传递参数为method方式,不传递则默认执行work方法

e.只需要在web.xml中配置一次servlet

2.JWork实现原理

a.在Web服务器启动的时候,扫描项目中所有编译后的class字节码文件,将有注解部分的字节码文件加载到JVM中虚拟机中,同时将实例化的Action对象和注解路径进行映射。获取所有web请求,根据请求路径到实例化Action对象的JVM容器中查找相对应的Action字节码文件,通过反射调用方法。

b.在实现的过程中自定义类加载器是实现的关键

/*
 * 自定义类的加载器,JDK中没有提供根据路径进行加载类的方法,只能
 * 自定义类加载器根据路径进行加载字节码文件,从而将字节码文件转换
 * 成对象的形式,在JVM启动的时候进行加载
 */
class KylinLoader extends ClassLoader {

    /*
     * 委托父级类加载器进行加载
     */
    public KylinLoader(ClassLoader parent) {
        super(parent);
    }

    public Class load(String path) {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            FileInputStream fis = new FileInputStream(new File(path));
            int len = 0;
            byte buffer[] = new byte[1024];
            //循环读取
            while ((len = fis.read(buffer)) > 0) {
                bos.write(buffer, 0, len);
            }
            //清除数据流缓存
            bos.flush();
            //转换成字节数组
            byte b[] = bos.toByteArray();

            //调用父类的方法完成操作
            return super.defineClass(null, b, 0, b.length);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

为什么要自定义类加载器呢?JDK中没有提供根据路径加载字节码文件的功能所以只有自己实现这个功能,思路是根据路径读取字节码文件,将其转换成字节数组,然后通过JDK提供的defineClass方法将字节码文件真正装载到JVM中以Class对象的形式存在。

c.注解中一定要标明在运行时环境@Retention(RetentionPolicy.RUNTIME)

package org.kylin.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Mapper {
    //映射路径
    String value();
}

以上就把MVC的实现要点说完了,同时这个JWork我在一些小系统中还是经常使用的比Struts2、Spring MVC好用多了,前提是小网站系统。并且JWork已经开源可以到我的GitHub上查看使用和源码。

非常高兴和大家交流学习

自由转载,创意许可,请注明文章来源,来自这里

(http://blog.csdn.net/unikylin)

时间: 2024-10-14 00:48:00

简略版本MVC框架JWork的实现的相关文章

通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[上篇]

<200行代码,7个对象--让你了解ASP.NET Core框架的本质>让很多读者对ASP.NET Core管道有了真实的了解.在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求.在对本章内容展开介绍之前,顺便作一下广告:<ASP.NET Core 3框架揭秘>已经开始销售,现时5折优惠还有最后4天,有兴趣的从这里入群购买. 目录一.Action元数据的解析     ActionDescriptor    

MVC框架

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 外文名 MVC框架 全    名 Model View Controller 产生时间 1982年 架构内容

分享一实战性开源MVC框架&lt;Linux、Windows跨平台开发so easy&gt;

一.引子   开源地址 http://pan.baidu.com/s/1slCMspR .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET Core,因此我们还没有看到一个大型的使用案例, 这时大家或许想到Mono部署ASP.NET MVC,但部署过的人必然知道:这不是一个容易的工作,需要各种工作,至今也没有几个人容易地完成这项工作. .NET Core作为微软的新星,但还不够成熟强大,在其发出耀眼光辉之前,我们分享一实战性强的开源MVC框架: Moon.Mvc

多语言实现(MVC框架)

关于MVC框架实现多语言的陈述: 1.IIS:处理基本的图片,JS库(jquery库,css样式等)的请求. 2.IhttpModel:处理客户端请求,设置Thread.currentThread.ThreadCultureInfo,使得以后用户都能用它为标准返回相应语言的html,css,js文件.(注意:针对controller重写父类也可以实现这种方法,下面的实现就是这样的) 3.Action:处理JS,JSON文件替代工作(在多语言的地方,用某种标记替代),而它对于VIEW的话,交给视图

lua MVC框架 Orbit初探

介绍 http://keplerproject.github.io/orbit/ Orbit是lua语言版本的MVC框架. 此框架完全抛弃CGILUA的脚本模型, 支持的应用, 每个应用可以卸载一个单独的文件中,当然你也可以将它拆为一个文件, 当你需要时候. 此框架运行在WSAPI协议的服务器上,所以可以工作在 Xavante和一些CGI和fastcgi程序上. Orbit is an MVC web framework for Lua. The design is inspired by li

从MVC框架看MVC架构的设计

转自:http://blog.csdn.net/bluishglc/article/details/6690693 从MVC框架看MVC架构的设计 尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念. MVC回顾   作为一种经典到不能再经典的架构模式,MVC的成功有其必然的道理,这个道理不同的人会有不同

自己动手写一个简单的MVC框架(第二版)

一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.Web.Routing.dll中,有一个最重要的类叫做UrlRoutingModule,它是一个实现了IHttpModule接口的类,在请求处理管道中专门针对ASP.NET MVC请求进行处理.首先,我们要了解一下UrlRoutingModule是如何起作用的. (1)IIS网站的配置可以分为两个块:

MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个更加清晰的认识. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6000978.html 这篇博主打算从零开始一步一步来加上MVC里面用到的一些技术,整篇通过三个版本,逐步完善. 一.版本一:搭建环境,实现MVC请求 通过上篇的介绍,我们知道,MVC里面两个最

MVC框架浅析(基于PHP)

MVC框架浅析(基于PHP) MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于 映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 一.MVC概念 MVC 是一种使用 MVC(Model View Contr