本文主要是介绍针对Java程序员的20个Spring MVC访谈问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Spring MVC框架是用于开发Web应用程序的最流行的Java框架之一。如果您一直在使用Java并开发基于Web的应用程序,那么您很可能已经 在项目中使用了 Spring MVC。在过去十年中,它已成为开发Java Web应用程序的事实框架。Spring MVC基于经典的MVC(模型 - 视图 - 控制器)设计模式,但远不止于此。它利用了Spring框架在依赖注入 和 控制反转方面的优势 l并促进松散耦合的体系结构,类似于Spring框架。由于其极大的普及性和实用性,大多数Java开发角色需要对Spring和Spring MVC有很好的了解。
对具有Spring和Spring MVC知识和经验的优秀Java开发人员有很高的需求。为这种求职面试做好准备的一种方法是寻找潜在的面试问题。
这些问题不仅可以帮助您准备面试,还可以帮助您更好地理解基本概念,并鼓励您了解更多 - 这就是为什么我总是在寻找好的Spring MVC面试问题。
最近, 当我遇到Pivotal的一些Spring认证指南时,我正在准备 Spring Core Professional认证。这些指南包含一些关于Spring MVC的有趣问题。
尽管下面提供的这些问题只是为了让您对Spring认证的教学大纲有所了解,但实际上我发现许多这样的问题已经在各种Spring求职面试中被问到了我自己和朋友。
根据我的几个朋友的要求,我想在这里分享这些问题的答案。因此,如果您正在准备Spring认证或Java开发人员面试,您会发现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。您可以在我最喜欢的课程Spring Framework 5:Beginner to Guru中了解有关MVC的更多信息 。如果您对Spring很认真,那么这就是您应该查看的课程。
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
控制器内部注释 。一些流行的是:
- 串
- 空虚
- 视图
- ModelAndView(Class)
- 型号(接口)
- 地图
- HttpEntity <?>或ResponseEntity <?>
- 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 。
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
。
祝你的面试好运!
这篇关于针对Java程序员的20个Spring MVC访谈问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!