疯子在思考之自己动手写MVC
MVC-1
http://lizhizhang.iteye.com/blog/1912005
MVC-2
http://lizhizhang.iteye.com/blog/1913546
自己动手写MVC3,前两篇我们分析了MVC的基础,在这里大家对main函数有争论,接下来会有java多线程的文章,与大家分享。(这里会略带一些tomcat main函数的内容)。
第二篇介绍了为什么要用MVC以及MVC的概念,即什么是MVC。
通过以上的了解,我个人认为,对于开发者来讲,MVC的filter即我们在web.xml中配置的拦截器是不重要的,框架为我们写好了,我们做的事情就是配置一下就可以了,而我们更关注具体的业务逻辑和VIEW,而如果我们自己写一个MVC那么,我觉得关注点就是开发人员不关心的那部分。即filter。业务逻辑和VIEW要留给开发人员自己实现。
那么filter中具体要实现哪些功能呢?
1、action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行
参考struts及spring mvc其实有两种实现方法,对比而言,spring mvc的方法更简单效率更高。
这里附参数注入代码
methodAccessor的思想是这样的
对于模型驱动而言,这里没有采用jdk反射或cglib字节码反射,而是生成一个代理类来变相反射(实际上是对象方法的直接调用)对于这部分思考有兴趣的朋友可以参考reflectasm。
其他代码可以在框架中下载
http://lizhizhang.iteye.com/blog/1896545
有什么意见或建意可以在这里拍砖。
MVC这部分比较简单,大家有什么好想法可以继续补充,接下来ORM....
http://lizhizhang.iteye.com/blog/1912005
MVC-2
http://lizhizhang.iteye.com/blog/1913546
自己动手写MVC3,前两篇我们分析了MVC的基础,在这里大家对main函数有争论,接下来会有java多线程的文章,与大家分享。(这里会略带一些tomcat main函数的内容)。
第二篇介绍了为什么要用MVC以及MVC的概念,即什么是MVC。
通过以上的了解,我个人认为,对于开发者来讲,MVC的filter即我们在web.xml中配置的拦截器是不重要的,框架为我们写好了,我们做的事情就是配置一下就可以了,而我们更关注具体的业务逻辑和VIEW,而如果我们自己写一个MVC那么,我觉得关注点就是开发人员不关心的那部分。即filter。业务逻辑和VIEW要留给开发人员自己实现。
那么filter中具体要实现哪些功能呢?
1、action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行
参考struts及spring mvc其实有两种实现方法,对比而言,spring mvc的方法更简单效率更高。
这里附参数注入代码
private Object[] actionIoc(ServletRequest request, ActionEntity actionEntity) {
// 参数名称列表
List<String> parameterList = actionEntity.getParameterNameList();
Class<?>[] parameterClass = actionEntity.getMethod()
.getParameterTypes();
BeanFactory beanFactory = BeanFactory.getInstance();
// 参数列表
Object[] args = new Object[parameterList.size()];
for (int i = 0; i < parameterList.size(); i++) {
String parameterName = parameterList.get(i);
// 如果是基本数据类型
if (parameterClass[i].equals(String.class)) {
args[i] = request.getParameter(parameterName);
} else {
Object entity = null;
try {
entity = parameterClass[i].newInstance();
} catch (Exception e) {
Log.getInstance().error(e);
return null;
}
MethodAccessor methodAccessor = beanFactory
.getProxyBean(parameterClass[i].getSimpleName());
Method[] methods = parameterClass[i].getMethods();
for (Method method : methods) {
if (method.getName().startsWith("set")) {
String parameterName4Request = parameterName
+ "."
+ StringUtil.setFirstByteLowerCase(method
.getName().substring(3));
methodAccessor.set(entity, method.getName(),
request.getParameter(parameterName4Request));
}
}
args[i] = entity;
}
}
return args;
}
methodAccessor的思想是这样的
对于模型驱动而言,这里没有采用jdk反射或cglib字节码反射,而是生成一个代理类来变相反射(实际上是对象方法的直接调用)对于这部分思考有兴趣的朋友可以参考reflectasm。
其他代码可以在框架中下载
http://lizhizhang.iteye.com/blog/1896545
有什么意见或建意可以在这里拍砖。
MVC这部分比较简单,大家有什么好想法可以继续补充,接下来ORM....
浙公网安备 33010602011771号