1. 程式人生 > >針對Java程式設計師的20個Spring MVC訪談問題

針對Java程式設計師的20個Spring MVC訪談問題

不用多說,這裡是我從Java訪談中常見的一些常見問題的Spring MVC問題列表,特別是來自Web開發職位。

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

答案:MVC是Model-View-Controller設計模式的縮寫。該模式基於關注點分離設計原理,該原理促進處理不同層的不同功能以及層之間的鬆散耦合。

在MVC模式中,模型包含由View和Controler幫助在請求處理和路由中呈現的資料。

兩個模型都不知道View,或View不依賴於Model,這意味著相同的模型可以由不同的檢視呈現,例如JSP或FreeMarker,或者甚至可以在RESTful Web服務的情況下編寫為JSON或XML。您可以在我個人講解的手寫SpringMVC原始碼中瞭解有關MVC的更多資訊 。如果您對Spring很認真,那麼這就是您應該檢視的課程。可以加入我的Java後端進階架構學習群:

952124565

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 用於查詢正確的Controller來處理請求,它在處理程式對映的幫助下完成,例如 @RequestMapping 註釋。

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

4.是否 DispatcherServlet 通過應用程式上下文例項化?

不,它 DispatcherServlet 是由像Tomcat或Jetty這樣的Servlet容器例項化的。您必須將其定義 DispatcherServlet 到web.xml檔案中,如下所示。

您可以看到 load-on-startup 標記為1,這意味著 DispatcherServlet 在將Spring MVC應用程式部署到Tomcat或任何其他Servlet容器時會例項化。在例項化期間,它會查詢檔案servlet-name-context.xml,然後初始化此檔案中定義的bean。

5. Spring MVC中的根應用程式上下文是什麼?怎麼裝?

在Spring MVC中,使用的上下文 ContextLoaderListener 稱為“根”應用程式上下文,它屬於整個應用程式,而初始化使用的上下文 DispatcherServlet 實際上是特定於該servlet的。

從技術上講,Spring MVC允許 DispatcherServlet 在Spring MVC Web應用程式中使用多個,因此,多個上下文分別針對相應的servlet。但是,可能存在相同的根上下文。您可以進一步檢視 關於Pluralsight的Spring MVC課程簡介,以瞭解有關Spring基礎知識的更多資訊。

6. @Controller 用於什麼 註釋?如何在沒有註釋的情況下建立控制器?

這 @Controller 是一個用於定義Controller的Spring MVC註釋,但實際上,它只是一個刻板印象註釋。您甚至可以使用@Controller 註釋建立一個控制器而無需 註釋Spring MVC Controller類 @Component 。請求對映到處理程式方法的實際工作是使用@RequestMapping 註釋完成的 。

7. ContextLoaderListener 它是什麼以及它做了什麼?

這 ContextLoaderListener 是一個有助於引導Spring MVC的監聽器。顧名思義,它會載入並建立 ApplicationContext, 因此您不必編寫顯式程式碼來建立它。

應用程式上下文是Spring bean離開的地方。對於Web應用程式,有一個名為的子類 WebAppliationContext。

該 ContextLoaderListener 還關係的生命週期 ApplicationContext 到的生命週期 ServletContext。你可以 ServletContext 從 WebApplicationContext 使用 getServletContext() 方法中獲得。

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

將 ContextLoaderListener 在web.xml中為收聽配置,你把一個標籤內,如下圖所示:

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

部署Spring MVC Web應用程式時,Servlet容器建立了一個ContextLoaderListener 類的例項,該例項 載入了Spring WebApplicationContext。您還可以看到 Spring MVC的初學者 ,以瞭解更多有關 ContextLoaderListener 和 WebApplicationContext 與他們的Spring MVC中的作用。

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

有時,還會問這個問題:如何 DispatcherServlet 知道哪個Controller應該處理請求?嗯,答案在於稱為處理程式對映的東西。

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

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

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

如果您正在使用註釋來配置Spring MVC,則應使用註釋將 @RequestMapping 傳入請求對映到控制器和處理程式方法。

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

10. @RequestParam 用於什麼?

這 @RequestParam 是一個Spring MVC註釋,用於從Controller的處理程式方法中的URL中提取請求引數或查詢引數,如下所示:

public String personDetail(@RequestParam(“id”)long id){
 ....
 返回 “personDetails” ;
}

該 @RequestParam 註釋還支援資料型別轉換,例如,你可以在這裡看到一個字串轉換為自動登入,但它也可以導致一個異常,如果查詢引數不存在或型別不匹配的情況。您還可以使用requried = false使引數可選,例如 @RequestParam (value =“id”,required = false)

11. @RequestParam 和 之間有什麼區別 @PathVariable ?

儘管兩者 @RequestParam 和 @PathVariable 註釋都用於從URL中提取一些資料,但它們之間存在關鍵差異。

