1、什么是SpringMVC?其作用是什么?


SpringMVC是一种Web层mvc框架,用于替代servlet,主要用于处理和响应请求,获取表单参数,表单校验等。

2、为什么要用SpringMVC?


SpringMVC框架的作用就是用来简化编程的,相对于servlet来说,获取表单参数,响应请求等变得更简单了。

3、说一说SpringMVC底层执行流程(工作原理)?


1.png.jpg

4、说说SpringMVC中常用注解有哪些?分别什么作用?


@Controller
标识这个类是一个控制器

@RequestMapping
给控制器方法绑定一个uri

@ResponseBody
将Java对象转成Json,并且发送给客户端

@RequestBody
将客户端请求过来的Json转成Java对象

@RequestParam
当表单参数和方法形参名字不一致时,做一个名字映射

@PathVarible
用于获取uri中的参数,比如user/1中1的值

RESTful 风格的新API:

@RestController
@Controller+ @ResponseBody
@GetMapping
@DeleteMapping
@PostMapping
@PutMapping

其他注解

@SessionAttribute
声明将什么模型数据存入session

@CookieValue
获取cookie值

@ModelAttribute
将方法返回值存入model中

@HeaderValue
获取请求头中的值

5、SpringMVC和Strus2的区别?


(1)入口不同
SpringMVC入口是servlet,Struts2入口是filter。

(2)生命周期不同
SpringMVC Controller是单例的,所以效率更高,但是不能使用成员变量获取参数。
Struts2 Action是多例的,可以使用成员变量获取参数,导致效率比较低。

6、如何在SpringMVC实现RESTful 服务?


(1)导入jackson2包
(2)开启注解驱动<mvc:annotation-driven/>
(3)Json交互=@RequestBody @ResponseBody

7、什么是拦截器?有什么用?SpringMVC如何定义拦截器?


拦截器类似于filter的一个对象,用于预处理以及后处理处理器(控制器)。

新建一个class,实现HandlerInterceptor接口,重写三个方法preHandler、postHandler、afterCompletion,最后在springmvc.xml中配置拦截器。

8、SpringMVC中如何做表单数据校验?


(1)springmvc.xml中配置一个validator
(2)<mvc:annotation-driven validator="validator"/>;
(3)给Entity添加校验规则
@NotEmpty
@Length
...
(4)用BindingResult 紧接着entity之后来接收错误信息。

9、说说自己对于 Spring MVC 了解?


谈到这个问题,我们不得不提提之前 Model1 和 Model2 这两个没有 Spring MVC 的时代。

Model1 时代 : 很多学 Java 后端比较晚的朋友可能并没有接触过 Model1 模式下的 JavaWeb 应用开发。在 Model1 模式下,整个 Web 应用几乎全部用 JSP 页面组成,只用少量的 JavaBean 来处理数据库连接、访问等操作。这个模式下 JSP 即是控制层又是表现层。显而易见,这种模式存在很多问题。比如:
(1)将控制逻辑和表现逻辑混杂在一起,导致代码重用率极低;
(2)前端和后端相互依赖,难以进行测试并且开发效率极低;

Model2 时代 :学过 Servlet 并做过相关 Demo 的朋友应该了解“Java Bean(Model)+ JSP(View)+Servlet(Controller) ”这种开发模式,这就是早期的 JavaWeb MVC 开发模式。Model是系统涉及的数据,也就是 dao 和 bean。View展示模型中的数据,只是用来展示。Controller用来处理用户请求都发送给 ,返回数据给 JSP 并展示给用户。

Model2 模式下还存在很多问题,Model2的抽象和封装程度还远远不够,使用Model2进行开发时不可避免地会重复造轮子,这就大大降低了程序的可维护性和复用性。于是很多JavaWeb开发相关的 MVC 框架营运而生,比如Struts2,但是 Struts2 比较笨重。随着 Spring 轻量级开发框架的流行,Spring 生态圈出现了 Spring MVC 框架, Spring MVC 是当前最优秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加简单和方便,开发效率更高,并且 Spring MVC 运行速度更快。

MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。Spring MVC 下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)。

Spring MVC 的简单原理图如下:

6.png

10、SpringMVC 工作原理了解吗?


原理如下图所示:

6.jpg

SpringMVC运行原理

Spring MVC 的入口函数也就是前端控制器 DispatcherServlet 的作用是接收请求,响应结果。

流程说明(重要):

(1)客户端(浏览器)发送请求,直接请求到 DispatcherServlet。

(2)DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。

(3)解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。

(4)HandlerAdapter 会根据 Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。

(5)处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。

(6)ViewResolver 会根据逻辑 View 查找实际的 View。

(7)DispaterServlet 把返回的 Model 传给 View(视图渲染)。

(8)把 View 返回给请求者(浏览器)