java面試題之SpringMVC篇

Spring MVC的工作原理

Spring MVC的工作原理如下:

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

Spring MVC的主要組件?

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

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

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

@Controller 注解有什么用?

@Controller?注解標記一個類為 Spring Web MVC 控制器。Spring MVC 會將掃描到該注解的類,然后掃描這個類下面帶有?@RequestMapping?注解的方法,根據注解信息,為這個方法生成一個對應的處理器對象,在上面的 HandlerMapping 和 HandlerAdapter組件中講到過。

當然,除了添加?@Controller?注解這種方式以外,你還可以實現 Spring MVC 提供的?Controller?或者?HttpRequestHandler?接口,對應的實現類也會被作為一個處理器對象

@RequestMapping 注解有什么用?

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

@RestController 和 @Controller 有什么區別?

@RestController?注解,在?@Controller?基礎上,增加了?@ResponseBody?注解,更加適合目前前后端分離的架構下,提供 Restful API ,返回 JSON 數據格式。

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

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

@RequestParam 和 @PathVariable 兩個注解的區別

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

@RequestBody和@RequestParam的區別

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

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

Spring MVC的異常處理

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

  • 使用系統定義好的異常處理器 SimpleMappingExceptionResolver
  • 使用自定義異常處理器
  • 使用異常處理注解

SpringMVC 用什么對象從后臺向前臺傳遞數據的?

  1. 將數據綁定到 request;
  2. 返回 ModelAndView;
  3. 通過ModelMap對象,可以在這個對象里面調用put方法,把對象加到里面,前端就可以通過el表達式拿到;
  4. 綁定數據到 Session中。

SpringMvc的Controller是不是單例模式?

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

介紹下 Spring MVC 攔截器?

Spring MVC 攔截器對應HandlerInterceor接口,該接口位于org.springframework.web.servlet的包中,定義了三個方法,若要實現該接口,就要實現其三個方法:

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

可以通過攔截器進行權限檢驗,參數校驗,記錄日志等操作

SpringMvc怎么配置攔截器?

有兩種寫法,一種是實現HandlerInterceptor接口,另外一種是繼承適配器類,接著在接口方法當中,實現處理邏輯;然后在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 過濾器有什么差別?

有以下幾點:

  • 功能相同:攔截器和 Filter 都能實現相應的功能
  • 容器不同:攔截器構建在 Spring MVC 體系中;Filter 構建在 Servlet 容器之上
  • 使用便利性不同:攔截器提供了三個方法,分別在不同的時機執行;過濾器僅提供一個方法

什么是REST?

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

Resource:資源。資源是REST架構或者說整個網絡處理的核心。

Representational:某種表現形式,比如用JSON,XML,JPEG等。

State Transfer:狀態變化。通過HTTP method實現。

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

舉個例子:

GET /tasks 獲取所有任務
POST /tasks 創建新任務
GET /tasks/{id} 通過任務id獲取任務
PUT /tasks/{id} 更新任務
DELETE /tasks/{id} 刪除任務

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

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

使用REST有什么優勢呢?

第一,風格統一了,不會出現delUser/deleteUser/removeUser各種命名的代碼了。

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

第三,充分利用 HTTP 協議本身語義

SpringMVC怎么樣設定重定向和轉發的?

(1)轉發:在返回值前面加"forward:",例如"forward:user.do?name=method4"

(2)重定向:在返回值前面加"redirect:",例如"redirect:http://www.baidu.com"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697551.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

音視頻面試題集錦

下面是音視頻開發面試題精選&#xff1a; 1、談談 iOS 音視頻采集相關接口和數據結構的設計&#xff1f;2、如何降低處理音視頻鏈路中的內存峰值&#xff1f;3、OpenGL 如何實現二分屏效果&#xff1f;4、使用 OpenGL 繪制時對于二維坐標需要注意什么&#xff1f; 1、談談 iO…

Vue中如何使用dayjs

Day.js中文網Day.js是一個極簡的JavaScript庫&#xff0c;可以為現代瀏覽器解析、驗證、操作和顯示日期和時間。https://dayjs.fenxianglu.cn/ 單位不區別大小寫&#xff0c;支持復數和縮寫形式 單位縮寫描述 date D日期 [1,31]dayd星期 [0,6]&#xff08;星期日0&#xff0c…

云計算面試題【后期】

前言&#xff1a; 隨著年齡的增長生活瑣碎的事情、煩心的事情日漸增多&#xff0c;怠慢了更新&#xff0c; 1.什么是數據庫 DB.DataBase 數據庫&#xff1a; 依照某種數據模型進行組織并存放到存儲器的數據集合 DBMS.DataBase Management System – 數據庫管理系統&#xff1a;…

Java MP3轉PCM

Java MP3轉PCM 1 添加依賴2 Java 代碼 1 添加依賴 <dependency><groupId>com.googlecode.soundlibs</groupId><artifactId>mp3spi</artifactId><version>1.9.5.4</version> </dependency>2 Java 代碼 package com.xu.music.…

迪蕭科技有限公司邀您參觀2024生物發酵展

參展企業介紹 浙江迪蕭科技有限公司位于浙江杭州&#xff0c;是一家專注于膜技術的國家高新企業。公司針對食品飲料、醫藥保健等領域的過程分離與控制、產品提取及濃縮、廢料資源化利用等提供全方案解決服務。堅持以“顧客至上、優質服務、卓越品質”為原則。為客戶企業提供清…

視頻批量瘦身:一鍵縮小尺寸,輕松處理海量視頻

在如今視頻內容爆炸的時代&#xff0c;無論是個人創作者還是企業團隊&#xff0c;都面臨著處理大量視頻的需求。而視頻尺寸過大往往會導致上傳緩慢、存儲空間不足等問題。為了解決這個問題&#xff0c;我們推出了一款強大的視頻批量剪輯工具&#xff0c;讓你輕松實現視頻尺寸批…

