什么是SpringMVC

MVC是一种设计模式,它把应用程序分成三个核心模块:模型,视图,控制器,它们各自处理自己的事情。模型是应用程序的主体部分,模型表示业务数据和业务逻辑。

Spring MVC是一个基于MVC模式的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

WebMVC执行流程

1、用户发起request请求到控制器(Controller) ,控制器接收到请求后 , 会委托给Model模型进行处理
2、Model在service中处理数据,并得到处理结果,然后给控制器返回一个对象或集合
3、Controller控制器将得到的数据,填充到view页面中
4、view将数据进行展示

SpringMVC 工作流程


DispatcherServlet在web.xml中配置,SpringMVC——DispatcherServlet配置文件应该放在哪里?

  • 用户发送请求至前端控制器 DispatcherServlet(dɪˈspætʃə)。
  • DispatcherServlet 调用 处理器映射器 HandlerMapping。
  • 处理器映射器根据请求的URl找到具体的处理器,然后返回给前端控制器一个处理器执行链对象,对象里封装了处理器和拦截器
  • 前端控制器 调用 处理器适配器HandlerAdapter
  • 处理器适配器去调用Handler处理器(也就是controller)去处理Handler,处理完毕之后返回一个ModelAndView对象给处理器适配器,ModelAndView对象中封装了视图和数据的信息。
  • 处理器适配器将获取的ModelAndView对象返回前端控制器
  • 前端控制器再去调用视图解析器View Resolver进行视图解析
  • 视图解析器解析完毕返回一个view对象
  • 前端控制器进行视图渲染,将数据填充到request域
  • 前端控制器响应客户端请求.

讲解视频:springMVC执行流程详解

Spring MVC的主要组件有哪些?

  • 前端控制器DispatcherServlet(不需要程序员开发)

接收请求,响应结果,相当于转发器,中央处理器。 有了DispatcherServlet减少了其它组件之间的耦合度。

  • 处理器映射器HandlerMapping(不需要程序员开发)

根据请求的url查找Handler

  • 处理器适配器HandlerAdapter

按照特定规则(HandlerAdapter要求的规则)去执行Handler

  • 处理器Handler(需要程序员开发)

编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

  • 视图解析器View resolver(不需要程序员开发)

进行视图解析,根据逻辑视图名解析成真正的视图(view)

  • 视图View(需要程序员开发jsp)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

SpringMVC 优缺点

优点

  • 基于接口编程,持各种视图技术。
  • 与Spring框架集成(如IoC容器、AOP等)
  • 组件重用,有利于代码复用,重用性高
    缺点
  • Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行
  • 太过于细分,开发效率低

SpringMVC怎么样设定重定向和转发的?

  • 转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
  • 重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu"

转发

重定向

Spring MVC的异常处理 ?

  • 可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

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

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

SpringMVC常用的注解有哪些?

@Controller
标注控制层
@ResponseBody
将返回的数据结构转换为 JSON 格式
@RestController
@RestController = @Controller + @ResponseBody
标注控制层, 转换为 JSON 格式
@RequestMapping
@RequestMapping 是一个用来处理请求地址映射的注解
用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;方法的级别上注解表示进一步指定到处理方法的映射关系。

@PathVariable
@PathVariable 注解主要用来获取 URL 参数,Spring Boot 支持 Restfull 风格的 URL,比如一个 GET 请求携带一个参数 id,我们将 id 作为参数接收,可以使用 @PathVariable 注解。如下:

如果, URL 中的参数和方法接收参数不一致 , 使用@PathVariable 中的 value 属性来指定对应关系

@RequestParam
与@PathVariable类似

@PathValiable 是从 URL 模板中获取参数值, 即这种风格的 URL:

@RequestParam 是从 Request 里获取参数值,即这种风格的 URL:

SpringMvc中函数的返回值是什么?

  • 返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

更多推荐

SpringMVC基础面试题