> clazz =Class.forName(className);if(clazz.isAnnotationPresent(MyController.class)){ioc.put(toLowerFirstword(clazz.getSimpleName),clazz.newInstance);}else{continue;}} catch (Exception e) {e.printStackTrace;continue;}}}private void initHandlerMapping{if(ioc.isEmpty){return;}try {for (Entry entry: ioc.entrySet) {Class extends Object> clazz = entry.getValue.getClass;if(!clazz.isAnnotationPresent(MyController.class)){continue;}//拼url时,是controller头的url拼上方法上的urlString baseUrl ="";if(clazz.isAnnotationPresent(MyRequestMapping.class)){MyRequestMapping annotation = clazz.getAnnotation(MyRequestMapping.class);baseUrl=annotation.value;}Method methods = clazz.getMethods;for (Method method : methods) {if(!method.isAnnotationPresent(MyRequestMapping.class)){continue;}MyRequestMapping annotation = method.getAnnotation(MyRequestMapping.class);String url = annotation.value;url =(baseUrl+"/"+url).replaceAll("/+", "/");handlerMapping.put(url,method);controllerMap.put(url,clazz.newInstance);System.out.println(url+","+method);}}} catch (Exception e) {e.printStackTrace;}}/*** 把字符串的首字母小写* @param name* @return*/private String toLowerFirstWord(String name){char charArray = name.toCharArray;charArray[0] += 32;return String.valueOf(charArray);}}这里我们就开发完了自己的SpringMVC,现在我们测试一下:
@MyController@MyRequestMapping("/test")public class TestController {@MyRequestMapping("/doTest")public void test1(HttpServletRequest request, HttpServletResponse response,@MyRequestParam("param") String param){System.out.println(param);try {response.getWriter.write( "doTest method success! param:"+param);} catch (IOException e) {e.printStackTrace;}}@MyRequestMapping("/doTest2")public void test2(HttpServletRequest request, HttpServletResponse response){try {response.getWriter.println("doTest2 method success!");} catch (IOException e) {e.printStackTrace;}}}访问
http://localhost:8080/liughMVC/test/doTest?param=liugh 如下:

文章插图
访问一个不存在的试试:

文章插图
到这里我们就大功告成了!
源码地址:
https://github.com/qq53182347/liughMVC
【手撸了一个 Spring MVC 框架】
推荐阅读
-
-
-
封神榜 接引道人,接引道人和准提道人,封神之后都成了谁--
-
-
-
Intel|游戏性能回来了 11代酷睿喜加一:《杀手3》免费送
-
『5g手机』小米又大跳水,5G双模+128GB+120Hz刷新率,上架半个月直降400元
-
安卓|消息称iPhone15全系将采用叹号屏 你会买单?苹果全面屏手机/平板加速到来
-
数控|这两只精选层股票股价接近翻番:汇添富、嘉实、金长川等10家战投赚了
-
雨沐网络孟琬|之前你买过吗,《绝地求生》再无千元以上服饰,
-
医务工作者小贾|指甲上有竖纹,是生病了吗?听听医生怎么说
-
周到|比利时国宴冰淇淋在这未展先销,打造“永不落幕的进博会”,这一主阵地今年还有大变化
-
爱龙爱炫车|突然全身瘫痪,靠轮椅生活,马上要成为湖南台“一姐”
-
最新!紧凑型车“油耗”榜单更新,冠军不足5L,轩逸比朗逸省油
-
大众报业·海报新闻|财鑫闻丨首批200亿科创50ETF本周袭来!科创板50指数值得投吗?
-
香酥|1碗面粉加2个鸡蛋,教你做香酥小饼干,酥香脆爽,比面包还好吃
-
公司|[公司]ST八菱:股票交易异常波动 无未披露重要事项
-
擦肩而过 “擦肩而过”的TCL与华为,终会“相遇”
-
感言|沈梦辰发布视频版淘汰感言:最对不住“大碗宽面”组的伙伴
-
上单|上单霸主老夫子,进阶攻略,进可攻,退可守,上分如喝水