將 @RequestParam 用於提取查詢引數後,例如什麼“?” 在URL中, @PathVariable 用於提取URI本身的一部分。例如,如果給定的URL是http:// localhost:8080 / SpringMVC / books / 3232233 /?format = json,那麼您可以使用@RequestParam 註釋和/ books / {id}使用 @PathVariable,訪問查詢引數“format” ,哪個會給你3232233。

這是另一個例子 @PathVariable:

@RequestMapping(“/ persons / {id}”)
public String personDetail(@PathVariable(“id”)long id){...}

此程式碼可以從/ persons / 123中提取person id = 123。它特別用於 RESTful Web服務, 因為它們的ID通常是URI或URL路徑的一部分。

12.控制器方法的一些有效返回型別是什麼?

Spring MVC中的控制器方法有許多返回型別,它們由@RequestMapping 控制器內部註釋 。一些流行的是:

  1. 空虛
  2. 檢視
  3. ModelAndView(Class)
  4. 型號(介面)
  5. 地圖
  6. HttpEntity <?>或ResponseEntity <?>
  7. HttpHeaders

您可以在此處檢視 Spring MVC控制器的有效返回型別的完整列表。

每種返回型別都有其特定用途。例如,如果您正在使用String,那麼這意味著Controller將只返回檢視名稱,此檢視名稱將被解析 ViewResolver。

如果您不想返回任何檢視名稱,請提及返回型別void。如果要設定檢視名稱以及要傳送物件,請將其 ModelAndView 用作返回型別。

13.什麼是 View 支援不同型別的背後的想法是 View什麼?

A View 是Spring MVC應用程式中的一個介面,其實現負責呈現上下文和公開模型。單個檢視公開多個模型屬性。Spring MVC中的檢視可以是bean。

它們很可能被a例項化為bean ViewResolver。由於此介面是無狀態的,因此檢視實現應該是執行緒安全的。通過使用 ViewResolver,可以將檢視的邏輯名稱解析為不同型別的 View 實現,例如, JstlView 用於顯示FreeMarker和Velocity的JSP或其他檢視實現。

如果您是Spring MVC的新手,並且不熟悉這些基礎課程,那麼我建議您通過加入其中一門免費的​​Spring課程來學習Spring 。那麼哪裡有免費的課程呢?可以加入我的Java後端進階架構學習群:952124565

14. View 在渲染階段,如何選擇正確的權利 ?

右邊 View 是由ViewResolver Spring MVC 選擇的 。當Controller返回邏輯檢視名稱時 DispatcherServlet,它會查詢 ViewResolver 以找到正確的名稱 View。

的 ViewResolver,這取決於它的實施,解決了邏輯檢視到物理資源,例如JSP頁面或Freemarker模板。

例如, InternalResourceViewResolver 是一個預設值 ViewResolver ,它使用字首和字尾將邏輯檢視名稱(例如“hello”)轉換為“/WEB-INF/hello.jsp”。

15.什麼是 Model?

Model 是用於封裝資料或輸出以進行渲染的引用。 Model 始終建立並傳遞給Spring MVC中的檢視。如果對映的控制器方法具有 Model 方法引數,則 model Spring框架會自動將例項注入該方法。

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

public String personDetail(Model model){
...
模特。addAttribute(“name”,“Joe”);
...
}

16.為什麼你可以訪問 model 你的 View?它從何而來?

您需要訪問 model View中的檢視才能呈現輸出。它 model 包含要呈現的資料。該 Model 控制器隨附,其處理他們的客戶機請求並封裝輸出成 Model 物件。

17.會議範圍的目的是什麼?

會話範圍的目的是為HTTP會話建立bean的例項。這意味著如果相同的bean在會話中作用域,則可以為多個請求提供服務。您可以使用範圍屬性或@Scope Spring MVC應用程式中的註釋來定義Spring bean的範圍 。

18. Web上下文中的預設範圍是什麼?

單例作用域是Spring bean的預設作用域,即使在Web上下文中也是如此。其他三個Web上下文感知範圍是請求,會話和全域性會話,它們僅在Web應用程式感知ApplicationContext 物件中可用 。請參閱 Spring Master Class - Beginner to Expert 以瞭解有關ApplicationContext Spring的更多資訊 。

19.為什麼控制器可測試工件?

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

20.這有什麼作用 InternalResourceViewResolver ?

在Spring MVC中, ViewResolver 返回 View 基於邏輯檢視名稱(由控制器提供)和語言環境處理輸出呈現。這樣,Controller不會耦合到特定的檢視技術,例如JSP或FreeMarker。它只返回邏輯檢視名稱。

InternalResourceViewResolver 是ViewResolver Spring MVC中配置的預設值 , DispatcherServlet 使用它來查詢正確的檢視。 InternalResourceViewResolver 用於呈現JSPs( 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.jsp,並將 DispatcherServlet 請求轉發到此JSP頁面進行渲染。

關於常見問題的Spring MVC面試問題,現在都是如此 。如果您知道這些問題的答案,那麼您就擁有了Spring MVC框架及其不同元件的良好基礎,例如 DispatcherServlet處理程式對映,控制器 Views和 Model。

祝你的面試好運!