Java經(jīng)典面試題匯總:Spring MVC
1. 什么是Spring MVC ?
Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建WEB 應(yīng)用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構(gòu),從而在使用Spring進(jìn)行WEB開發(fā)時,可以選擇使用Spring的Spring MVC框架或集成其他MVC開發(fā)框架,該框架通過把Model,View,Controller分離,將web層進(jìn)行職責(zé)解耦,把復(fù)雜的web應(yīng)用分成邏輯清晰的幾部分,簡化了開發(fā)。
2. Spring MVC 有哪些組件?
- 前置控制器 DispatcherServlet。
- 映射控制器 HandlerMapping。
- 處理器 Controller。
- 模型和視圖 ModelAndView。
- 視圖解析器 ViewResolver。
3. 說一下 Spring MVC 運(yùn)行流程?
(1)用戶發(fā)送請求至前端控制器DispatcherServlet;
(2)DispatcherServlet收到請求后,調(diào)用HandlerMapping處理器映射器,請求獲取Handler;
(3)處理器映射器根據(jù)請求url找到具體的處理器Handler,生成處理器對象及處理器攔截器(如果有則生成),一并返回給DispatcherServlet;
(4)DispatcherServlet 調(diào)用 HandlerAdapter處理器適配器,請求執(zhí)行Handler;
(5)HandlerAdapter 經(jīng)過適配調(diào)用 具體處理器進(jìn)行處理業(yè)務(wù)邏輯;
(6)Handler執(zhí)行完成返回ModelAndView;
(7)HandlerAdapter將Handler執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet;
(8)DispatcherServlet將ModelAndView傳給ViewResolver視圖解析器進(jìn)行解析;
(9)ViewResolver解析后返回具體View;
(10)DispatcherServlet對View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)
(11)DispatcherServlet響應(yīng)用戶。
4. Spring MVC的優(yōu)點(diǎn):
- 它是基于組件技術(shù)的。全部的應(yīng)用對象,無論控制器和視圖,還是業(yè)務(wù)對象之類的都是 java組件.并且和Spring提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成
- 不依賴于Servlet API(目標(biāo)雖是如此,但是在實(shí)現(xiàn)的時候確實(shí)是依賴于Servlet的)
- 可以任意使用各種視圖技術(shù),而不僅僅局限于JSP
- 支持各種請求資源的映射策略
5. @RequestMapping 的作用是什么?
將 http 請求映射到相應(yīng)的類/方法上。
6. 如果在攔截請求中,我想攔截get方式提交的方法,怎么配置?
可以在@RequestMapping注解里面加上method=RequestMethod.GET,或者使用@GetMapping。
7. SpringMVC常用的注解有哪些?
@RequestMapping:用于處理請求 url 映射的注解,可用于類或方法上。用于類上,則表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。
@RequestBody:注解實(shí)現(xiàn)接收http請求的json數(shù)據(jù),將json轉(zhuǎn)換為java對象。
@ResponseBody:注解實(shí)現(xiàn)將conreoller方法返回對象轉(zhuǎn)化為json對象響應(yīng)給客戶。
8. SpingMvc中的控制器的注解一般用那個,有沒有別的注解可以替代?
用@Conntroller注解,表示是表現(xiàn)層,不能用用別的注解代替。
9. Spring MVC和Struts2的區(qū)別有哪些?
- springmvc的入口是一個servlet即前端控制器(DispatchServlet),而struts2入口是一個filter過慮器(StrutsPrepareAndExecuteFilter)。
- springmvc是基于方法開發(fā)(一個url對應(yīng)一個方法),請求參數(shù)傳遞到方法的形參,可以設(shè)計為單例或多例(建議單例),struts2是基于類開發(fā),傳遞參數(shù)是通過類的屬性,只能設(shè)計為多例。
- Struts采用值棧存儲請求和響應(yīng)的數(shù)據(jù),通過OGNL存取數(shù)據(jù),springmvc通過參數(shù)解析器是將request請求內(nèi)容解析,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對象,最后又將ModelAndView中的模型數(shù)據(jù)通過reques域傳輸?shù)巾撁妗sp視圖解析器默認(rèn)使用jstl。
10. 怎么樣在方法里面得到Request,或者Session
在方法的形參中聲明request,SpringMvc就會自動把request對象傳入
相關(guān)文章
SpringBoot +Vue開發(fā)考試系統(tǒng)的教程
這篇文章主要介紹了SpringBoot +Vue開發(fā)考試系統(tǒng),支持多種題型:選擇題、多選題、判斷題、填空題、綜合題以及數(shù)學(xué)公式。支持在線考試,教師在線批改試卷。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-05-05教你使用java將excel數(shù)據(jù)導(dǎo)入MySQL
今天教大家如何使用Java將excel數(shù)據(jù)導(dǎo)入MySQL,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴呢很有幫助,需要的朋友可以參考下2021-05-05SpringCloud-Hystrix實(shí)現(xiàn)原理總結(jié)
通過hystrix可以解決雪崩效應(yīng)問題,它提供了資源隔離、降級機(jī)制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud-Hystrix實(shí)現(xiàn)原理,感興趣的朋友一起看看吧2021-05-05Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法示例
這篇文章主要介紹了Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法,結(jié)合實(shí)例形式分析了java反射機(jī)制獲取注解的具體實(shí)現(xiàn)方法與操作注意事項,需要的朋友可以參考下2019-09-09