面试_java_MVC、SpringMVC

88 阅读3分钟

服务端三层架构

为了解耦,易于维护,服务端分为了三层:表现层、业务层、数据访问层

浏览器访问服务器访问的是表现层,期待它返回一些数据。表现层收到请求后会调用业务层处理业务,业务层在处理业务的过程中会调用数据库,也就是数据层。一个来回之后表现层得到业务层的数据,稍微加工一下返回给浏览器,整个请求就结束了。





MVC

MVC是一种设计模式,分为三层:Model模型层、View视图层、Controller控制层。但它并不与服务端三层架构一一对应。这三层都属于服务端架构中的表现层,他们的关系是这样的:当浏览器发送请求给服务端表现层的时候,访问的是Controller控制层,Controller调用业务层去处理,处理完得到结果后将结果封装到Model里面传给View视图层,视图层生成html返回给浏览器。



生成html的办法:利用模板引擎动态生成。模板引擎:Thymeleaf、freemarker、JSP。

生成过程:Controller中最后返回的Model或者ModelAndView就是下图中的Model,写代码的那些jsp文件是模板文件,其中含有input标签之类的表达式,Model中的数据填充什么就展现什么,经过引擎组装后生成程序员看不到的静态html(不再含有input标签,可在浏览器右键Network中的Response中看到)返回给浏览器





SpringMVC

zhuanlan.zhihu.com/p/42602265

在MVC的基础上添加了三大组件:HandlerMapping 处理器映射器、HandlerAdapter 处理器适配器以及 ViewReslover 视图解析器。



流程

  1. 前端控制器(DispatcherServlet)收到请求之后将其转发给处理器映射器(HandlerMapping)

  2. 映射器根据 url 将请求转发给具体的处理器,生成处理器对象(Handler&Controller)和拦截器(Interceptor)一并返回给前端控制器。

  3. 前端控制器将处理器对象传给适配器(HandlerAdapter),生成ModelAndView对象返回给前端控制器。

  4. 前端控制器将ModelAndView对象传给视图解析器(ViewReslover)对其解析。生成具体视图(View)返回给前端控制器。

  5. 前端控制器根据View渲染视图(即将模型数据填充至视图中),得到结果后响应用户。



组件解释:

  • 前端控制器(DispatcherServlet):接收请求,响应结果,是整个流程的核心,它的存在降低了组件之间的耦合性。。
  • 处理器映射器(HandlerMapping):根据URL去查找处理器。SpringMVC 提供了不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  • 处理器(Handler):也就是controller,需要程序员去写代码处理逻辑的
  • 处理器适配器(HandlerAdapter):会把处理器包装成适配器,然后执行
  • 视图解析器(ViewResovler):将处理结果生成 View 视图。首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。