一、框架简介

本框架是一个类似于Struts2+Spring的框架,目的在于个人钻研和技术分享,将流行技术框架Struts2、Spring中使用到的主要技术以较为简化的方式实现出来,给大家一个更直观的呈现。(注意:本框架本身不够完善,还不足以用于商用业务开发,代码可能存在缺陷,部分功能还有优化空间;同时要说明,Struts2、Spring的实际实现较为复杂(自然功能也强大),本框架借鉴中他们本来的一些实现方式,但也做了较大改动和简化)

二、涉及到的主要技术点

1.MVC三层分离(参考资料:Struts2与MVC基础入门

1)M(Model)为业务处理逻辑处理及持久化操作等

2)V (View)为页面呈现,本架构中通过JSP呈现,Struts2中还可以通过VelocityFreemarker来做展示。

3)C (Controller) 为action控制对各逻辑模块的调用和到视图层的跳转。

实现方式:

采用了类似struts2的配置文件格式,用于定义action、调用方法及跳转。

页面可以提交数据到Action中使用,Action中可以将数据写入Request或Session中,在JSP页面可以通过request.getAttribute或session.getAttribute方式获取到。

2.IOC容器(参考资料:IOC容器

实现方式:采用了类似Spring的配置文件格式,用于定义各种bean及bean间依赖,支持单实例配置。

3.AOP (参考资料:Spring AOP 详解java动态代理)

实现方式:采用了不同于Spring的aop配置,做了简化,可以用于定义切面和对应的切面操作类。说实话,AOP这些概念说起来非常晦涩难懂,简单点说,就是利用java里的动态代理机制,对指定的一些类中的一些方法进行拦截,在这些方法执行前后插入自定义的一些操作。如在所有action类中add方法前增加一个记录日志的操作,对于所有update方法记录执行所需要的时间。除了日志的记录,比较常用的还有事务。 不过始终铭记于心,这样的拦截对我们自己的代码都是有要求的,如你指定对add开头的方法进行拦截(方法关键字支持模糊匹配,*代表多个字符),那么自己所开发的所有代码在命名时必须要满足这个格式,如果命名为Add(a变成了大写的了),那就拦截不到了。当然,如果你把拦截的范围设置的大了,则有可能误伤,把一些本不应拦截的也给拦截了。

4.与Mybatis集成

实现方式:与mybatis 3.2.7进行集成,支持一个工厂类来产生SqlSessionFactory对象,用于DAO类中进行调用。

三、本框架与Struts2、Spring框架差异之处

1)没有支持Struts2中带有的拦截器功能

2)AOP实现方式与Spring的实现方式有差别,配置文件有较大变化

还有其他的差异,这里不一一赘述。

四、源代码下载:

https://github.com/jerrymousecn/miniMVC

其中mybatis_demo目录为与mybatis集成的样例,里面使用的数据库是mysql。

mybatis_demo\miniMVC_mybatis\mysql.sql文件为数据库表及数据创建语句;

如果需要使用此样例,需要检查ibatisConfiguration.xml中数据库配置是否正确(文件位于:mybatis_demo\miniMVC_mybatis\src\cn\jerry\mini_mvc\example\config\);

如果要自己编写其他的样例,则需要注意StudentMapper.xml、ibatisConfiguration.xml中各种路径配置是否正确(具体参考mybatis相关资料,本框架未对mybatis配置做出任何改变)

本文编写时,对于的代码发布版本:https://github.com/jerrymousecn/miniMVC/archive/1.7.zip

注:导入eclipse项目时要注意修改项目属性中"Java Build Path"对应的JRE路径,修改"Targeted Runtimes"对应的容器配置。

五、主要源代码:

1.Action控制类,入口过滤器

2.对象工厂类,用于实现IOC容器,生成各种bean,支持单例模式

3.AOP代理生成类(通过cglib方式生成)

截图:

1.输入框页面,输入姓名

2.结果页面,显示一个欢迎信息,其中的姓名来自前一个提交的页面

后台打印信息(大部分是AOP类打印的,用于展示AOP操作):

BeforeAdviceImpl1 targetObj: TestAction method: execute

AroundAdviceImpl1 targetObj: TestAction method: execute

test1 in TestDao ...

AroundAdviceImpl1 targetObj: TestAction method: execute

Time Elapsed: 1 ms

