SpringMvc面試專題和答案

1、什麼是 SpringMvc?

答:SpringMvc 是 spring 的一個模塊,基於 MVC 的一個框架,無需中間整合層來整合。

2、Spring MVC 的優點:

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

3、SpringMVC 工作原理?

答:
1)客戶端發送請求到 DispatcherServlet
2)DispatcherServlet 查詢 handlerMapping 找到處理請求的 Controller
3)Controller 調用業務邏輯後,返回 ModelAndView
4)DispatcherServlet 查詢 ModelAndView,找到指定視圖
5)視圖將結果返回到客戶端

4、SpringMVC 流程?

答:
1)用戶發送請求至前端控制器 DispatcherServlet。 2)DispatcherServlet 收到請求調用 HandlerMapping 處理器映射器。
3)處理器映射器找到具體的處理器(可以根據 xml 配置、註解進行查找),生成處理器對象
及處理器攔截器(如果有則生成)一併返回給 DispatcherServlet。 4)DispatcherServlet 調用 HandlerAdapter 處理器適配器。
5)HandlerAdapter 經過適配調用具體的處理器(Controller,也叫後端控制器)。 6)Controller 執行完成返回 ModelAndView。
7)HandlerAdapter 將 controller 執行結果 ModelAndView 返回給 DispatcherServlet。 8)DispatcherServlet 將 ModelAndView 傳給 ViewReslover 視圖解析器。
9)ViewReslover 解析後返回具體 View。
10)DispatcherServlet 根據 View 進行渲染視圖(即將模型數據填充至視圖中)。
11)DispatcherServlet 響應用戶。

6、SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?

答:是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決
方案是在控制器裏面不能寫字段。

7、如果你也用過 struts2.簡單介紹下 springMVC 和 struts2 的區別有哪些?

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

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

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

9、 @RequestMapping 註解用在類上面有什麼作用?

答:是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所
有響應請求的方法都是以該地址作爲父路徑。

10、怎麼樣把某個請求映射到特定的方法上面?

答:直接在方法上面加上註解@RequestMapping,並且在這個註解裏面寫上要攔截的路徑

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

答:可以在@RequestMapping 註解裏面加上 method=RequestMethod.GET

12、怎麼樣在方法裏面得到 Request,或者 Session?

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

13、我想在攔截的方法裏面得到從前臺傳入的參數,怎麼得到?

答:直接在形參裏面聲明這個參數就可以,但必須名字和傳過來的參數一樣

14、如果前臺有很多個參數傳入,並且這些參數都是一個對象的,那麼怎麼樣快速得到這個對

象?
答:直接在方法中聲明這個對象,SpringMvc 就自動會把屬性賦值到這個對象裏面。

15、SpringMvc 中函數的返回值是什麼?

答:返回值可以有很多類型,有 String, ModelAndView,當一般用 String 比較好。

16、SpringMVC 怎麼樣設定重定向和轉發的?

答:在返回值前面加"forward:“就可以讓結果轉發,譬如"forward:user.do?name=method4” 在
返回值前面加"redirect:“就可以讓返回值重定向,譬如"redirect:http://www.baidu.com”

17、SpringMvc 用什麼對象從後臺向前臺傳遞數據的?

答:通過 ModelMap 對象,可以在這個對象裏面用 put 方法,把對象加到裏面,前臺就可以通
過 el 表達式拿到。

18、SpringMvc 中有個類把視圖和數據都合併的一起的,叫什麼?

答:叫 ModelAndView。

19、怎麼樣把 ModelMap 裏面的數據放入 Session 裏面?

答:可以在類上面加上@SessionAttributes 註解,裏面包含的字符串就是要放入 session 裏面
的 key

20、SpringMvc 怎麼和 AJAX 相互調用的?

答:
通過 Jackson 框架就可以把 Java 裏面的對象直接轉化成 Js 可以識別的 Json 對象。
具體步驟如下 : 1)加入 Jackson.jar
2)在配置文件中配置 json 的映射
3)在接受 Ajax 方法裏面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody
註解

21、當一個方法向 AJAX 返回特殊對象,譬如 Object,List 等,需要做什麼處理?

答:要加上@ResponseBody 註解

22、SpringMvc 裏面攔截器是怎麼寫的

答:有兩種寫法,一種是實現接口,另外一種是繼承適配器類,然後在 SpringMvc 的配置文件中
配置攔截器即可:

mvc:interceptors

mvc:interceptor
<mvc:mapping path="/modelMap.do" />

</mvc:interceptor>
</mvc:interceptors>

23、講下 SpringMvc 的執行流程

答:系統啓動的時候根據配置文件創建 spring 的容器, 首先是發送 http 請求到核心控制器
disPatherServlet,spring 容器通過映射器去尋找業務控制器,使用適配器找到相應的業務
類,在進業務類時進行數據封裝,在封裝前可能會涉及到類型轉換,執行完業務類後使用
ModelAndView 進行視圖轉發,數據放在 model 中,用 map 傳遞數據進行頁面顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章