SpringMVC
http://www.xxx.com?id=&type=
Model:将传输数据封装成一个完整的整体
View:视图,用来展示或者输出的一个模块(HTML,JS,JSON,String,Swing,xml。。。 )
Control:控制交互的一个中间组件,由他来根据用户请求分发不同任务从而得到不同的结果
三者合在一起就叫做MVC,基于项目开发的设计模式,用来解决用户和后台交互的问题
J2EE标准,JSP页面是一个万能组件,可以写HTML,可以写JS,写java逻辑,写sql语句
MVC框架:Struts1,Struts2,WebWork,SpringMVC
SpringMVC只是MVC设计模式的应用典范,给MVC的实现制定了一套标准
M:支持将url参数自动封装成一个Object或者Map
V:自己只有一个默认的template,支持扩展,自定义View,而且能够自定义解析
C:能够把限制放宽了,任何一个类,都有可能是Controller
在dispatcherServlet中onRefresh方法
protected void onRefresh(ApplicationContext context) { initStrategies(context); } /** * Initialize the strategy objects that this servlet uses. * <p>May be overridden in subclasses in order to initialize further strategy objects. */ protected void initStrategies(ApplicationContext context) {
//有九种策略
//针对每个用户请求,都会经过一些处理的策略之后,最终才能有结果输出
//每种策略可以自定义干预,但是最终的结果都是一致
//ModelAndView
//================== 这里就是Spring传说中的九大组件 =========================
initMultipartResolver(context); //文件上传解析,如果请求类型是multipart将通过multipartResolver进行文件上传解析 initLocaleResolver(context); //本地化解析 initThemeResolver(context); //主题解析
//handlerMapping 用来保存Controller中配置的RequestMapping和Method的一个对应关系 initHandlerMappings(context); //通过handlerMapping,将请求映射到处理器
//HandlerAdapters用来动态匹配Method参数,包括类转换,动态赋值 initHandlerAdapters(context); //通过handlerAdapter进行多类型的参数动态匹配 initHandlerExceptionResolvers(context); //如果执行过程中遇到异常,将交给HandlerExceptionResolver来解析 initRequestToViewNameTranslator(context); //直接解析请求到视图名
//通过viewResolvers实现动态模板的解析
initViewResolvers(context); //通过viewResolver解析逻辑视图到具体视图实现 initFlashMapManager(context); //flash映射管理器 }
第一阶段,配置阶段,通过我们的web.xml配置一个servlet,然后进入到初始化阶段,通过调用onRefresh方法初始化SpringMVC的九大组件,初始化完成以后,进入到请求处理阶段,调用doService方法,这个方法会调用doDispatch方法,里面又分别调用HandlerAdapter,ViewResolver和ResponseHttp里面的东西