IMVC(InstantMVC简称)有几个比较核心的接口,通过对这几个接口的了解,可以更深入的了解IMVC到核心机制。
1.IAction接口
action是整个MVC的核心,如果了解struts或者webwork等MVC框架的朋友应该
知道,action是一个用户处理模块,当MVC容器接受到一个请求的时候,他会通过一定的方法获得一个相应的action类,然后执行action类中
相应的方法,最后返回一个视图给客户端,这就是最普通的mvc框架的流程。和其他框架的action类似,IMVC的action接口也有一个核心方法,
如下
public interface IAction {
/**
* 属性介绍:验证器,放入Map value 的key
*/
public static final String MVC_STATIC_validation="__validation";
/**
* 属性介绍:文件上传 Map value中的key
*/
public static final String MVC_STATIC_createUpload="__createUpload";
/**
* 属性介绍:这是编辑器
*/
public static final String MVC_STATIC_editor="__editor";
/**
* 方法说明:action的核心方法
&
nbsp; * <
span style="color: #808080;">@param object 如果是post方法,object就
是该action对应的form,如果是get方法并且配置get方法没有form
* 那么这里就是null,如果配置get方法也是有form的,这里也是form
*
&
nbsp; * <
span style="color: #808080;">@param value 一个map,在
action中添加内容到view都往这里添加
* @return
* String
*/
public View execute(Object object,Value value);
}
前
面三个变量这里暂时不说,我们来关注最后一个方法,execute,任何action都需要实现这个接口,同时也就是说必须在action中有这个方法。
这个方法有两个传入变量Object和Value,第一个是想要的formBean,如果是get方法并且没有配置get方法设置form,那么这个时候
就是null,如果是非get方法,而且还传入了参数,那么IMVC会自动封装相应的form传入到这个。第二个Value参数,Value也是一个很核
心的接口。在IMVC中有ValueImpl类来实现。
Value 接口:
public interface Value {
public String getString(String key);
public String[] getArray(String key);
public void setObject(String key,Object value);
public Object getObject(String key);
}
ValueImpl 类:
public final class ValueImpl extends HashMap implements Map,Value,InstantValue{
//InstantValue
public void setArray(String key ,String[] arr){
super.put(key, arr);
}
//user Value
public String[] getArray(String key) {
return (String[])super.get(key);
}
public Object getObject(String key) {
return super.get(key);
}
public String getString(String key) {
Object o=super.get(key);
if(o==null){
return null;
}
if(o instanceof String[]){
return ((String[])o)[0];
}else{
return null;
}
}
public void setObject(String key, Object value) {
super.put(key, value);
}
//
以下实现clone。。提供性能
private ValueImpl cloneBase(){
ValueImpl vimpl=(ValueImpl) super.clone();
vimpl.clear();
return vimpl;
}
public static ValueImpl valueImpl=new ValueImpl();
public static ValueImpl cloneSelf(){
return valueImpl.cloneBase();
}
}
这个类也相当简单,我们看第一句:
public final class ValueImpl extends HashMap implements Map,Value,InstantValue
说
明这个类 继承了HashMap,实现了Map,Value,InstantValue 三个接口。这三个接口其实就是三个权限版本,比如Value是用
户操作权限,我们看到在action中传入的是Value,但是在IMVC内部操作的时候是把ValueImpl类转换为InstantValue借口的
InstantValue 接口:
public interface InstantValue {
public void setArray(String key,String[] value);
}
这个几口只有一个方法,这个方法是不会暴露给用户的,是提供IMVC内部设值用的。
下面还有一个拦截器接口
IInerceptor 拦截器接口:
public interface IInterceptor {
public void execute(HttpServletRequest request,HttpServletResponse response,Value value);
}
这个接口也相当简单,只有一个方法,传入request和response参数,同时还有一个Value参数,这个Value上面已经说过,是一个用户操作的数据接口。
整个IMVC流程图简单来说如下:
首先,请求来了后,IMVC会创建一个ValueImp转换为Value传给前拦截器(如果没有设
置就不用),拦截器操作完毕,在把这个ValueImp转换为InstantValue接口传给IMVC内部操作,操作完毕接着把它转化为Value接口
供用户Action操作,最后执行后拦截器,执行完毕转换为Map借口供模板引擎渲染试图。
一个ValueImp要转换为三种权限接口,所以他的实现就要implements 三个接口。
--InstantMVC:j2ee轻量级mvc框架