面试必背 Spring MVC面试题

面试必背 Spring MVC面试题,第1张

1. 概述

1.1 什么是Spring MVC?简单介绍下你对Spring MVC的理解?

1.2 Spring MVC的优点

2. 工作原理

2. 1请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?

3. MVC框架

3. 1 MVC是什么?MVC设计模式的好处有哪些

4. 核心组件

4.1 什么是DispatcherServlet

4.2 springMVC的主要组件

5. springMVC常用注解

5.1 常用注解

5.2 SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?

6. 其他

6.1 Spring MVC与Struts2区别

6.2 Spring MVC怎么样设定重定向和转发的?

6.3 如何解决POST请求中文乱码问题,GET的又如何处理呢?

6.4 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置

6.5 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

6.6 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

6.7 Spring MVC用什么对象从后台向前台传递数据的?

6.8 Spring MVC里面拦截器是怎么写的

1. 概述

1.1 什么是Spring MVC?简单介绍下你对Spring MVC的理解?

答:Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

名词解释:

轻量级:指的是各个组件之间的依赖程度,轻量级依赖程度比较低。

1.2 Spring MVC的优点

(1)可以支持各种视图技术,而不仅仅局限于JSP;()

(2)与Spring框架集成(如IoC容器、AOP等);

(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。

(4) 支持各种请求资源的映射策略。

2. 工作原理

2. 1请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?

(1)用户发送请求至前端控制器DispatcherServlet;

(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;

(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;

(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;

(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);

(6)Handler执行完成返回ModelAndView;

(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;

(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;

(9)ViewResolver解析后返回具体View;

(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)

(11)DispatcherServlet响应用户。

3. MVC框架

3. 1 MVC是什么?MVC设计模式的好处有哪些

mvc是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验的总结)。模型(model)-视图(view)-控制器(controller),三层架构的设计模式。用于实现前端页面的展现与后端业务数据处理的分离。

mvc设计模式的好处

1.分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。

2.有利于系统的并行开发,提升开发效率。

4. 核心组件

4.1 什么是DispatcherServlet

DispatcherServlet是springMVC的最核心的组件,Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

4.2 springMVC的主要组件

(1)前端控制器 DispatcherServlet(不需要程序员开发)

作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

(2)处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的URL来查找Handler

(3)处理器适配器HandlerAdapter

注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

(4)处理器Handler(需要程序员开发)

(5)视图解析器 ViewResolver(不需要程序员开发)

作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)

(6)视图View(需要程序员开发jsp)

View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

5. springMVC常用注解

5.1 常用注解

@RequstMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@Controller:在springMVC中,@Controller用于处理由DispatherServlet分发的请求,封装成Model对象,用于调用业务层方法。
@RequstParam:把请求中的指定参数名称给控制器参数赋值,用value指定名称。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象
@ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户。
@PathVariable:主要用于URL上的模板变量映射到功能处理方法的参数上,可以取出来当做参数来使用。

5.2 SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?

一般使用的时@Controller,也可以使用@RestController,它的作用相当于@Controller+@ResponseBody,表示表现层,一般不用其它的注解替换。

6. 其他

6.1 Spring MVC与Struts2区别

相同点

都是基于mvc的表现层框架,都用于web项目的开发。

不同点

  1. 前端控制器不一样。Spring MVC的前端控制器是servlet:DispatcherServlet。struts2的前端控制器是filter:StrutsPreparedAndExcutorFilter。
  2. 请求参数的接收方式不一样。Spring MVC是使用方法的形参接收请求的参数,基于方法的开发,线程安全,可以设计为单例或者多例的开发,推荐使用单例模式的开发(执行效率更高),默认就是单例开发模式。struts2是通过类的成员变量接收请求的参数,是基于类的开发,线程不安全,只能设计为多例的开发。
  3. Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,Spring MVC通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

6.2 Spring MVC怎么样设定重定向和转发的?

其实有两个方法:

方法一:通过给controller方法的形参传递HttpRequest和HttpResponse来设定forward和sendRedirect。

方法二:直接在return方法返回值时进行重定向和转发。如 return “forward /index.jsp”;

6.3 如何解决POST请求中文乱码问题,GET的又如何处理呢?

(1)解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;


CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
utf-8



CharacterEncodingFilter
/*

(2)get请求中文参数出现乱码解决方法有两个:

①修改tomcat配置文件添加编码与工程编码一致,如下:

②另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

6.4 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置

答:可以在@RequestMapping注解里面加method=RequestMethod.GET。

6.5 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

答:在方法中直接声明这个对象,springMVC就会自动把属性赋值到这个对象中。

6.6 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

答:可以直接在形参中定义这个参数即可,但是名称必须一样。

6.7 Spring MVC用什么对象从后台向前台传递数据的?

使用Model 的addObject方法或者它的实现类ModelMap

6.8 Spring MVC里面拦截器是怎么写的

有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在Spring MVC的配置文件中配置拦截器即可:










感谢阅读,由于篇幅有限以上面经资料博主已经整理打包好了,这些知识点的导图和问题的答案详解的PDF文档都可以免费分享给大家,点赞收藏文章后,私信【资料】免费领取!
 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/737121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存