国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一天吃透SpringMVC面試八股文

這篇具有很好參考價(jià)值的文章主要介紹了一天吃透SpringMVC面試八股文。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

說說你對 SpringMVC 的理解

SpringMVC是一種基于 Java 的實(shí)現(xiàn)MVC設(shè)計(jì)模型的請求驅(qū)動(dòng)類型的輕量級(jí)Web框架,屬于Spring框架的一個(gè)模塊。

它通過一套注解,讓一個(gè)簡單的Java類成為處理請求的控制器,而無須實(shí)現(xiàn)任何接口。同時(shí)它還支持RESTful編程風(fēng)格的請求。

什么是MVC模式?

MVC的全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,是一種軟件設(shè)計(jì)典范。它是用一種業(yè)務(wù)邏輯、數(shù)據(jù)與界面顯示分離的方法來組織代碼,將眾多的業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在需要改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯,達(dá)到減少編碼的時(shí)間。

View,視圖是指用戶看到并與之交互的界面。比如由html元素組成的網(wǎng)頁界面,或者軟件的客戶端界面。MVC的好處之一在于它能為應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒有真正的處理發(fā)生,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。

model,模型是指模型表示業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。被模型返回的數(shù)據(jù)是中立的,模型與數(shù)據(jù)格式無關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù),由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。

controller,控制器是指控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請求,然后再確定用哪個(gè)視圖來顯示返回的數(shù)據(jù)。

SpringMVC 有哪些優(yōu)點(diǎn)?

  1. 與 Spring 集成使用非常方便,生態(tài)好。
  2. 配置簡單,快速上手。
  3. 支持 RESTful 風(fēng)格。
  4. 支持各種視圖技術(shù),支持各種請求資源映射策略。

本文已經(jīng)收錄到Github倉庫,該倉庫包含計(jì)算機(jī)基礎(chǔ)、Java基礎(chǔ)、多線程、JVM、數(shù)據(jù)庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服務(wù)、設(shè)計(jì)模式、架構(gòu)、校招社招分享等核心知識(shí)點(diǎn),歡迎star~

Github地址

如果訪問不了Github,可以訪問gitee地址。

gitee地址

Spring MVC和Struts的區(qū)別

  1. Spring MVC是基于方法開發(fā),Struts2是基于類開發(fā)的。

    • Spring MVC會(huì)將用戶請求的URL路徑信息與Controller的某個(gè)方法進(jìn)行映射,所有請求參數(shù)會(huì)注入到對應(yīng)方法的形參上,生成Handler對象,對象中只有一個(gè)方法;
    • Struts每處理一次請求都會(huì)實(shí)例一個(gè)Action,Action類的所有方法使用的請求參數(shù)都是Action類中的成員變量,隨著方法增多,整個(gè)Action也會(huì)變得混亂。
  2. Spring MVC支持單例開發(fā)模式,Struts只能使用多例

    • Struts由于只能通過類的成員變量接收參數(shù),故只能使用多例。
  3. Struts2 的核心是基于一個(gè)Filter即StrutsPreparedAndExcuteFilter,Spring MVC的核心是基于一個(gè)Servlet即DispatcherServlet(前端控制器)。

  4. Struts處理速度稍微比Spring MVC慢,Struts使用了Struts標(biāo)簽,加載數(shù)據(jù)較慢。

Spring MVC的工作原理

Spring MVC的工作原理如下:

  1. DispatcherServlet 接收用戶的請求
  2. 找到用于處理request的 handler 和 Interceptors,構(gòu)造成 HandlerExecutionChain 執(zhí)行鏈
  3. 找到 handler 相對應(yīng)的 HandlerAdapter
  4. 執(zhí)行所有注冊攔截器的preHandler方法
  5. 調(diào)用 HandlerAdapter 的 handle() 方法處理請求,返回 ModelAndView
  6. 倒序執(zhí)行所有注冊攔截器的postHandler方法
  7. 請求視圖解析和視圖渲染

Spring MVC的主要組件?

  • 前端控制器(DispatcherServlet):接收用戶請求,給用戶返回結(jié)果。
  • 處理器映射器(HandlerMapping):根據(jù)請求的url路徑,通過注解或者xml配置,尋找匹配的Handler。
  • 處理器適配器(HandlerAdapter):Handler 的適配器,調(diào)用 handler 的方法處理請求。
  • 處理器(Handler):執(zhí)行相關(guān)的請求處理邏輯,并返回相應(yīng)的數(shù)據(jù)和視圖信息,將其封裝到ModelAndView對象中。
  • 視圖解析器(ViewResolver):將邏輯視圖名解析成真正的視圖View。
  • 視圖(View):接口類,實(shí)現(xiàn)類可支持不同的View類型(JSP、FreeMarker、Excel等)。

Spring MVC的常用注解由有哪些?

  • @Controller:用于標(biāo)識(shí)此類的實(shí)例是一個(gè)控制器。
  • @RequestMapping:映射Web請求(訪問路徑和參數(shù))。
  • @ResponseBody:注解返回?cái)?shù)據(jù)而不是返回頁面
  • @RequestBody:注解實(shí)現(xiàn)接收 http 請求的 json 數(shù)據(jù),將 json 數(shù)據(jù)轉(zhuǎn)換為 java 對象。
  • @PathVariable:獲得URL中路徑變量中的值
  • @RestController:@Controller+@ResponseBody
  • @ExceptionHandler標(biāo)識(shí)一個(gè)方法為全局異常處理的方法。

@Controller 注解有什么用?

@Controller 注解標(biāo)記一個(gè)類為 Spring Web MVC 控制器。Spring MVC 會(huì)將掃描到該注解的類,然后掃描這個(gè)類下面帶有 @RequestMapping 注解的方法,根據(jù)注解信息,為這個(gè)方法生成一個(gè)對應(yīng)的處理器對象,在上面的 HandlerMapping 和 HandlerAdapter組件中講到過。

當(dāng)然,除了添加 @Controller 注解這種方式以外,你還可以實(shí)現(xiàn) Spring MVC 提供的 Controller 或者 HttpRequestHandler 接口,對應(yīng)的實(shí)現(xiàn)類也會(huì)被作為一個(gè)處理器對象

給大家分享一個(gè)Github倉庫,上面有大彬整理的300多本經(jīng)典的計(jì)算機(jī)書籍PDF,包括C語言、C++、Java、Python、前端、數(shù)據(jù)庫、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)結(jié)構(gòu)和算法、機(jī)器學(xué)習(xí)、編程人生等,可以star一下,下次找書直接在上面搜索,倉庫持續(xù)更新中~

Github地址

@RequestMapping 注解有什么用?

@RequestMapping 注解,用于配置處理器的 HTTP 請求方法,URI等信息,這樣才能將請求和方法進(jìn)行映射。這個(gè)注解可以作用于類上面,也可以作用于方法上面,在類上面一般是配置這個(gè)控制器的 URI 前綴。

@RestController 和 @Controller 有什么區(qū)別?

@RestController 注解,在 @Controller 基礎(chǔ)上,增加了 @ResponseBody 注解,更加適合目前前后端分離的架構(gòu)下,提供 Restful API ,返回 JSON 數(shù)據(jù)格式。

@RequestMapping 和 @GetMapping 注解有什么不同?

  1. @RequestMapping:可注解在類和方法上;@GetMapping 僅可注冊在方法上
  2. @RequestMapping:可進(jìn)行 GET、POST、PUT、DELETE 等請求方法;@GetMapping@RequestMapping 的 GET 請求方法的特例。

@RequestParam 和 @PathVariable 兩個(gè)注解的區(qū)別

兩個(gè)注解都用于方法參數(shù),獲取參數(shù)值的方式不同,@RequestParam 注解的參數(shù)從請求攜帶的參數(shù)中獲取,而 @PathVariable 注解從請求的 URI 中獲取

@RequestBody和@RequestParam的區(qū)別

@RequestBody一般處理的是在ajax請求中聲明contentType: "application/json; charset=utf-8"時(shí)候。也就是json數(shù)據(jù)或者xml數(shù)據(jù)。

@RequestParam一般就是在ajax里面沒有聲明contentType的時(shí)候,為默認(rèn)的x-www-form-urlencoded格式時(shí)。

Spring MVC的異常處理

