针对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很认真,那么这就是您应该查看的课程。

20年春季MVC面试问题和答案2至5年经验丰富

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基础知识的更多信息。

Spring MVC访谈问题与解答

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  。

Spring MVC访谈问题和解答2至5年经验丰富的Java程序员

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

祝你的面试好运!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值