简介

SpringMVC是一个基于Java并且实现了MVC设计模式的请求驱动类型的轻量级WEB框架,通过把Model、View、Controller分离,将Web层进行职责解耦,把复杂的Web应用分成逻辑清晰的几部分,简化开发,减少出错,方便开发人员之间的配合;

流程

  • 用户发送请求到前端控制器DispatcherServlet
  • DispatcherServlet收到请求,访问HandlerMapping处理器映射器,请求获取Handler
  • HandlerMapping根据配置或者注解找到最终要执行的Handler返回Handler
  • 前端控制器请求HandlerAdapter适配器处理器执行Handler
  • Handler执行完毕返回ModelAndView逻辑视图
  • 前端控制器访问ViewResolver视图解析器解析成为真正的视图,返回View给前端控制器
  • 前端控制器将Model数据进行视图渲染最终展示给用户

优点

  • 可以支持多种视图技术如Freemarker、thymeleaf等,不仅仅只局限于JSP
  • 与Spring框架集成(如IOC、AOP)
  • 清晰的角色分配:DisipatcherServlet、HanderMapping、AdapterHandler、ViewResolver
  • 支持各种请求资源的映射策略

组件

  • DispatcherServlet(不需要程序员开发)   作用:接受请求、响应结果,相当于转发器
  • HandlerMapping处理器映射器(不需要程序员开发)   作用:根据请求的Url查找Handler
  • HandlerAdapter适配器处理器   注意:编写Handler时需要遵从HandlerAdapter规则去编写才能正确的执行Handler
  • Handler(Controller)处理器(需要程序员开发)
  • ViewResolver视图解析器(不需要程序员开发)   作用:将逻辑视图解析成真正的视图
  • View视图(需要程序员开发)   View是一个接口,他的视线可以是JSP、freemarker、PDT、thymeleaf等

SpringMVC与Struts2的区别

springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

SpringMVC重定向与转发

转发:在返回值前面加”forward:”,譬如”forward:user.do?name=method4”

重定向:在返回值前面加”redirect:”,譬如redirect:http://www.baidu.com

SpringMVC优缺点