可以將異常拋給Spring框架,由Spring框架來處理;我們只需要配置簡單的異常處理器,在異常處理器中添視圖頁面即可。

  • 使用系統(tǒng)定義好的異常處理器 SimpleMappingExceptionResolver
  • 使用自定義異常處理器
  • 使用異常處理注解

好東西應(yīng)該要分享出來!我把自己學(xué)習(xí)計(jì)算機(jī)多年以來的書籍分享出來了,匯總到一個(gè)計(jì)算機(jī)經(jīng)典編程書籍倉庫了,一共300多本,包括C語言、C++、Java、Python、前端、數(shù)據(jù)庫、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)結(jié)構(gòu)和算法、機(jī)器學(xué)習(xí)、編程人生等,可以star一下,下次找書直接在上面搜索,倉庫持續(xù)更新中~

Github地址

SpringMVC 用什么對象從后臺(tái)向前臺(tái)傳遞數(shù)據(jù)的?

  1. 將數(shù)據(jù)綁定到 request;
  2. 返回 ModelAndView;
  3. 通過ModelMap對象,可以在這個(gè)對象里面調(diào)用put方法,把對象加到里面,前端就可以通過el表達(dá)式拿到;
  4. 綁定數(shù)據(jù)到 Session中。

SpringMvc的Controller是不是單例模式?

單例模式。在多線程訪問的時(shí)候有線程安全問題,解決方案是在控制器里面不要寫可變狀態(tài)量,如果需要使用這些可變狀態(tài),可以使用ThreadLocal,為每個(gè)線程單獨(dú)生成一份變量副本,獨(dú)立操作,互不影響。

介紹下 Spring MVC 攔截器?

Spring MVC 攔截器對應(yīng)HandlerInterceor接口,該接口位于org.springframework.web.servlet的包中,定義了三個(gè)方法,若要實(shí)現(xiàn)該接口,就要實(shí)現(xiàn)其三個(gè)方法:

  1. 前置處理(preHandle()方法):該方法在執(zhí)行控制器方法之前執(zhí)行。返回值為Boolean類型,如果返回false,表示攔截請求,不再向下執(zhí)行,如果返回true,表示放行,程序繼續(xù)向下執(zhí)行(如果后面沒有其他Interceptor,就會(huì)執(zhí)行controller方法)。所以此方法可對請求進(jìn)行判斷,決定程序是否繼續(xù)執(zhí)行,或者進(jìn)行一些初始化操作及對請求進(jìn)行預(yù)處理。
  2. 后置處理(postHandle()方法):該方法在執(zhí)行控制器方法調(diào)用之后,且在返回ModelAndView之前執(zhí)行。由于該方法會(huì)在DispatcherServlet進(jìn)行返回視圖渲染之前被調(diào)用,所以此方法多被用于處理返回的視圖,可通過此方法對請求域中的模型和視圖做進(jìn)一步的修改。
  3. 已完成處理(afterCompletion()方法):該方法在執(zhí)行完控制器之后執(zhí)行,由于是在Controller方法執(zhí)行完畢后執(zhí)行該方法,所以該方法適合進(jìn)行一些資源清理,記錄日志信息等處理操作。

可以通過攔截器進(jìn)行權(quán)限檢驗(yàn),參數(shù)校驗(yàn),記錄日志等操作

SpringMvc怎么配置攔截器?

有兩種寫法,一種是實(shí)現(xiàn)HandlerInterceptor接口,另外一種是繼承適配器類,接著在接口方法當(dāng)中,實(shí)現(xiàn)處理邏輯;然后在SpringMvc的配置文件中配置攔截器即可:

<!-- 配置SpringMvc的攔截器 -->
<mvc:interceptors>
    <bean id="myInterceptor" class="com.dabin.MyHandlerInterceptor"></bean>
 
    <!-- 只攔截部分請求 -->
    <mvc:interceptor>
       <mvc:mapping path="/xxx.do" />
       <bean class="com.dabin.MyHandlerInterceptorAdapter" />
    </mvc:interceptor>
</mvc:interceptors>

Spring MVC 的攔截器和 Filter 過濾器有什么差別?

