Mode:将传输的数据封装成一个完整的载体
View:视图,用来展示或者输出的模块 HTML,JSP,JSON,STRING,SWING,xml
Control:控制交互的一个中间组建。根据用户的请求进行分发。
MVC用来解决用户和后台交互的问题
J2EE标准,JSP 页面是一个万能的组件,可以写HTML,js,java,
mvc框架,就是为了分开,分清 之前的框架,S’t’ru’ts1 ,Struts2,Webwork,SpringMVC :就是mvc的一个典范的实现。
M:支持将url参数,封装成一个Object 或者说 Map
V:自己只有一个默认的template ,支持拓展,自定义的view,而且能够自定义解析器。
C:把限制给减少了,现在随便一个类都可能作为C
配置阶段
- web.xml 配置一个Servlet DispatchServlet 作为SpringMVC的入口。
- 配置其中的init-param 固定属性名称contextConfigLocation 制定application.xml的 路径 通常会配置成 classpath:application.xml
- 配置 url的拦截。也就是请求路径的匹配。
初始化阶段
- applicationContextAware 当他实例化后会调用DispatchServlet的 doReFrush() initStrategies()方法 这个方法中有九个策略,每个策略有各自的 针对每天用户的请求,会经过这些策略之后才会返回。 每种策略可以自定义使用,最终的返回结果都是一样的,都是ModeAndView,这些策略就是我们常说的SpringMVC的九大组建。
处理阶段
1,首先是DispatchServlet 类的doService方法, 这个是用到了模板方法模式
2,这个方法中有个doDispatch方法 这个方法中最重要的方法就是getHandler 根据用户请求的url ,可以获得Controler中method
3,doDispatch方法中还有个 getHandlerAdapter方法,根据方法的参数,来自动的赋值。自动转型。 String 转int
4.doDispatch方法中 HandlerAdapter对象的handl方法,得到ModeAndView对象。
5,调用applyDefaultViewName方法
6,调用processDispatchResult方法 中调用ViewResolver 对象中,的 resoleViewName方法, 然后write() 这个就是response的方法,返回了
手写SpringMVC需要在哪个类添加东西呢
1,在HomeApplicationContext中加入了两个方法, getBeanDefinitionNames()也就是获取String[] 是beanNames
int getBeanDefinitionCount() 返回原来BeanDefinitionMaps的size()
我们会把HomeApplicationContext传给DispatcherServlet 对象。HomeApplicationContext其实就是implements BeanFactory的
2.所有的初始化都是在DispatcherServlet中的 i’ni’t’S’tategies()方法,其中又九大策略,我们写的三个initHandlerMapping() ,initHanderAdapter(),initViewResolver()。
3.执行方法 在DispatcherServlet 的 doDispatch() 方法中,调用了 getHander(req),和 ge’t’HandlerAdapter(hander)