SpringMVC 面試重點題目及答案分享_第1頁
SpringMVC 面試重點題目及答案分享_第2頁
SpringMVC 面試重點題目及答案分享_第3頁
SpringMVC 面試重點題目及答案分享_第4頁
SpringMVC 面試重點題目及答案分享_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SpringMVC面試重點題目及答案分享考試時間:______分鐘總分:______分姓名:______一、選擇題(每題2分,共20分)1.在SpringMVC中,負責接收用戶請求并將請求分發到具體處理器(Controller)的核心組件是?A.`HandlerAdapter`B.`HandlerMapping`C.`DispatcherServlet`D.`ViewResolver`2.以下哪個注解通常用于標記Spring的控制器類(Controller)?A.`@Service`B.`@Repository`C.`@Component`D.`@Controller`3.如果一個SpringMVC控制器方法需要返回JSON數據給客戶端,除了使用`@ResponseBody`注解外,該控制器類通常應該使用哪個注解?A.`@RestController`B.`@RequestMapping`C.`@Service`D.`@Component`4.在SpringMVC中,`@RequestMapping("/users/{id}")`中的`{id}`部分表示什么?A.一個請求參數B.一個請求頭C.一個路徑變量(PathVariable)D.一個請求體5.當使用`@RequestParam`注解綁定請求參數時,如果請求參數不存在,且沒有指定`required`屬性或將其設置為`false`,會發生什么?A.拋出`NullPointerException`B.綁定值為`null`C.綁定值為空字符串`""`D.請求處理會中斷6.SpringMVC中,用于將請求體中的JSON數據綁定到控制器方法參數的對象通常是?A.`@RequestParam`對象B.`@SessionAttribute`對象C.`@RequestBody`對象D.`@CookieValue`對象7.`@GetMapping`,`@PostMapping`等注解是哪個注解的派生注解?A.`@RequestMapping`B.`@Controller`C.`@ResponseBody`D.`@InitBinder`8.如果想全局性地配置SpringMVC的消息轉換器(如將字符串轉換為整數),可以通過實現哪個接口并注冊到Spring容器中?A.`HandlerInterceptor`B.`HandlerMapping`C.`WebMvcConfigurer`D.`HandlerExceptionResolver`9.在SpringMVC中,`Model`對象的作用是什么?A.存儲攔截器中的數據B.配置`DispatcherServlet`C.傳遞數據到視圖進行渲染D.處理請求參數的校驗10.`@SessionAttributes`注解用于什么場景?A.配置攔截器B.處理控制器方法拋出的異常C.將模型數據存儲在HTTP會話中D.自定義數據綁定器二、多選題(每題3分,共30分)1.SpringMVC的工作流程中,哪些組件(或接口)會參與到請求處理的各個環節?A.`DispatcherServlet`B.`HandlerInterceptor`C.`ViewResolver`D.`HandlerAdapter`E.`MessageConverter`2.以下哪些注解可以用于標注在SpringMVC控制器的方法上,以指定該方法的訪問路徑?A.`@RequestMapping`B.`@GetMapping`C.`@PostMapping`D.`@PutMapping`E.`@InitBinder`3.關于SpringMVC的`@RequestParam`注解,以下說法哪些是正確的?A.可以用于綁定路徑變量B.可以通過`params`屬性指定必須存在的請求參數C.可以通過`headers`屬性指定必須存在的請求頭D.可以通過`value`屬性指定請求參數名E.可以通過`required`屬性指定請求參數是否必須存在4.SpringMVC中,以下哪些類或接口與異常處理相關?A.`HandlerExceptionResolver`B.`@ControllerAdvice`C.`@ExceptionHandler`D.`@InitBinder`E.`BindingResult`5.文件上傳在SpringMVC中需要哪些配置或組件支持?A.表單必須設置`enctype="multipart/form-data"`B.需要配置一個`MultipartResolver`BeanC.控制器方法參數需要使用`@RequestParam("file")`或`@RequestPart`注解D.SpringMVC默認支持大文件上傳,無需額外配置E.需要導入`spring-web`依賴6.`WebMvcConfigurer`接口提供了哪些擴展點,允許開發者自定義SpringMVC的行為?A.配置視圖解析器B.配置消息轉換器C.配置格式化器D.注冊攔截器E.配置靜態資源處理7.在SpringMVC中,`@Controller`、`@Service`、`@Repository`注解的主要區別是什么?A.`@Controller`用于控制器層,`@Service`用于服務層,`@Repository`用于數據訪問層B.三者都用于標記Spring的組件,使它們能被Spring容器掃描和管理C.被`@Controller`標注的類不能注入其他層(`@Service`或`@Repository`)的BeanD.被`@Service`標注的類通常處理業務邏輯,被`@Repository`標注的類負責數據庫操作E.使用`@Repository`注解的類在運行時會進行AOP代理以實現事務管理8.關于SpringMVC的攔截器(`HandlerInterceptor`),以下說法哪些是正確的?A.攔截器可以修改請求參數B.攔截器可以在請求處理完成后修改`Model`數據C.攔截器必須實現`HandlerInterceptor`接口的三個方法D.攔截器執行順序是根據注冊時的順序決定的E.攔截器可以用來實現登錄驗證9.以下哪些注解與SpringMVC中的數據校驗相關?A.`@NotNull`B.`@Valid`C.`@Size`D.`@InitBinder`E.`BindingResult`10.`@ResponseBody`注解的作用是什么?它通常與哪個注解一起使用?A.用于將方法返回的對象序列化為JSON或XML并寫入響應體B.它會覆蓋視圖解析器的默認行為C.它主要用于RESTfulAPI的開發D.當控制器類使用了`@RestController`注解時,其方法可以不加`@ResponseBody`也能返回JSONE.它與`@RequestMapping`注解共同定義了請求的路徑和方法三、判斷題(每題1分,共10分)1.SpringMVC的`DispatcherServlet`是每個Web應用中都必須存在的唯一前端控制器。()2.使用`@SessionAttributes`注解添加的屬性默認會存儲在HTTP會話中,直到會話過期。()3.`@ExceptionHandler`注解必須標注在一個使用了`@ControllerAdvice`注解的類中才能生效。()4.`HandlerMapping`只負責根據請求路徑找到對應的Controller方法,不關心方法如何執行。()5.在SpringMVC中,任何返回`void`類型的控制器方法,其視圖名稱默認與請求路徑一致。()6.`@InitBinder`注解可以用于自定義請求參數的綁定邏輯,例如日期格式的轉換。()7.SpringMVC默認使用`InternalResourceViewResolver`作為視圖解析器,需要手動配置才能使用其他類型的視圖解析器。()8.攔截器(Interceptor)和Spring的AOP一樣,都可以實現跨方法的通知。()9.`@RestControllerAdvice`是`@ControllerAdvice`的專門版本,僅用于REST控制器的異常處理。()10.`MultipartFile`接口實現了`java.io.InputStream`接口,因此可以像處理普通文件一樣處理上傳的文件流。()四、簡答題(每題5分,共20分)1.簡述SpringMVC中`DispatcherServlet`的主要職責。2.解釋`@RequestMapping`注解的`params`和`headers`屬性的作用,并各舉一個應用場景。3.描述SpringMVC中使用`@ControllerAdvice`和`@ExceptionHandler`結合處理全局異常的基本步驟。4.說明SpringMVC如何將請求參數(如字符串、日期)綁定到Java對象的屬性上,并簡述處理自定義類型轉換(如日期格式)的方法。五、綜合題(每題10分,共20分)1.假設需要開發一個SpringMVC控制器方法,用于處理用戶登錄請求。該方法的請求路徑為`/login`,使用POST方法。請求體中包含用戶名(username)和密碼(password)兩個字符串參數。如果登錄成功,希望返回一個包含用戶信息的JSON對象;如果失敗,則返回一個錯誤碼和錯誤信息。請寫出該控制器方法的基本實現,并說明需要哪些配置或注解支持。2.設計一個簡單的SpringMVC攔截器,用于記錄所有進入SpringMVC控制器方法的請求信息(如請求路徑、請求時間),并在請求處理完成后記錄響應時間。請簡述該攔截器需要實現哪些`HandlerInterceptor`接口方法,并說明在這些方法中應該如何實現記錄邏輯。試卷答案一、選擇題1.C解析:`DispatcherServlet`是前端控制器,負責接收所有Web請求,并統一調度處理。2.D解析:`@Controller`是Spring用于標注控制器的注解,表明該類是一個控制器組件。3.A解析:`@RestController`綜合了`@Controller`和`@ResponseBody`,使得控制器方法默認返回的數據會被視為JSON處理。4.C解析:`@RequestMapping`的`value`或`path`屬性中的`{id}`是PathVariable的語法,用于從URL中提取變量。5.B解析:`@RequestParam`的默認綁定行為是,如果參數不存在且`required=false`,則綁定值為`null`。6.C解析:`@RequestBody`用于將請求體中的JSON(或其他格式)數據反序列化綁定到指定的對象上。7.A解析:`@GetMapping`,`@PostMapping`等sontdesdérivésde`@RequestMapping`,spécifientlesméthodesHTTPpardéfaut.8.C解析:`WebMvcConfigurer`接口提供了多種`void`方法,允許自定義SpringMVC的各種配置,如視圖解析器、消息轉換器等。9.C解析:`Model`對象是一個`Map`,用于存儲要傳遞給視圖的數據。10.C解析:`@SessionAttributes`用于指定哪些模型屬性需要放入HTTP會話中。二、多選題1.A,B,C,D,E解析:所有選項都參與到SpringMVC的請求處理流程中。`DispatcherServlet`是入口,`HandlerMapping`分發,`HandlerAdapter`執行,`Interceptor`攔截,`MessageConverter`轉換,`ViewResolver`渲染。2.A,B,C,D解析:`@RequestMapping`是基礎,`@GetMapping`等是`@RequestMapping`的方法級別變種。3.B,C,D,E解析:`params`和`headers`用于更精確地匹配請求,`value`指定參數名,`required`指定是否必須。`A`錯誤,路徑變量用`@PathVariable`。4.A,B,C解析:`HandlerExceptionResolver`是傳統異常處理器,`@ControllerAdvice`+`@ExceptionHandler`是現代全局異常處理方式,`@ExceptionHandler`是`@ControllerAdvice`中處理異常的方法。5.A,B,C解析:文件上傳需要`multipart/form-data`表單,配置`MultipartResolver`,方法參數用`@RequestParam`或`@RequestPart`接收`MultipartFile`。`D`錯誤,大文件可能需要配置。6.A,B,C,D解析:這些都是`WebMvcConfigurer`提供的擴展配置點。7.A,B,D解析:`A`描述了三層架構中常見注解的用途;`B`是正確的基本功能;`C`錯誤,`@Controller`也可以注入其他層Bean;`D`描述了服務層和倉庫層的典型職責。`E`錯誤,事務管理通常通過`@Transactional`注解或AOP實現。8.A,B,C,D,E解析:攔截器可以在預處理、后處理、完成處理階段修改請求、響應、模型數據。需要實現三個方法,執行順序取決于注冊順序,可用于登錄驗證等。9.A,B,C解析:`@NotNull`,`@Valid`,`@Size`都是JSR303/JSR349校驗注解。`D`用于自定義參數綁定。`E`是`@Valid`注解的作用對象。10.A,B,C,E解析:`A`是`@ResponseBody`的核心作用。`B`正確,它會阻止默認的視圖解析。`C`正確,是RESTAPI的常用場景。`D`錯誤,`@RestController`的方法可以不加`@ResponseBody`返回對象,但會自動被`@ResponseBody`處理。`E`正確,`@RestController`內部集成了`@ResponseBody`。三、判斷題1.錯誤解析:一個Web應用可以配置多個`DispatcherServlet`,但通常只有一個用于處理普通請求,可能還有專門用于靜態資源或特定模塊的。2.正確解析:`@SessionAttributes`添加的屬性默認存儲在會話中,除非指定了其他存儲類型(如`sessionAttributes`)。3.錯誤解析:`@ExceptionHandler`注解可以直接標注在`@Controller`或`@RestController`類的方法上,處理該類拋出的異常。4.正確解析:`HandlerMapping`負責根據請求信息(如URL、HTTP方法)查找合適的`Handler`(即Controller方法),`HandlerAdapter`才負責調用該方法。5.錯誤解析:返回`void`的方法需要顯式使用`@RequestMapping`指定`produces`或`responseStatus`,否則SpringMVC會嘗試尋找匹配的視圖,如果沒有則報錯。默認行為不是與請求路徑一致。6.正確解析:`@InitBinder`用于注冊`PropertyEditor`或自定義`BindingResult`的`CustomEditorConfigurer`,可以處理復雜類型轉換。7.錯誤解析:`InternalResourceViewResolver`是默認視圖解析器,其行為可以通過配置修改(如設置前綴、后綴),但它本身是默認配置的一部分。使用其他視圖解析器需要顯式配置。8.正確解析:攔截器在方法調用前后執行代碼,AOP在方法執行前后(或返回后)通過切點表達式攔截方法執行,都能實現跨方法通知。9.正確解析:`@RestControllerAdvice`是`@ControllerAdvice`的子注解,專門用于增強REST控制器的異常處理能力。10.正確解析:`MultipartFile`接口繼承自`java.io.InputStream`,可以從`InputStream`讀取文件內容,因此可以像處理普通輸入流一樣處理上傳文件。四、簡答題1.答:`DispatcherServlet`的主要職責是:*作為SpringMVC應用程序的前端控制器(FrontController),統一接收所有來自客戶端的HTTP請求。*解析請求中的參數,并將請求分發到合適的處理器(Handler,通常是某個Controller方法)。*調用`HandlerMapping`查找對應的`Handler`。*使用`HandlerAdapter`執行找到的`Handler`(即調用Controller方法)。*使用`MessageConverter`將Controller方法返回的對象轉換為適合HTTP響應的數據格式(如JSON、XML)。*將模型數據(Model)傳遞給`ViewResolver`。*使用`ViewResolver`找到對應的視圖(如JSP文件),并將模型數據渲染成完整的HTML頁面或其他格式的響應內容。*將最終的響應對象返回給客戶端。*管理`WebApplicationContext`,為SpringMVC核心組件和其他請求相關的Bean提供依賴注入。2.答:`@RequestMapping`的`params`屬性用于指定方法必須接收的請求參數名及其值,否則請求不會被處理。例如,`@RequestMapping("/user")`配置`params={"id=123"}`表示只有當請求參數`id`的值為`123`時,該方法才會被調用。場景:在一個包含多個用戶信息的列表頁面中,每個用戶的詳情頁面URL需要包含該用戶的唯一ID。可以使用`params`來確保請求詳情頁時,URL中必須帶有正確的`id`參數。3.答:使用`@ControllerAdvice`和`@ExceptionHandler`處理全局異常的基本步驟如下:*創建一個類,并使用`@ControllerAdvice`注解標記,表示該類是全局異常處理器。*在該類中,使用`@ExceptionHandler`注解標記方法,指定該方法用于處理特定類型的異常(如`@ExceptionHandler(Exception.class)`處理所有異常,或`@ExceptionHandler({MyException1.class,MyException2.class})`處理指定異常)。*`@ExceptionHandler`方法可以接收異常對象作為參數(通常是`Exception`或其子類)。*方法可以返回`View`對象(重定向或渲染視圖)、`String`(視圖名稱)、`ResponseEntity`(包含狀態碼和體的響應)、`void`(直接寫入響應體,常用于異步場景或RESTAPI返回JSON/XML)。*配置完成后,當任何SpringMVC控制器(或被`@ControllerAdvice`處理的控制器)拋出指定類型的異常時,對應的`@ExceptionHandler`方法會被自動調用,執行異常處理邏輯。4.答:SpringMVC通過以下方式綁定請求參數到Java對象屬性:*簡單類型和基本類型:根據`name`屬性匹配請求參數名,使用Spring的`ConversionService`將請求參數字符串轉換為對應的Java類型(如`"123"`->`123`,`"true"`->`true`)。*JavaBean:如果請求參數名與JavaBean的屬性名匹配,Spring會調用該屬性的`setter`方法,并將轉換后的參數值傳入。例如,請求參數`=John`會被綁定到`User`對象的`setName("John")`方法。*集合類型:使用`@RequestParam`的`value`或`name`屬性指定數組或集合類型的屬性名,Spring會將請求參數(通常是多個同名參數)解析為`String[]`或`List<String>`并綁定。處理自定義類型轉換(如日期格式)的方法:*自定義`PropertyEditor`:使用`@InitBinder`注解在Controller中注冊一個`CustomEditorConfigurer`,配置自定義的`PropertyEditor`來處理特定類型的轉換。*`@DateTimeFormat`:在需要轉換的日期類型屬性上使用`@DateTimeFormat(pattern="yyyy-MM-dd")`注解,Spring會自動使用`SimpleDateFormat`(或其他配置的格式化器)進行轉換。*`JavaTimeFormatter`:對于Java8的日期時間API(如`LocalDate`,`LocalDateTime`),可以使用`@DateTimeFormat(iso=ISO.DATE_TIME)`等注解進行轉換。五、綜合題1.答:基本實現如下:```javaimportorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.bind.annotation.ResponseStatus;importorg.springframework.http.HttpStatus;importjava.util.Map;@RestController@RequestMapping("/api")//可以放在類級別publicclassLoginController{@PostMapping("/login")publicMap<String,Object>login(@RequestBodyMap<String,String>loginInfo){Stringusername=loginInfo.get("username");Stringpassword=loginInfo.get("password");//...這里應該調用Service層進行驗證booleanisValid="correctUsername".equals(username)&&"correctPassword".equals(password);if(isValid){//假設返回用戶信息returnMap.of("status","success","user",Map.of("id",1,"name",username));}else{//返回錯誤信息,狀態碼由@ResponseStatus或自定義ResponseBuilder設置thrownewRuntimeException("Invalidusernameorpassword");//拋出異常,后續可全局處理或這里用@ResponseStatus//或者使用@ResponseStatus(HttpStatus.UNAUTHORIZED)直接返回狀態碼}//如果使用@ResponseStatus(HttpStatus.OK),則返回的JSON會默認帶有success狀態}//可選:如果不用全局異常處理,可以在這里捕獲異常并返回錯誤信息/*@ExceptionHandler(RuntimeException.class)publicMap<String,Object>handleLoginError(RuntimeExceptione){returnMap.of("status","error","message",e.getMessage());}*/}```需要的配置或注解:*`@RestController`:標記控制器類,并使其方法默認返回的數據被視為JSON。*`@RequestMapping("/api")`:類級別路徑前綴。*`@PostMapping("/login")`:指定方法處理POST請求的`/api/login`路徑。*`@RequestBody`:將請求體中的JSON數據綁定到`loginInfo`Map對象。*`@ResponseStatus`(可選):如果希望直接返回HTTP狀態碼(如401Unauthorized),可以使用此注解標記方法或異常。*`perties`或`application.yml`:可能需要配置`spring.mvc.hiddenmethod.filter.enabled=true`以啟用對請求體中`userId`等參數的保護(如果存在)。2.答:*需要實現的`HandlerInterceptor`方法:*`preHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)`:在Controller方法執行前調用。可以在此記錄請求路徑(`request.getRequestURI()`),請求時間(`System.currentTimeMillis()`)。*`postHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)`:在Controller方法執行后、視圖渲染前調用。可以在此記錄響應時間,并可以修改`modelAndView`。*`afterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)`:在整個請求處理完成后調用(即視圖渲染完畢后)。可以在此記錄最終響應時間,并且如果處理過程中發生了異常,`ex`參數會非空。可以在此進行資源清理或最終記錄。*記錄邏輯實現(偽代碼/思路):*在`preHandle`中:獲取當前時間戳`startTime`;記錄`requestURI`和`startTime`。*在`postHandle`中:獲取當前時間戳`responseTime`;記錄`responseTime`;計算處理時間`processTime=responseTime-startTime`。*在`afterCompletion`中:如果`ex`為`null`,表示無異常;記錄最終`responseTime`和`processTime`;如果`ex`非空,記錄異常信息`ex.getMessage()`和最終時間。```javaimportorg.springframework.web.servlet.HandlerInterceptor;importorg.springframework.web.servlet.ModelAndView;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.util.concurrent.atomic.AtomicLong;publicclassLoggingInterceptorimplementsHandlerInterceptor{privateAtomicLongrequestCount=newAtomicLong(0);@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{longstartTime=System.currentTimeMillis();request.setAttribute("requestStartTime",startTime);//存儲在request中,可能在postHandle或afterCompletion讀取System.out.println("Pre-handle:Request"+requestCount.incrementAndGet()+"-Path:"+request.getRequestURI()+",Time:"+startTime);returntrue;//繼續執行后續處理器}@OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論