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