手撸了一个 Spring MVC 框架( 三 )

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 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 如下:

手撸了一个 Spring MVC 框架

文章插图
访问一个不存在的试试:
手撸了一个 Spring MVC 框架

文章插图
到这里我们就大功告成了!
源码地址:
https://github.com/qq53182347/liughMVC

【手撸了一个 Spring MVC 框架】


推荐阅读