Java最新面试宝典 SpringMVC面试题)

Java最新面试宝典 SpringMVC面试题

  • 前言
  • 1、什么是SpringMVC?
  • 2、SpringMVC 的优点?
  • 3、Spring MVC配置步骤?
  • 4、SpringMVC工作原理了解吗?
  • 5、Spring MVC 核心组件的功能?
  • 6、B/S 系统标准的三层架构是什么?
  • 7、@Controller 注解有什么用?
  • 8、@RequestMapping 注解有什么用?
  • 9、@RestController 和 @Controller 有什么区别?
  • 10、@RequestMapping 和 @GetMapping 注解的不同之处在哪里?
  • 11、@RequestParam 和 @PathVariable 两个注解的区别?
  • 12、返回 JSON 格式使用什么注解?
  • 13、SpringMVC 拦截器与过滤器的区别?
  • 14、怎么控制过滤器和拦截器的执行顺序?
  • 15、SpringMVC 中如何解决请求中⽂乱码问题?
  • 16、怎么把ModelMap⾥⾯的数据放⼊Session⾥⾯
  • 17、SpringMVC 和 Struts2 的异同?
  • 18、SpringMVC 怎么样重定向和转发的?
  • 19、SpringMvc里面拦截器是怎么写的?
  • 20、HandlerInterceptor接口是什么?
  • 总结


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、什么是SpringMVC?

Spring MVC是一个基于Java的实现了MVC设计模式的轻量级Web框架,通过把Model,View,Controller分离,把复杂的web层分成逻辑清晰的3部分,减少了出错,方便开发人员之间的配合。

2、SpringMVC 的优点?

(1)可以支持各种视图技术,包括Jsp、Thymeleaf、Freemarker等;
(2)与Spring框架集成(包括IOC容器、AOP等);
(3)有清晰的角色分配:前端控制器,处理器映射器,处理器适配器,视图解析器。
(4)支持各种请求资源的映射策略。

3、Spring MVC配置步骤?

1)、搭建Spring MVC 环境需要使用的jar包;
2)、web.xml配置前端控制器以及SpringMVC.xml的路径:

< !--前端控制器配置(DispatcherServlet)-->
<servlet><servlet-name>SpringMVC </servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:SpringMVC .xml</param-value></init-param><!--自动动配置要放在<init-param>配置后,否则会报错--><load-on-startup>1</load-on-startup>
</servlet>
<!--配置控制器访问,配置的值为/ ,表示所有访问都会进入此前端控制器(.jsp访问地址除外)--><servlet-mapping><servlet-name>SpringMVC </servlet-name><url-pattern>/</url-pattern></servlet-mapping>

3)、在SpringMVC.xml的配置文件中:

<!-- 配置spring注解扫描--><context:component-scan base-package="Controller"></context:component-scan>
<!-- 配置SpringMVC 注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--配置视图解析器: --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀配置--><property name="prefix" value="/"></property><!--后缀配置--><property name="suffix" value=".jsp"></property></bean>
<!--配置静态资源:配置需要放行的静态资源地址,不需要解析该请求地址-->
<!-- mapping="":配置静态资源的请求路径location="":配置静态资源所在的路径,使用*通配符,一个*表示该路径下的资源,两个**表示该路径下的所有资源文件(包含子文件中的资源文件)--><mvc:resources mapping="/js/" location="/js/**"></mvc:resources><mvc:resources mapping="/css/" location="/css/**"></mvc:resources><mvc:resources mapping="/images/" location="/images/**"></mvc:resources>

4、SpringMVC工作原理了解吗?

原理如下图所示:
在这里插入图片描述
1)、客户端(浏览器)发送请求,直接请求到 DispatcherServlet;
2)、前端控制器调用处理器映射器HandlerMapping,处理器映射器根据请求URL信息解析返回一个处理器执行链,包含处理器(handler)和拦截器(interceptors);
3)、前端控制器调用处理器适配器HandlerAdapter,处理器适配器根据Handler来调用真正的处理器Controller,并处理相应的业务逻辑;
4)、处理完业务逻辑后,会返回一个ModelAndView对象(Model是封装的数据对象);
6)、然后前端控制器调用视图解析器ViewResolver,视图解析器根据View名称查找到具体的页面地址,并返回一个View 视图对象;
7)、然后前端控制器对视图进行渲染,最后通过页面展示给客户端。

