手写简易springmvc框架

代码:https://github.com/JZWen/writeSpringMvc

回顾一遍:

准备工作:先写两个注解类

controller层的类 并写上注解

自己写dispatcherServlet  写的也不是很完善 在里面完成 init()  doPost() 

web.xml配置信息 只需要配置dispatcherServlet

然后就开始dispatcherServlet的完善

首先是init()方法 

第一步: 获取带有controller注解的类

现在扫描这个包的类 ,这个方法我也没有看懂大概意思就是去将com.jzw.controller通过字符的转变变成一个路径,然后通过这个路径去扫描文件并获取文件名

               if ("file".equals(protocol)) {
                    // 获取包的物理路径
                    String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
                    // 以文件的方式扫描整个包下的文件 并添加到集合中
                    findAndAddClassesInPackageByFile(packageName, filePath, recursive, classes);
                }

得到了所有的类之后去扫描这些类上有没有controller的注解

MyController  myController = classInfo.getDeclaredAnnotation(MyController.class);  //括号里面传的就是@contrller注解

将这个带有注解的的类 放在map集合中 ConcurrentHashMap 下面这种集合

 这是存放 扫描到有注解的类    key 小写类名(String)  value 该类的实例对象(Object)

第二步 扫描类上和方法上有没有@RequestMapping 注解

还是获取上面那个map里面的类

然后看看有没有@RequestMapping注解有的话那就获取这个注解

暂时放在Url中,

通过Class 获取这个类下面的方法。

Method[] methods =  classInfo.getDeclaredMethods();

根据方法看看这个类上有没有@RequestMapping 注解并获取他的value

MyRequestMapping myRequestMapping = methods[i].getDeclaredAnnotation(MyRequestMapping.class);

再将这个value添加到url上

然后再存一个集合  concurrentHashMap

 这是存放 扫描到注解上类和方法对应的地址  key 地址 url (String) vlaue 该类的实例对象

第三步 获取地址和方法名

根据上面的地址和方法名(String)然后再建一个ConcurrentHashMap.然后就完成了。

最后是写doPost里面的方法 这个简单,

就是根据Url去获取方法 然后根据反射机制去执行这个方法 再获取返回值,并进行页面转发。

如下几张效果图:

猜你喜欢

转载自blog.csdn.net/qq_40261771/article/details/81557052
今日推荐