手写SpringMVC
1.建立注解
@Controller(类注解)
@Service(类注解)
@Autowired(属性注解)
@RequestMapping(类注解+属性注解)
@RequestParam(参数注解)
pom.xml
2.创建业务SpringMVC业务代码(Controller层、Service层)
Service
Controller
3.DispatcherServlet //SpringMVC中主要执行类
web.xml
设置拦截器
Servlet
Init() //初始化工作
doScan() //扫描包,并取到class文件
doInstance() //将扫描到的类进行实例化
doAutowired() //根据实例化的类将有@autowired注解的属性进行反射(相当于new)
urlMapping() //判断路径以及对应的方法
doGet()
doPost() //取得请求url里的类编号、方法编号、参数编号与值
hand() //取得参数列表并注入
为什么当http请求过来时,SpringMVC能快速找到对应的方法并执行?
SpringMVC初始化时会扫描所有的包里的注解,然后将方法与url一一对应存储到map对象中,当http请求过来时,就根据这个url查找这个map,并执行相应的方法
SpringMVC:(自己理解)
1、系统初始化阶段:加载所有的类注解、方法注解、属性注解以及参数注解,然后将这些注解内容和对应的信息(或是类对象)以及方法和对应的url根据key-value的形式存储进Map中,系统初始化时,根据注解将将实例化对象反射进对象属性中(Spring IOC)。
2、请求阶段:当用户请求过来时,根据请求的url在map(存储url以及其对应的方法的map)中查找对应的方法,然后执行这个方法,并把参数列表对应映射进去。
3、返回阶段:执行完方法后将得到的内容渲染页面后返回给用户
对应下图就是:
1、用户发送url请求,拦截器拦截后
2-3、Dispatcher Servlet(核心控制器)将url发送给Handler Mapping(处理器映射器)根据url提取出对应的controller(类别名等一系列信息)并返回给.Dispatcher Servlet
4、Dispatcher Servlet将获取到的controller交给Handler Adapter(处理器适配器)
5-7、根据传输过来的信息,Handler Adapter将会执行对应的方法、接口,然后将结果返回给Dispatcher Service
8-9、Dispatcher Servlet将得到的结果交给View Resolver(视图解析器)进行视图渲染后得到结果
10、Dispatcher Servlet将渲染结果返回给页面