有以下幾點(diǎn):

  • 功能相同:攔截器和 Filter 都能實(shí)現(xiàn)相應(yīng)的功能
  • 容器不同:攔截器構(gòu)建在 Spring MVC 體系中;Filter 構(gòu)建在 Servlet 容器之上
  • 使用便利性不同:攔截器提供了三個(gè)方法,分別在不同的時(shí)機(jī)執(zhí)行;過濾器僅提供一個(gè)方法

什么是REST?

REST,英文全稱,Resource Representational State Transfer,對資源的訪問狀態(tài)的變化通過url的變化表述出來。

Resource:資源。資源是REST架構(gòu)或者說整個(gè)網(wǎng)絡(luò)處理的核心。

Representational:某種表現(xiàn)形式,比如用JSON,XML,JPEG等。

State Transfer:狀態(tài)變化。通過HTTP method實(shí)現(xiàn)。

REST描述的是在網(wǎng)絡(luò)中client和server的一種交互形式。用大白話來說,就是通過URL就知道要什么資源,通過HTTP method就知道要干什么,通過HTTP status code就知道結(jié)果如何

舉個(gè)例子:

GET /tasks 獲取所有任務(wù)
POST /tasks 創(chuàng)建新任務(wù)
GET /tasks/{id} 通過任務(wù)id獲取任務(wù)
PUT /tasks/{id} 更新任務(wù)
DELETE /tasks/{id} 刪除任務(wù)

GET代表獲取一個(gè)資源,POST代表添加一個(gè)資源,PUT代表修改一個(gè)資源,DELETE代表刪除一個(gè)資源。

server提供的RESTful API中,URL中只使用名詞來指定資源,原則上不使用動(dòng)詞。用HTTP Status Code傳遞server的狀態(tài)信息。比如最常用的 200 表示成功,500 表示Server內(nèi)部錯(cuò)誤等。

使用REST有什么優(yōu)勢呢?

第一,風(fēng)格統(tǒng)一了,不會(huì)出現(xiàn)delUser/deleteUser/removeUser各種命名的代碼了。

第二,面向資源,一目了然,具有自解釋性。

第三,充分利用 HTTP 協(xié)議本身語義文章來源地址http://www.zghlxwxcb.cn/news/detail-421128.html

