• 疯子在思考之自己动手写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的方法更简单效率更高。

    这里附参数注入代码
    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....
  • 相关阅读:
    xpath 笔记
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    机器学习 实验二 K-近邻算法及应用
    实验一 感知器及其应用
    JAVA学习路线
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验1:软件开发文档与工具的安装与使用
    ATM管理系统
  • 原文地址:https://www.cnblogs.com/hiaming/p/8967796.html
Copyright © 2020-2023  润新知