AfterAdviceImpl1 targetObj: TestAction method: execute






自己实现的简单MVC框架(类似Struts2+Spring)的更多相关文章

  1. 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系

    #[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 ![关系图解](http://images.cnitblog.com/blog/84 ...

  2. JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系

    郭晨 软件151 1531610114 [整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 visio文件下载 概述 一个JavaEE的项 ...

  3. 使用Java元注解和反射实现简单MVC框架

    Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...

  4. 简单mvc框架核心笔记

    简单mvc框架核心笔记 看了thinkphp5的源码,模仿写了一个简单的框架,有一些心得笔记,记录一下 1.目录结构 比较简单,没有tp那么复杂,只是把需要的核心类写了一些. 核心类库放在mykj里, ...

  5. 经典MVC框架技术-struts2基础知识

    Struts2框架简介 struts2框架是在struts1和webwork技术的基础上,进行合并的全新框架,struts2以Webwork为核心,采用拦截器来处理用户的请求,这样的设计使得业务逻辑控 ...

  6. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  7. Struts2框架07 Struts2 + Spring + Mybatis 整合

    1 导包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...

  8. 手写一个自己的简单MVC框架myPHP

    myPHP框架 采用的是MVC 思想,应用纯面向对象及项目单一入口,实现的一个自定义的框架.(自己兴趣的练习) 一.项目单一入口 入口文件 myphp\index.php前台 一个网站所有的请求都请求 ...

  9. 简单实用后台任务执行框架(Struts2+Spring+AJAX前端web界面可以获取进度)

    使用场景: 在平常web开发过程中,有时操作员要做一个后台会运行很长时间的任务(如上传一个大文件到后台处理),而此时前台页面仍需要给用户及时的进度信息反馈,同时还要避免前台页面超时. 框架介绍: 本架 ...

随机推荐

  1. NOI2012 魔幻棋盘

    http://www.lydsy.com/JudgeOnline/problem.php?id=2877 二维线段树. 好恶...... B类数据: 棋盘是一维的. 我们有一个结论: $gcd(a_{ ...

  2. C# 实现MD5 Hash 计算

    C#提供了一系列的加密库,可以让我们自由使用,这里我来介绍如何使用C#的加密库实现MD5 hash值的计算工作. 参考代码: private static String CalcMd5(String ...

  3. WPF - 使用WPF创建图表

    最近有点想把自己的项目里面加入图表,让程序看起来高大上起来.没办法,很大一部分要靠包装,使用好图表,让程序图文并茂,就是包装的一个好法子.. WPF toolkit里面有常见的图表控件 如何使用: h ...

  4. 有关JAVA基础学习中的集合讨论

        很高兴能在这里认识大家,我也是刚刚接触后端开发的学习者,相信很多朋友在学习中都会遇到很多头疼的问题,希望我们都能够把问题分享出来,把自己的学习思路整理出来,我们一起探讨一起成长.    今天我 ...

  5. App上线流程全攻略(续)-iOS8之后的改动与所遇日常错误

    随着iOS8的公布,iTunes Connect的界面也是发生了非常大的改变,App 上传到 Store上面的步骤也是发生了些改变.以下继续用图说话: /*********************** ...

  6. 软件project(五)——可行性研究

    一.目的 用最小的代价高效率的确定问题是否可以解决. 不是去解决这个问题,而是确定问题是否值得去解决.进行可行性研究简化了系统分析和系统设计的过程. 二.任务 (1)进一步分析问题定义. (2)分析员 ...

  7. HDOJ 4937 Lucky Number

    当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...

  8. 【转】iOS开发24:使用SQLite3存储和读取数据

    转自:http://my.oschina.net/plumsoft/blog/57626 SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效.SQLite3使得不必将每个对象都加 ...

  9. 关于java中根据身份证求生日和年龄的问题

    /*这个也没什么大的功能,也没什么安全验证,只是对输入的身份证号码的长度进行了验证.其他的功能可以自己添加.*/import java.util.*; import java.util.Scanner ...

  10. (转)vivoxshot 精英版三模转五模模式切换操作方法

    https://yunpan.cn/cPUBWc8vtKpID (提取码:de92) 本帖最后由 韩爱峰 于 2016-3-29 23:00 编辑 碰到不少机友在使用过程中操作不成功,现将我的方法跟大 ...