Java經典面試題匯總:Spring MVC

1. 什麼是Spring MVC ?

Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring 框架提供瞭構建WEB 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的Spring MVC框架或集成其他MVC開發框架,該框架通過把Model,View,Controller分離,將web層進行職責解耦,把復雜的web應用分成邏輯清晰的幾部分,簡化瞭開發。

2. Spring MVC 有哪些組件?

  • 前置控制器 DispatcherServlet。
  • 映射控制器 HandlerMapping。
  • 處理器 Controller。
  • 模型和視圖 ModelAndView。
  • 視圖解析器 ViewResolver。

3. 說一下 Spring MVC 運行流程?

(1)用戶發送請求至前端控制器DispatcherServlet;

(2)DispatcherServlet收到請求後,調用HandlerMapping處理器映射器,請求獲取Handler;

(3)處理器映射器根據請求url找到具體的處理器Handler,生成處理器對象及處理器攔截器(如果有則生成),一並返回給DispatcherServlet;

(4)DispatcherServlet 調用 HandlerAdapter處理器適配器,請求執行Handler;

(5)HandlerAdapter 經過適配調用 具體處理器進行處理業務邏輯;

(6)Handler執行完成返回ModelAndView;

(7)HandlerAdapter將Handler執行結果ModelAndView返回給DispatcherServlet;

(8)DispatcherServlet將ModelAndView傳給ViewResolver視圖解析器進行解析;

(9)ViewResolver解析後返回具體View;

(10)DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)

(11)DispatcherServlet響應用戶。

4. Spring MVC的優點:

  • 它是基於組件技術的。全部的應用對象,無論控制器和視圖,還是業務對象之類的都是 java組件.並且和Spring提供的其他基礎結構緊密集成
  • 不依賴於Servlet API(目標雖是如此,但是在實現的時候確實是依賴於Servlet的)
  • 可以任意使用各種視圖技術,而不僅僅局限於JSP
  • 支持各種請求資源的映射策略

5. @RequestMapping 的作用是什麼?

將 http 請求映射到相應的類/方法上。

6. 如果在攔截請求中,我想攔截get方式提交的方法,怎麼配置?

可以在@RequestMapping註解裡面加上method=RequestMethod.GET,或者使用@GetMapping。

7. SpringMVC常用的註解有哪些?

@RequestMapping:用於處理請求 url 映射的註解,可用於類或方法上。用於類上,則表示類中的所有響應請求的方法都是以該地址作為父路徑。

@RequestBody:註解實現接收http請求的json數據,將json轉換為java對象。

@ResponseBody:註解實現將conreoller方法返回對象轉化為json對象響應給客戶。

8. SpingMvc中的控制器的註解一般用那個,有沒有別的註解可以替代?

用@Conntroller註解,表示是表現層,不能用用別的註解代替。

9. Spring MVC和Struts2的區別有哪些?

  • springmvc的入口是一個servlet即前端控制器(DispatchServlet),而struts2入口是一個filter過慮器(StrutsPrepareAndExecuteFilter)。
  • springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計為單例或多例(建議單例),struts2是基於類開發,傳遞參數是通過類的屬性,隻能設計為多例。
  • Struts采用值棧存儲請求和響應的數據,通過OGNL存取數據,springmvc通過參數解析器是將request請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據通過reques域傳輸到頁面。Jsp視圖解析器默認使用jstl。

10. 怎麼樣在方法裡面得到Request,或者Session

在方法的形參中聲明request,SpringMvc就會自動把request對象傳入

推薦閱讀: