常見的14個Spring MVC面試真題和答案,快快收藏漲漲知識!

Spring MVC框架是用於開發Web應用程序的最流行的Java框架之一。如果你一直在使用Java和開發基於Web的應用程序,那麼你很可能已經在項目中使用了Spring MVC。在過去十年中,它已成為開發Java Web應用程序的框架。Spring MVC是基於經典的MVC(模型 - 視圖 - 控制器)設計模式。由於其廣泛的普及性和實用性,大多數Java開發工作需要對Spring和Spring MVC有一定的了解。

針對Java程序員的20個Spring MVC面試問題

1、 MVC是設計模式的縮寫,它代表什麼?它背後的思想是什麼

MVC是模型 - 視圖 - 控制器設計模式的縮寫。該模式基於關注點分離設計原理,該原理促進處理不同層的不同功能和層之間的鬆散耦合。 在MVC模式中,Model包含View和Controler幫助在請求處理和路由中呈現的數據。

兩個模型都不知道View,View也不依賴於Model,這意味著可以通過不同的視圖呈現相同的模型,例如JSP,FreeMarker,甚至可以在RESTful Web Services的情況下將其編寫為JSON或XML。

2、是否需要在類路徑中使用spring-mvc.jar,或者是spring-core的一部分?

spring-mvc.jar不是spring-core的一部分,如果要在Java項目中使用Spring MVC框架,則必須在應用程序的類路徑中包含spring-mvc.jar。在Java Web應用程序中,spring-mvc.jar通常放在/ WEB-INF / lib文件夾中。

3、什麼是DispatcherServlet以及它用於什麼?

DispatcherServlet是Front Controller設計模式的一個實現,它處理對Spring MVC應用程序的所有傳入Web請求。前端控制器模式是Web應用程序中的常見模式,其作用是接收所有請求並將其路由到應用程序的不同組件以進行實際處理。

在Spring MVC的情況下,DispatcherServlet將Web請求路由到Spring MVC控制器。

在Spring MVC中,DispatcherServlet用於查找正確的Controler以處理請求,它在處理程序映射的幫助下執行,例如@RequestMapping注釋。

它還負責將邏輯視圖名稱委派給ViewResolver,然後將呈現的響應發送到客戶端。

4、DispatcherServlet如何通過應用程序上下文實例化?

DispatcherServlet由Tomcat或Jetty等Servlet容器實例化。必須將DispatcherServlet定義到web.xml文件中,如下所示。

可以看到load-on-startup標記為1,當Spring MVC應用程序部署到Tomcat或任何其他Servlet容器時,將實例化DispatcherServlet。在實例化期間,它會查找文件servlet-name-context.xml,然後初始化此文件中定義的bean。

5. Spring MVC中的root應用程序上下文是什麼?怎麼裝載的?

在Spring MVC中,使用ContextLoaderListener載入的上下文稱為「root」應用程序上下文,它屬於整個應用程序,而使用DispatcherServlet初始化的應用程序上下文實際上是特定於該servlet。

從技術上講,Spring MVC允許在Spring MVC Web應用程序中使用多個DispatcherServlet ,因此可能存在多個這樣的上下文,每個上下文都針對相應的servlet,但是具有相同的根上下文。

6、@Controller注釋的用途?如何在沒有注釋的情況下創建控制器?

@Controller是用來定義Controller的Spring MVC注釋,但實際上它只是一個原型注釋。甚至可以在沒有@Controller的情況下通過使用@Component注釋Spring MVC控制器類來創建控制器。請求映射到處理程序方法的實際工作是使用@RequestMapping注釋來完成的。

7、什麼是ContextLoaderListener,它的作用是什麼?

ContextLoaderListener是一個監聽器,這有助於引導Spring MVC的。顧名思義它載入並創建ApplicationContext,因此不必編寫顯式代碼來創建它。應用程序上下文是Spring bean離開的地方。對於Web應用程序,有一個名為WebAppliationContext的子類。

ContextLoaderListener還將ApplicationContext的生命周期與ServletContext的生命周期聯繫起來。這可以使用getServletContext()方法從WebApplicationContext獲取ServletContext。

8.你打算在web.xml中做什麼?你把它放在哪裡?

ContextLoaderListener是在web.xml中配置為監聽器的,可以將它放在一個標記中,如下所示:

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

部署Spring MVC Web應用程序時,Servlet容器創建了一個ContextLoaderListener類的實例,該類載入Spring的WebApplicationContext。

9. 傳入請求如何映射到控制器和方法?

有時也會問這個問題DispatcherServlet如何知道哪個Controller應該處理請求?

Spring使用處理程序映射將控制器與請求相關聯,兩個常用的處理程序映射是BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping。

在BeanNameUrlHandlerMapping中,當請求url與bean的名稱匹配時,bean定義中的類是將處理請求的控制器。

另一方面,在SimpleUrlHandlerMapping中,映射更明確。可以指定URL的數量,並且每個URL可以與控制器顯式關聯。

順便說一句,如果你使用注釋來配置Spring MVC,那麼應該使用@RequestMapping注釋將傳入請求映射到控制器和處理程序方法。

還可以通過URI路徑,查詢參數,請求的HTTP方法以及請求中存在的HTTP標頭配置@RequestMapping批註。

10、@RequestParam用於什麼?

@RequestParam是一個Spring MVC注釋,其被用於提取從URL中控制器的處理程序方法請求參數或查詢參數,如下所示:

public String personDetail(@RequestParam(「id」)long id){
....
return「personDetails」;
}

@RequestParam注釋也支持數據類型轉換,例如這裡可以看到一個String被自動轉換為long,但它也可能導致一個異常,如果查詢參數不存在或類型不匹配的情況下 還可以使用requried = false使參數成為可選參數,例如@RequestParam(value =「id」,required = false)

11、.控制器方法的一些有效返回類型是什麼?

Spring MVC中的控制器方法有許多可用的返回類型,這些方法由控制器內部的@RequestMapping注釋。其中一些流行的是:

1.String

2.void

3.View

4.ModelAndView (Class)

5.Model (Interface)

6.Map

7.HttpEntity<?> or ResponseEntity<?>

8.HttpHeaders

每種返回類型都有其特定用途。例如,如果使用的是String,則表示Controller只返回View Name,此視圖名稱將由ViewResolver解析。

如果不想返回任何視圖名稱,請提回返回類型void。如果要設置視圖名稱以及想要發送一些對象,請使用ModelAndView作為返回類型。

12、什麼是模型?

Model再次是封裝數據或輸出以進行渲染的引用。始終創建模型並將其傳遞給Spring MVC中的視圖。如果映射的控制器方法將Model作為方法參數,則Spring框架會自動將模型實例注入該方法。

注入模型上設置的任何屬性都將保留並傳遞給View。以下是在Spring MVC中使用Model的示例:

public String personDetail(Model model){
...
model.addAttribute(「name」,「Joe」);
...
}

13、為什麼控制器可測試工件?

在Spring中,MVC控制器是可測試的工件,因為它們不直接與任何View技術相結合。它們只返回一個邏輯視圖名稱,可以輕鬆測試。

14、InternalResourceViewResolver有什麼作用?

在Spring MVC中,ViewResolveer返回View以處理基於邏輯視圖名稱(由控制器提供)和語言環境輸出呈現。這種方式控制器沒有耦合到特定的視圖技術,例如JSP或FreeMarker,它只返回邏輯視圖名稱。

InternalResourceViewResolver是在Spring MVC和DispatcherServlet中配置的默認View解析器用它來找到正確的視圖。InternalResourceViewResolver用於呈現JSP(JstlView)。

它將前綴和後綴配置為邏輯視圖名稱,然後生成特定JSP的路徑,如下所示:

<bean class =「org.springframework.web.servlet.view.InternalResourceViewResolver」>
< property name =「prefix」value =「 / WEB-INF /「/ >
< property name =」suffix「value =」。jsp「/ >
< / bean >

因此,如果Controller返回」hello「作為邏輯視圖名稱,則InternalViewResolver將返回/ WEB-INF / hello。

這就是一些 常見的Spring MVC面試問題

推薦閱讀:

TAG:Java編程 | Java程序員 | JavaWeb |