到了這里,關(guān)于一天吃透SpringMVC面試八股文的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一天吃透SpringCloud面試八股文

    Spring cloud 流應(yīng)用程序啟動(dòng)器是基于 Spring Boot 的 Spring 集成應(yīng)用程序,提供與外部系統(tǒng)的集成。Spring cloud Task,一個(gè)生命周期短暫的微服務(wù)框架,用于快速構(gòu)建執(zhí)行有限數(shù)據(jù)處理的應(yīng)用程序。 Spring Cloud是一個(gè)為分布式微服務(wù)架構(gòu)構(gòu)建應(yīng)用程序的開發(fā)工具箱,是Spring Boot的擴(kuò)展,

    2024年02月04日
    瀏覽(22)
  • 一天吃透JVM面試八股文

    JVM,全稱Java Virtual Machine(Java虛擬機(jī)),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。由 一套字節(jié)碼指令集、一組寄存器、一個(gè)棧、一個(gè)垃圾回收堆和一個(gè)存儲(chǔ)方法域等 組成。JVM屏蔽了與操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需要生成在Java虛擬機(jī)上運(yùn)行的

    2023年04月19日
    瀏覽(30)
  • 一天吃透Java并發(fā)面試八股文

    內(nèi)容摘自我的學(xué)習(xí)網(wǎng)站:topjavaer.cn 分享50道Java并發(fā)高頻面試題 。 線程池:一個(gè)管理線程的池子。 嗯,手動(dòng)創(chuàng)建線程有兩個(gè)缺點(diǎn) 不受控風(fēng)險(xiǎn) 頻繁創(chuàng)建開銷大 為什么不受控 ? 系統(tǒng)資源有限,每個(gè)人針對不同業(yè)務(wù)都可以手動(dòng)創(chuàng)建線程,并且創(chuàng)建線程沒有統(tǒng)一標(biāo)準(zhǔn),比如創(chuàng)建的

    2024年02月08日
    瀏覽(26)
  • 吃透SpringMVC面試八股文

    SpringMVC是一種基于 Java 的實(shí)現(xiàn)MVC設(shè)計(jì)模型的請求驅(qū)動(dòng)類型的輕量級(jí)Web框架,屬于Spring框架的一個(gè)模塊。 它通過一套注解,讓一個(gè)簡單的Java類成為處理請求的控制器,而無須實(shí)現(xiàn)任何接口。同時(shí)它還支持RESTful編程風(fēng)格的請求。 MVC的全名是 Model View Controller ,是模型(model)-視圖

    2023年04月20日
    瀏覽(18)
  • 一天吃透操作系統(tǒng)八股文

    并發(fā):同一段時(shí)間內(nèi)多個(gè)程序執(zhí)行(與并行區(qū)分,并行指的是同一時(shí)刻有多個(gè)事件,多處理器系統(tǒng)可以使程序并行執(zhí)行) 共享:系統(tǒng)中的資源可以被內(nèi)存中多個(gè)并發(fā)執(zhí)行的進(jìn)線程共同使用 虛擬:通過分時(shí)復(fù)用(如分時(shí)系統(tǒng))以及空分復(fù)用(如虛擬內(nèi)存)技術(shù)把一個(gè)物理實(shí)體

    2023年04月15日
    瀏覽(25)
  • 一天吃透計(jì)算機(jī)網(wǎng)絡(luò)八股文

    計(jì)算機(jī)網(wǎng)絡(luò)體系大致分為三種,OSI七層模型、TCP/IP四層模型和五層模型。一般面試的時(shí)候考察比較多的是五層模型。最全面的Java面試網(wǎng)站 五層模型 :應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。 應(yīng)用層 :為應(yīng)用程序提供交互服務(wù)。在互聯(lián)網(wǎng)中的應(yīng)用層協(xié)議很多,如域

    2023年04月09日
    瀏覽(28)
  • 吃透Redis面試八股文

    Redis連環(huán)40問,絕對夠全! Redis( Remote Dictionary Server )是一個(gè)使用 C 語言編寫的,高性能非關(guān)系型的鍵值對數(shù)據(jù)庫。與傳統(tǒng)數(shù)據(jù)庫不同的是,Redis 的數(shù)據(jù)是存在內(nèi)存中的,所以讀寫速度非???,被廣泛應(yīng)用于緩存方向。Redis可以將數(shù)據(jù)寫入磁盤中,保證了數(shù)據(jù)的安全不丟失,

    2023年04月24日
    瀏覽(27)
  • 三天吃透Java面試八股文(2023最新整理),面試通過率高達(dá)90%

    三天吃透Java面試八股文(2023最新整理),面試通過率高達(dá)90%

    什么樣的求職者能夠獲得面試官的青睞?求職者需要準(zhǔn)備哪些內(nèi)容來面對形形色色的面試官?這兩份資料是我在幾十場面試中被面試官問到的問題, 比其他復(fù)制粘貼的面試題強(qiáng)一百倍 ,堪稱 全網(wǎng)最強(qiáng) (我不太喜歡“全網(wǎng)最強(qiáng)”這樣的字眼,但確實(shí)做到了全網(wǎng)最強(qiáng))。 寫這

    2024年02月13日
    瀏覽(33)
  • 三天吃透Redis八股文

    Redis連環(huán)40問,絕對夠全! Redis( Remote Dictionary Server )是一個(gè)使用 C 語言編寫的,高性能非關(guān)系型的鍵值對數(shù)據(jù)庫。與傳統(tǒng)數(shù)據(jù)庫不同的是,Redis 的數(shù)據(jù)是存在內(nèi)存中的,所以讀寫速度非???,被廣泛應(yīng)用于緩存方向。Redis可以將數(shù)據(jù)寫入磁盤中,保證了數(shù)據(jù)的安全不丟失,

    2023年04月10日
    瀏覽(22)
  • 三天吃透計(jì)算機(jī)網(wǎng)絡(luò)八股文

    計(jì)算機(jī)網(wǎng)絡(luò)體系大致分為三種,OSI七層模型、TCP/IP四層模型和五層模型。一般面試的時(shí)候考察比較多的是五層模型。最全面的Java面試網(wǎng)站 五層模型 :應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。 應(yīng)用層 :為應(yīng)用程序提供交互服務(wù)。在互聯(lián)網(wǎng)中的應(yīng)用層協(xié)議很多,如域

    2023年04月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包