NXP實戰筆記(七):S32K3xx基于RTD-SDK在S32DS上配置ICU輸入捕獲

目錄 1、概述 2、輸入捕獲SDK配置 2.1、SAIC中斷方式 2.2、IPWM或者IPM 1、概述 輸入捕獲&#xff0c;可以抓取高電平時間、低電平時間、占空比、周期、邊沿檢測與回調函數、邊沿計數&#xff08;ABZ解碼&#xff09;、時間戳、喚醒中斷。 記錄一下根據Emios模塊實現上述部分…

Spring Cache框架使用教程,通過簡單且強大的方式在應用程序中使用緩存提高性能

Spring Cache Spring Cache 框架是 Spring 框架的一部分,它提供了一種簡單但功能強大的方式來在應用程序中實現緩存。下面是 Spring Cache 框架的一些好處: 性能提升: 使用緩存可以大大提高應用程序的性能,特別是對于那些需要頻繁訪問和計算的數據。通過緩存先前計算的結果…

【ARMv8M Cortex-M33 系列 8.1 -- RT-Thread 堆內存 檢查命令 free 實現及介紹】

文章目錄 RT-Thread 堆內存 檢查命令 free 實現及介紹rt_memory_info 函數驗證 RT-Thread 堆內存 檢查命令 free 實現及介紹 在RT-Thread系統中&#xff0c;通常可以通過rt_memory_info函數獲取當前的堆內存使用信息&#xff0c;然后你可以包裝這個函數來顯示剩余的堆空間。rt…

最全整理,軟件測試-Web頁面測試思路總結,13年經驗...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 1、Web功能測試 …

Vim 模式切換 | 命令集

Vim 模式切換 | 命令集 vim 主要模式及切換一、正常/普通/命令模式1 光標相關操作命令集1.1 光標移動1.2 文字刪除1.3 粘貼和復制1.4 替換1.5 字符更改 二、插入模式2.1 插入模式和命令行模式相互切換 三、末行模式2.1 末行模式和命令行模式相互切換2.2 末行模式相關命令集 vim…

【EI會議征稿通知】第十屆機械工程、材料和自動化技術國際會議(MMEAT 2024)

2024年第十屆機械工程、材料和自動化技術國際會議(MMEAT 2024) 2024 10th International Conference on Mechanical Engineering,Materials and Automation Technology 2024年第十屆機械工程、材料和自動化技術國際會議( MMEAT 2024) 將于2024年06月21-23日在中國武漢舉行。MM…

【LeetCode每日一題】單調棧316去除重復字母

題目&#xff1a;去除重復字母 給你一個字符串 s &#xff0c;請你去除字符串中重復的字母&#xff0c;使得每個字母只出現一次。需保證 返回結果的字典序最小&#xff08;要求不能打亂其他字符的相對位置&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;s “bcabc” 輸…

docker自定義網絡實現容器之間的通信

Background docker原理 docker是一個Client-Server結構的系統&#xff0c;Docker的守護進程運行在主機上。通過Socket從客戶端訪問。docker核心三大組件&#xff1a;image–鏡像、container-容器、 repository-倉庫。docker使用的cpu、內存以及系統內核等資源都是直接使用宿主…

python 函數-04-參數收集-帶1個或2個星號

一個函數&#xff0c;至多可以帶一個一星參數&#xff08;收集位置參數&#xff09;&#xff0c;加上一個二星參數&#xff08;收集關鍵字參數&#xff09;。 01 一個星號參數 入參為不定參數&#xff08;參數個數不確定&#xff09;&#xff0c;此時在定義參數時&#xff0c…

最簡單方式把jar打包成Windows服務

廢話 &#x1f622; 將JAR文件轉化為Windows服務是一種高效且常見的Java應用部署策略。這種轉變賦予了Java應用程序在Windows操作系統上以無界面后臺服務模式運行的能力&#xff0c;從而實現了持續、穩定且可靠的功能提供。這種部署方式不僅提升了應用的可用性&#xff0c…

Python學習筆記——類(編程風格)

編寫的應用比較復雜時&#xff0c;特別是大型項目&#xff0c;團隊分工協同&#xff0c;尤其要注意編程風格。 &#xff08;1&#xff09;類名應采用駝峰命名法&#xff0c;即將類名中的每個單詞的首字母都大寫&#xff08;類名的首字母是大寫的&#xff09;&#xff0c;并且不…

導入excel某些數值是0

目錄 導入excel某些數值是0數據全部都是0原因解決 部分數據是0原因解決 導入excel某些數值是0 數據全部都是0 有一列“工單本月入庫重量”全部的數據都是0 原因 展示的時候&#xff0c;展示的字段和內表需要展示的字段不一致&#xff0c;導致顯示的是0。 解決 修改展示的字…

kubernetes面試題及核心知識點

無狀態負載deployment有狀態管理 &#xff1a; config配置文件 secret密碼文件 內置volumn插件 1、emptyDir宿主機的存儲為容器分配資源。臨時儲存&#xff0c;隨著pod的刪除而消失&#xff0c; 2、hostPath宿主機的存儲為容器分配資源。不會隨著pod的刪除而消失&#xf…

Video generation models as world simulators-視頻生成模型作為世界模擬器

原文地址&#xff1a;Video generation models as world simulators 我們探索在視頻數據上進行大規模生成模型的訓練。具體來說&#xff0c;我們聯合訓練文本條件擴散模型&#xff0c;同時處理不同持續時間、分辨率和長寬比的視頻和圖像。我們利用一個在視頻和圖像潛在編碼的時…