• SpringMVC的高频面试题


    SpringMVC的高频面试题

    1. SpringMVC的优点

    • SpringMVC是基于组件技术的,无论控制器和视图,还是业务对象之类的都是Java组件,并且和Spring提供的其他基础结构紧密集成
    • 不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于 Servlet 的)
    • 可以使用多种视图技术,而不仅仅局限于 JSP
    • 支持各种请求资源的映射策略
    • 它应是易于扩展的

    2. SpringMVC的执行流程是什么?

    • 在彻底理解SpringMVC的执行流程之前,先要知道与SpringMVC相关的各个重要组件

      • 前端控制器(DispatcherServlet)
        • DispatcherServlet是整个流程控制的中心,用于接收请求,响应结果,相当于转发器,中央处理器。DispatcherServlet的存在降低了组件之间的耦合性。
      • 处理器映射器(HandlerMapping)
        • HandlerMapping负责根据用户请求的URL找到Handler处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:xml配置文件的方式注解的方式,实现接口的方式等。
      • 处理器适配器(HandlerAdapter)
        • 按照特定规则(HandlerAdapter要求的规则)去执行Handler,这是适配器模式的应用,通过扩展适配器可以对更多类型的
          处理器进行执行 。
      • 处理器(Handler)
        • Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
      • 视图解析器(ViewResolver)
        • ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
        • springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
      • 视图View
        • View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf等)

      在这六个组件中,DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver都是由框架提供的,不需要我们自己去开发。但是由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。 (编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler ) 。视图View也需要我们自己去开发,如写JSP页面等。

    • SpringMVC的执行流程图

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kBlPMp0M-1661221700761)(C:\Users\10642\AppData\Roaming\Typora\typora-user-images\image-20220823093340890.png)]

    • Spring的执行步骤

      1. 用户发起请求到DispatcherServlet
      2. DispatcherServlet调用HandlerMapping,根据xml或者注解的方式去查找handler
      3. 找到handler后HandlerMapping向DispatcherServlet返回一个执行链HandlerExecutionChain
      4. DispatcherServlet调用HandlerAdapter
      5. HandlerAdapter去执行Handler
      6. Handler执行完毕后向HandlerAdapter返回一个ModelAndView对象
      7. HandlerAdapter将ModelAndView对象返回到DispatcherServlet
      8. DispatcherServlet请求ViewResolver进行视图解析
      9. ViewResolver向DispatcherServlet返回View
      10. DispatcherServlet对视图进行渲染
      11. DispatcherServlet向用户返回响应结果

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

    4. SpringMVC常用的注解有哪些?

    • @Controller:用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象。分发处理器将会扫描使用了该注解的类的方法。(SpringMVC中的控制器的注解只能用@Controller,不能用其他注解代替
    • @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
    • @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

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

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

    6. 简单介绍下SpringMVC和struts2的区别有哪些?

    1. 入口不同
      • SpringMVC的入口是一个前端控制器DispatcherServlet
      • struts2入口是一个Filter过虑器
    2. 配置映射不同
      • SpringMVC是基于方法开发),传递参数是通过方法的形参,可以设计为单例或多例(建议单例)
      • struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例
    3. 视图不同
      • Struts采用值栈存储请求和响应的数据,通过 OGNL 存取数据
      • SpringMVC通过参数解析器是将request 请求内容解析,并给方法形参赋值,将数据和视图封装成 ModelAndView 对象,最后又将ModelAndView 中的模型数据通过 reques 域传输到页面。Jsp 视图解析器默认使用 jstl

    7. 怎么样把某个请求映射到特定的方法上面?

    • 直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径

    8. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

    • 可以在@RequestMapping 注解里面加上 method=RequestMethod.GET

    9. 怎么样在方法里面得到Request或者Session?

    • 直接在方法的形参中声明request和session,SpringMVC就自动把request对象和session对象传入

    10. SpringMVC中函数的返回值是什么?

    • 返回值可以有很多类型,有 String、ModelAndView,一般用 String 比较好。

    11. SpringMVC怎么和 AJAX 相互调用的?

    • 通过Jackson框架就可以把Java里面的对象直接转化成JS可以识别的 json对象。
      具体步骤如下 :
      1. 加入 Jackson.jar
      2. 在配置文件中配置 json 的映射
      3. 在接受 Ajax 方法里面可以直接返回 Object、List 等,但方法前面要加上@ResponseBody 注解
  • 相关阅读:
    【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed
    又一嵌入式开源仿真器
    【力扣题解】1413. 逐步求和得到正数的最小值【每日一题】
    Java面试大揭秘 从技术面被“虐”到征服CTO,全凭这份强到离谱的pdf
    华为云云耀云服务器L实例评测|SpringCloud相关组件——nacos和sentinel的安装和配置 & 运行内存情况 & 服务器被非法登陆尝试的解决
    python—类的组成、对象的创建、面向对象三大特征
    vue源码之视图响应式更新
    适用于 Windows 的企业级 Subversion 服务器
    scala基础
    菜鸟 CPaaS 平台微服务治理实践
  • 原文地址:https://blog.csdn.net/qq_52248567/article/details/126479721