5、Spring MVC 核心组件的功能?

  • 前端控制器DispatcherServlet :
    DispatcherServlet 是 Spring MVC 的入口函数。负责接收客户端请求,响应结果给客户端,相当于转发器。有了 DispatcherServlet ,可以大大减少其它组件之间的耦合度。
    DispatcherServlet 是整个流程控制的中心,由它来调用其它组件处理用户的请求。
  • 处理器映射器HandlerMapping :
    HandlerMapping 负责根据用户请求(URL),找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)
  • 处理器适配器HandlerAdapter:
    按照特定规则(HandlerAdapter 要求的规则)去执行 Handler,通过 HandlerAdapter 对处理器进行执行。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。所以这里需要一个处理器适配器,由它去执行处理器。
  • 处理器 Handler:(需要工程师开发)
    Handler 是在 DispatcherServlet 的控制下,Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况下需要工程师根据业务需求来开发 Handler。
  • 视图解析器 View Resolver:
    进行视图解析,首先,根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成 View 视图对象。
  • MultipartResolver 内容类型( Content-Type )为 multipart/* 的请求的解析器,⽤于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实现。
    MultipartHttpServletRequest 可以通过 getFile() ⽅法 直接获得⽂件。
    如果上传多个⽂件,还可以调⽤ getFileMap()⽅法得到Map<FileName,File>这样的结构,MultipartResolver 的作⽤就是封装普通的请求,使其拥有⽂件上传的功能。

6、B/S 系统标准的三层架构是什么?

B/S系统标准的三层架构分别是:表现层、业务层、持久层。

    1. 表现层 :
      常说的web 层:它负责接收客户端请求,响应结果给客户端。
      MVC 是表现层的设计模型,和其他层没有关系。
  • 2.业务层 :
    常说的 service 层:它负责业务逻辑处理,如果要对数据持久化需要保证事务⼀致性。(也就是我们说的,事务应该放到业务层来控制)
  • 3.持久层 :
    常说的 DAO层:负责数据持久化,就是和数据库交互,对数据库表进⾏增删改查的。

7、@Controller 注解有什么用?

@Controller 注解标记一个类为 Spring的控制器,Spring会扫描到该注解的类,然后扫描这个类下面带有 @RequestMapping 注解的方法,根据注解信息,为这个方法生成一个对应的处理器对象。
等价于实现了 Spring MVC提供的 Controller 或者 HttpRequestHandler 接口

8、@RequestMapping 注解有什么用?

@RequestMapping 注解,配置HTTP 请求方法,URL等信息,这样才能将请求和方法进行映射。这个注解可以作用于类上面,也可以作用于方法上面,在类上面一般是配置这个控制器的 URL前缀。

9、@RestController 和 @Controller 有什么区别?

@RestController 注解,在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回例如 JSON 数据格式。当然,返回什么样的数据格式,根据客户端的 ACCEPT 请求头来决定。

10、@RequestMapping 和 @GetMapping 注解的不同之处在哪里?

1、@RequestMapping:可用在类和方法上;@GetMapping 仅可用在方法上
2、@RequestMapping:可支持 GET、POST、PUT、DELETE 等请求方法;
@GetMapping 只支持GET 请求方法,目的是为了提高清晰度。

11、@RequestParam 和 @PathVariable 两个注解的区别?

区别在于一个是用?,一个是用/
@RequestParam 是从request里面获取参数值(user?id=123);
而 @PathVariable 是从URI后缀获取参数(user/123)。

12、返回 JSON 格式使用什么注解?

可以使用 @ResponseBody 注解,或者使用包含 @ResponseBody 注解的 @RestController 注解。

13、SpringMVC 拦截器与过滤器的区别?

①拦截器是基于java的反射机制的,比如动态代理,过滤器是依赖于servlet容器,基于函数回调;   
②拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用;
③拦截器可以获取IOC容器中的各个bean,过滤器就不行。
触发时机:
1.过滤器是在请求进入容器后,但请求进入servlet之前进行处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
2. 拦截器的配置⼀般在的SpringMVC配置⽂件中,使⽤Interceptor标签
总结:过滤器Filter包裹住servlet,servlet包裹住拦截器Interceptor
在这里插入图片描述

14、怎么控制过滤器和拦截器的执行顺序?

过滤器Filter用@Order注解控制执行顺序,通过@Order控制过滤器的级别,值越小级别越高越先执行。
拦截器Interceptor默认的执行顺序,就是它的注册顺序,也可以通过@Order注解控制,值越小越先执行。

15、SpringMVC 中如何解决请求中⽂乱码问题?

解决post请求乱码问题:

  • 1、在doPost方法首行添加request.setCharacterEncoding(“utf-8”);
  • 2、在web.xml中配置⼀个CharacterEncodingFilter过滤器,并设置编码为utf-8;
    解决get请求乱码问题:
    在Tomcat中的server.xml文件指定URIEncoding=”UTF-8”。
    (< Connector port=“8080” protocol=“HTTP/1.1” redirectPort=“8443” connectionTimeout=“20000” URIEncoding=“UTF-8”/>)

16、怎么把ModelMap⾥⾯的数据放⼊Session⾥⾯

默认情况下SpringMVC将模型中的数据存储到request域中,当⼀个请求结束后,数据就失效了。如果要跨页⾯使⽤。那么需要使⽤到session。
可以在类上⾯加上@SessionAttributes注解,⾥⾯包含的字符串就是要放⼊session⾥⾯的key。
@SessionAttributes(value = { “key” })

17、SpringMVC 和 Struts2 的异同?

  • 1)、入口不同
    Spring MVC 的入门是一个 Servlet 控制器。
    Struts2 入门是一个 Filter 过滤器。
  • 2)、安全问题
    Spring MVC默认为单例,是非线程安全的。
    Struts2 是多例,是线程安全的。

18、SpringMVC 怎么样重定向和转发的?

  • 转发:在返回值前面加"forward:“,如"forward:user.do?name=hello”
  • 重定向:在返回值前面加"redirect:“,如"redirect:http://www.baidu.com”。

19、SpringMvc里面拦截器是怎么写的?

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

20、HandlerInterceptor接口是什么?

我们可以配置多个拦截器,每个拦截器中都有三个方法。下面将总结多个拦截器中的方法执行规律。
1、preHandle:Controller方法处理请求前执行,根据拦截器定义的顺序,正向执行。
2、postHandle:Controller方法处理请求后执行,根据拦截器定义的顺序,逆向执行。需要所有的preHandle方法都返回true时才会调用。
3、afterCompletion:View视图渲染后处理方法:根据拦截器定义的顺序,逆向执行。preHandle返回true就会调用。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2814353.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

DETR(1):论文详解

文章目录 1. DETR 模型结构2.损失函数2.1 预测结果和GT 的匹配2.2 训练的loss计算3.实验3.1 大物体表现效果好3.2 Transformer Encoder 和Decoder的作用3.3 object query4. 伪代码5. 结论

Jetpack Compose 1.7中的新修饰符receiveContent

在 Jetpack Compose 1.7.0 中提供了一个新的修饰符&#xff0c;Modifier.receiveContent&#xff0c;通过该修饰符可以支持在输入框中输入输入法软键盘中自带的图片表情等&#xff0c;非常方便。 示例代码如下&#xff1a; class MyActivity: ComponentActivity() { overrid…

[源码分析]webrtc音频流从接收到播放的关键流程

如图所示&#xff0c;音频流从接收到播放的核心关键流程和执行线程。 neteq中对音频流的RTP数据包进行了处理和解码操作。同时数据出现了跨线程的投递。 后面有空补上核心对象之间的关系图。 后面将添加对neteq模块的细节分析。

影像仪激光扫描功能,无缝连接2D/3D混合测量

在现代工业生产领域&#xff0c;影像仪用于质量控制和产品检测&#xff0c;是一个不可或缺的工具。它通过高精度的成像和图像处理技术&#xff0c;可以及时发现产品的缺陷和异常&#xff0c;以保证产品质量的稳定性和一致性。 影像仪的重要性及其面临的挑战 在工业生产方面&a…

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

mac打不开xxx软件, 因为apple 无法检查其是否包含恶意

1. 安全性与隐私下面的允许来源列表&#xff0c;有些版本中的‘任何来源’选项被隐藏了&#xff0c;有些从浏览器下载的软件需要勾选这个选项才能安装 打开‘任何来源’选项 sudo spctl --master-disable 关闭‘任何来源’选项 sudo spctl --master-enable

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…

MS90C031LVDS 四通道总线驱动器,可兼容替代DS90C031

产品简述 MS90C031 是一款低功耗、高数据传输率的四通道 CMOS 差分 LVDS 信号总线驱动芯片&#xff0c;其支持的数据接收率超过 155.5Mbps (77.7MHz) 。 MS90C031 将 TTL/CMOS 输入信号&#xff0c;转换成低压 (350mV) 的差分输出信 号。芯片驱动器还支持三态输出功…

【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范

【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范 大家好 我是寸铁&#x1f44a; 总结了一篇测试API查询信息无法返回数据库信息与api、rpc文件编写规范的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 大家好&#xff0c;我是寸铁&#xff01…

【王道数据结构】【chapter7查找】【P285t5】

线性表中各节点的检索概率不等时&#xff0c;可用如下策略提高顺序检索的效率&#xff1b;若找到指定的结点&#xff0c;则将该结点和其前驱结点&#xff08;若存在&#xff09;交换&#xff0c;使得经常被访问的结点尽量位于表的前端。试设计在顺序结构和链式结构的线性表盘上…

麒麟银河操作系统V10部署ffmpeg

麒麟银河操作系统V10部署ffmpeg 部署ffmpeg用来处理视频的各种操作 想使用ffmpeg&#xff0c;要先安装nasm&#xff0c;yasm&#xff0c;x264之后&#xff0c;否则会报错 nkvers 查看麒麟操作系统版本 cat /proc/version #查看linux版本信息 uname -a #查看linux版本和内核…

vue3的echarts从后端获取数据,用于绘制图表

场景需求&#xff1a;后端采用flask通过pymysql从数据库获取数据&#xff0c;并返回给前端。前端vue3利用axios获取数据并运用到echarts绘制图表。 第一步&#xff0c;vue中引入echarts 首先vue下载echarts npm install echarts 然后在main.js文件写如下代码 import {create…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间&#xff1a;2024-02-23 最后编辑时间&#xff1a;2024-02-24 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名初三学生&#xff0c;热爱计算机和数学&#xff0c;我们一起加…

Spring 事务传播机制

事务传播机制&#xff1a;多个事务⽅法存在调⽤关系时, 事务是如何在这些⽅法间进⾏传播的。 ⽐如&#xff1a;有两个⽅法A&#xff0c;B都被 Transactional 修饰,&#xff0c;A⽅法调⽤B⽅法 A⽅法运⾏时, 会开启⼀个事务。当A调⽤B时&#xff0c; B⽅法本⾝也有事务&#xf…

4核8G服务器并发数多少?性能如何?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

MetaGPT 1 安装与配置踩坑实录

安装 与 配置直接参考这里就行&#xff1a;Hugging Muti Agent&#xff08;二月学习&#xff09; - 飞书云文档 (feishu.cn) 这里按照教程安装的是metagpt 0.6.6 &#xff0c;经过跟0.7.0对比&#xff0c;个人认为0.7对其他llm接入可能更好&#xff0c;文档也更清晰。 0.6.6的…

数据库管理-第156期 Oracle Vector DB AI-07(20240227)

数据库管理156期 2024-02-27 数据库管理-第156期 Oracle Vector DB & AI-07&#xff08;20240227&#xff09;1 Vector相关DDL操作可以在现有的表上新增vector数据类型的字段&#xff1a;可以删除包含vector数据类型的列&#xff1a;可以使用CTAS的方式&#xff0c;从其他有…

【JavaScript】面试手撕防抖

引入 防抖可是前端面试时最频繁考察的知识点了&#xff0c;首先&#xff0c;我们先了解防抖的概念是什么。咳咳。&#x1f440; 防抖&#xff1a; 首先它是常见的性能优化技术&#xff0c;主要用于处理频繁触发的浏览器事件&#xff0c;如窗口大小变化、滚动事件、输入框内容…

雾锁王国服务器官方配置要求说明

雾锁王国/Enshrouded服务器CPU内存配置如何选择&#xff1f;阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置&#xff0c;支持4人玩家畅玩&#xff0c;自带10M公网带宽&#xff0c;1个月90元&#xff0c;3个月271元&#xff0c;幻兽帕鲁服务器申请页面 https://t.aliyun.com…

Django配置静态文件

Django配置静态文件 目录 Django配置静态文件静态文件配置调用方法 一般我们将html文件都放在默认templates目录下 静态文件放在static目录下 static目录大致分为 js文件夹css文件夹img文件夹plugins文件夹 在浏览器输入url能够看到对应的静态资源&#xff0c;如果看不到说明…