零配置mvc

31、最简单的mvc框架tiny,增加Ioc,jdbc工具类(1个类),连接池(1个类)

允我心安 提交于 2020-04-07 05:31:27
Ioc 按照mvc,我们需要把tiny分成3层,其中视图(Renderer抽象类)和Action我们已经在前面实现了,这次我们用最少的代码实现Model。 model沿用Action的想法,用户自定义类,类名必须以Model结尾,同Action一样在初始化时放入Container容器内。model就是数据模型,我们这里充血模型,model的类名默认是同数据库的表名做关联的,即类名去掉Model后(转为小写)为表明,这样一对一映射,有时会简单很多,如保存和查询单个表时,当然了你可以传入复杂sql,返回的结果有基本类型、map、list等。 model里需要访问数据库时,我们设计了DbUtil工具类,建议在model里使用,当然了这个还是看你, DbUtil本身没有限制。model是通过ioc注入进来的,在你访问这个action前。下面代码中的Container.inject(o);为容器向action中注入model实例。 Map<String,String> args = this.converter(req.getParameterMap()); String key = UUID.randomUUID().toString(); Container.inject(o); this.before(routes,args,key); Object result = o

1、最简单的mvc框架tiny,3个类,彻底0配置,0注解

时光毁灭记忆、已成空白 提交于 2020-04-07 05:31:16
今天突发奇想,弄个最 最 最 简单的mvc,叫tiny,用3个类(2个类也可以 FrontControl.java和 Container.java )就可以实现mvc功能,彻底0配置,web.xml都不用配置。 类太少了,我不往git和svn上传了,贴代码; FrontControl.java为一个filter,init初始化所有后缀名为Action.class的类,为action类,保存。 doFilter方法将截获到的/ty/*开头的请求( 你可以自己修改下,注意有2处地方 ),做解析成路由,路由格式为“/类/方法”,在解析为数组,传给调用方法。 处理返回类型,有3种,void不处理;/开后,认为具体地址,如/userList.jsp;Renderer渲染器,我默认实现很多种(jsp、javascript、text、二进制、文件),你可以自己重写。 package tiny; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean;

30、最简单的mvc框架tiny,增加Aop

偶尔善良 提交于 2020-04-07 05:31:05
最简单的mvc框架tiny,增加Aop功能。 增加Aop接口,使用是实现即可。 然后设置路由(访问的action)和aop的绑定信息,类似如下: 下面的意思是把路由"/TinyTest/hello/"和TestAop.class做绑定,这样执行类TinyTestAction的hello方法时,就会自动执行 TestAop的before和after方法。 下面的BindingAop 的init方法,需要自己设置。系统启动时会自动读取。 public class BindingAop { public static void init(){ BindingUtil.binding("/TinyTest/hello/", new Class[]{TestAop.class}); BindingUtil.binding("/TinyTest/*", new Class[]{TestAop2.class}); } } Aop.java package tiny; import java.util.Map; public interface Aop { void before(Map<String,String> args); void after(Map<String,String> args); } BindingAop.java package tiny; import web

32、最简单的mvc框架tiny,orm、原理图、问题与解决思路

拈花ヽ惹草 提交于 2020-04-07 05:30:54
orm 先说下orm,在前面我们没有提这个,其实我们已经实现了orm功能。 这里把orm做了极大的简化,以一个model映射到数据库的一张表。在前面看到我们把业务处理也放在model里,所以这时model才是真正的充血模型,并把对数据库的操作封装为dao,所以orm其实为model+dao。 Tiny v1.0框架原理图 再补一下框架的原理图 Tiny v2.0 设计中。。。(先贴个图) Tiny框架的问题及解决思路 问题1: 参数类型Map<String,String> 问题 我们规定所有参数都为Map<String,String>,中值都为String类型确实有点不好让人接受(虽然从页面传递过来的,都是String类型), 现在我们想 参数转型的 工作由tiny来完成, 我们怎么解决这个问题呢? 解决思路: 重写一个TinyMap类继承HashMap。 我们实现getInt,getString等方法,调用这些方法 可以对类型自动转换,当使用get方法时,其实是调用HashMap的get方法,放回object类型,代码如下: TinyMap tMap = new TinyMap(参); tMap.getInt(key); tMap.getString(key); tMap.get(key);//Ojbect 然后由前置控制器中将页面的参数转换为TinyMap类型

33、最简单的mvc框架tiny,自动转型TinyMap

痴心易碎 提交于 2020-04-07 04:58:08
前面我说的实现一个自动转型功能的TinyMap,实现思路前面已经说过,我引用下 解决思路: 重写一个TinyMap类继承HashMap。我们实现getInt,getString等方法,调用这些方法可以对类型自动转换,当使用get方法时,其实是调用HashMap的get方法,放回object类型,代码如下: TinyMap tMap = new TinyMap(参); tMap.getInt(key); tMap.getString(key); tMap.get(key);//Ojbect 然后由前置控制器中将页面的参数转换为TinyMap类型(现在转换为HashMap),最后放入action参数中。由于action中参数为map接口,所有对原设计无影响,用户可同时使用HashMap和TinyMap的方法。 TinyMap.java package tiny; import java.util.Date; import java.util.HashMap; public class TinyMap extends HashMap<String, Object> { public TinyMap() { super(); } public TinyMap(HashMap<String, Object> map) { super(); this.putAll(map); } public