springMVC你不得不知~

what’s springMVC

有必要解释一下,springMVC也是一种MVC
而MVC则是Model View Controller
Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。
    通常模型对象负责在数据库中存取数据。
View(视图):是应用程序中处理数据显示的部分。
    通常视图是依据模型数据创建的。
Controller(控制器):是应用程序中处理用户交互的部分。
    通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
   
所以根据以上三个解释,大致流程就出来了:
用户向服务器发送请求,控制层(Controller)接受请求,并委托模型层(Model)进行数据处理,模型层接到委托后处理请求并将结果返回给控制层(Controller),并将返回的结果交给视图层(view),让视图层(view)进行视图渲染,并将渲染后的jstl返回给控制层(Controller),最后控制层(Controller)将响应结果请求返回给用户。便可以显示浏览器页面了,其中C/S模式,模型层会主动推送数据到视图层,而B/S则不能

springMVC的工作原理(简化版的流程)

1)客户端发送请求到 DispatcherServlet

2)DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller

3)Controller 调用业务逻辑后,返回 ModelAndView

4)DispatcherServlet 查询 ModelAndView,找到指定视图

5)视图将结果返回到客户端

SpringMVC 流程?

1)用户发送请求至前端控制器 DispatcherServlet。

2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。

5)HandlerAdapter 经过适配调用具体的处理器(handler(Controller),也叫后端控制器)

6)Controller 执行完成返回 ModelAndView。

7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。

8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

9)ViewReslover 解析后返回具体 View。

10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

11)DispatcherServlet 响应用户。

我画了个图:
springmvc流程图

SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解方案是在控制器里面不能写字段。

区别于struts2

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_41750712/article/details/93673960