手写springmvc
https://my.oschina.net/liughDevelop/blog/1622646
https://www.jianshu.com/p/f454662f497e
1 扫描基包全部所有带有基本全限定名
class.getclasslocad(packeurl);
遍历file 如果是目录继续递归 是文件 就把 D:aa/bb/cc 下面的变成 aa.bb.cc.userImpl全限定名 最后放入 list<String> packageName 中
2 ioc实列化 生成map
再遍历packageName 根据全限定名 生成 class c 对象 根据反射 找到对应@controller@service 最后用个map装 (aa.bb.cc.userImpl 和生成的对象) 依赖DI也是类似原理
3 建立URL和处理器的关系
再建立url和hander对应关系 map中后再用 循环找到 全限定名字 找到class对象 class对象上面有controller注解 获取注解后面 那个值 urlmap.add(/aa) 获取@requestMapping后面的值 urlmap.add(/bb) 最后存放map (baserul(aa/bb) , method(就是hander) )
还有一个map (method,全限定名的)
4在doget dopost中处理数据
根据URL找到处理method 再根据method 找到全限定名 再找已经实例化对象。 再用方法反射 method.invoke(UserController) 这样就完成了。
处理器适配器
http://blog.csdn.net/wangbiao007/article/details/50547020
http://blog.csdn.net/bu123dian/article/details/52778870
http://blog.csdn.net/csdn_gia/article/details/54970865
适配器模式就是根据controller找到合适的处理方式 比如 返回modelAndView 还是直接返回
- request.setAttribute("message", "我是中国人");
- request.getRequestDispatcher("/WEB-INF/jsps/mess.jsp").forward(request, response);
浙公网安备 33010602011771号