java面试题之SpringMVC篇

Spring MVC的工作原理

Spring MVC的工作原理如下:

  1. DispatcherServlet 接收用户的请求
  2. 找到用于处理request的 handler 和 Interceptors,构造成 HandlerExecutionChain 执行链
  3. 找到 handler 相对应的 HandlerAdapter
  4. 执行所有注册拦截器的preHandler方法
  5. 调用 HandlerAdapter 的 handle() 方法处理请求,返回 ModelAndView
  6. 倒序执行所有注册拦截器的postHandler方法
  7. 请求视图解析和视图渲染

Spring MVC的主要组件?

  • 前端控制器(DispatcherServlet):接收用户请求,给用户返回结果。
  • 处理器映射器(HandlerMapping):根据请求的url路径,通过注解或者xml配置,寻找匹配的Handler。
  • 处理器适配器(HandlerAdapter):Handler 的适配器,调用 handler 的方法处理请求。
  • 处理器(Handler):执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装到ModelAndView对象中。
  • 视图解析器(ViewResolver):将逻辑视图名解析成真正的视图View。
  • 视图(View):接口类,实现类可支持不同的View类型(JSP、FreeMarker、Excel等)。

Spring MVC的常用注解由有哪些?

  • @Controller:用于标识此类的实例是一个控制器。
  • @RequestMapping:映射Web请求(访问路径和参数)。
  • @ResponseBody:注解返回数据而不是返回页面
  • @RequestBody:注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
  • @PathVariable:获得URL中路径变量中的值
  • @RestController:@Controller+@ResponseBody
  • @ExceptionHandler标识一个方法为全局异常处理的方法。

@Controller 注解有什么用?

@Controller 注解标记一个类为 Spring Web MVC 控制器。Spring MVC 会将扫描到该注解的类,然后扫描这个类下面带有 @RequestMapping 注解的方法,根据注解信息,为这个方法生成一个对应的处理器对象,在上面的 HandlerMapping 和 HandlerAdapter组件中讲到过。

当然,除了添加 @Controller 注解这种方式以外,你还可以实现 Spring MVC 提供的 Controller 或者 HttpRequestHandler 接口,对应的实现类也会被作为一个处理器对象

@RequestMapping 注解有什么用?

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

@RestController 和 @Controller 有什么区别?

@RestController 注解,在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回 JSON 数据格式。

@RequestMapping 和 @GetMapping 注解有什么不同?

  1. @RequestMapping:可注解在类和方法上;@GetMapping 仅可注册在方法上
  2. @RequestMapping:可进行 GET、POST、PUT、DELETE 等请求方法;@GetMapping 是 @RequestMapping 的 GET 请求方法的特例。

@RequestParam 和 @PathVariable 两个注解的区别

两个注解都用于方法参数,获取参数值的方式不同,@RequestParam 注解的参数从请求携带的参数中获取,而 @PathVariable 注解从请求的 URI 中获取

@RequestBody和@RequestParam的区别

@RequestBody一般处理的是在ajax请求中声明contentType: "application/json; charset=utf-8"时候。也就是json数据或者xml数据。

@RequestParam一般就是在ajax里面没有声明contentType的时候,为默认的x-www-form-urlencoded格式时。

Spring MVC的异常处理

可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

  • 使用系统定义好的异常处理器 SimpleMappingExceptionResolver
  • 使用自定义异常处理器
  • 使用异常处理注解

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

  1. 将数据绑定到 request;
  2. 返回 ModelAndView;
  3. 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前端就可以通过el表达式拿到;
  4. 绑定数据到 Session中。

SpringMvc的Controller是不是单例模式?

单例模式。在多线程访问的时候有线程安全问题,解决方案是在控制器里面不要写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal,为每个线程单独生成一份变量副本,独立操作,互不影响。

介绍下 Spring MVC 拦截器?

Spring MVC 拦截器对应HandlerInterceor接口,该接口位于org.springframework.web.servlet的包中,定义了三个方法,若要实现该接口,就要实现其三个方法:

  1. 前置处理(preHandle()方法):该方法在执行控制器方法之前执行。返回值为Boolean类型,如果返回false,表示拦截请求,不再向下执行,如果返回true,表示放行,程序继续向下执行(如果后面没有其他Interceptor,就会执行controller方法)。所以此方法可对请求进行判断,决定程序是否继续执行,或者进行一些初始化操作及对请求进行预处理。
  2. 后置处理(postHandle()方法):该方法在执行控制器方法调用之后,且在返回ModelAndView之前执行。由于该方法会在DispatcherServlet进行返回视图渲染之前被调用,所以此方法多被用于处理返回的视图,可通过此方法对请求域中的模型和视图做进一步的修改。
  3. 已完成处理(afterCompletion()方法):该方法在执行完控制器之后执行,由于是在Controller方法执行完毕后执行该方法,所以该方法适合进行一些资源清理,记录日志信息等处理操作。

可以通过拦截器进行权限检验,参数校验,记录日志等操作

SpringMvc怎么配置拦截器?

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

<!-- 配置SpringMvc的拦截器 -->
<mvc:interceptors><bean id="myInterceptor" class="com.dabin.MyHandlerInterceptor"></bean><!-- 只拦截部分请求 --><mvc:interceptor><mvc:mapping path="/xxx.do" /><bean class="com.dabin.MyHandlerInterceptorAdapter" /></mvc:interceptor>
</mvc:interceptors>

Spring MVC 的拦截器和 Filter 过滤器有什么差别?

有以下几点:

  • 功能相同:拦截器和 Filter 都能实现相应的功能
  • 容器不同:拦截器构建在 Spring MVC 体系中;Filter 构建在 Servlet 容器之上
  • 使用便利性不同:拦截器提供了三个方法,分别在不同的时机执行;过滤器仅提供一个方法

什么是REST?

REST,英文全称,Resource Representational State Transfer,对资源的访问状态的变化通过url的变化表述出来。

Resource:资源。资源是REST架构或者说整个网络处理的核心。

Representational:某种表现形式,比如用JSON,XML,JPEG等。

State Transfer:状态变化。通过HTTP method实现。

REST描述的是在网络中client和server的一种交互形式。用大白话来说,就是通过URL就知道要什么资源,通过HTTP method就知道要干什么,通过HTTP status code就知道结果如何

举个例子:

GET /tasks 获取所有任务
POST /tasks 创建新任务
GET /tasks/{id} 通过任务id获取任务
PUT /tasks/{id} 更新任务
DELETE /tasks/{id} 删除任务

GET代表获取一个资源,POST代表添加一个资源,PUT代表修改一个资源,DELETE代表删除一个资源。

server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。用HTTP Status Code传递server的状态信息。比如最常用的 200 表示成功,500 表示Server内部错误等。

使用REST有什么优势呢?

第一,风格统一了,不会出现delUser/deleteUser/removeUser各种命名的代码了。

第二,面向资源,一目了然,具有自解释性。

第三,充分利用 HTTP 协议本身语义

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

(1)转发:在返回值前面加"forward:",例如"forward:user.do?name=method4"

(2)重定向:在返回值前面加"redirect:",例如"redirect:http://www.baidu.com"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频面试题集锦

下面是音视频开发面试题精选&#xff1a; 1、谈谈 iOS 音视频采集相关接口和数据结构的设计&#xff1f;2、如何降低处理音视频链路中的内存峰值&#xff1f;3、OpenGL 如何实现二分屏效果&#xff1f;4、使用 OpenGL 绘制时对于二维坐标需要注意什么&#xff1f; 1、谈谈 iO…

Vue中如何使用dayjs

Day.js中文网Day.js是一个极简的JavaScript库&#xff0c;可以为现代浏览器解析、验证、操作和显示日期和时间。https://dayjs.fenxianglu.cn/ 单位不区别大小写&#xff0c;支持复数和缩写形式 单位缩写描述 date D日期 [1,31]dayd星期 [0,6]&#xff08;星期日0&#xff0c…

云计算面试题【后期】

前言&#xff1a; 随着年龄的增长生活琐碎的事情、烦心的事情日渐增多&#xff0c;怠慢了更新&#xff0c; 1.什么是数据库 DB.DataBase 数据库&#xff1a; 依照某种数据模型进行组织并存放到存储器的数据集合 DBMS.DataBase Management System – 数据库管理系统&#xff1a;…

Java MP3转PCM

Java MP3转PCM 1 添加依赖2 Java 代码 1 添加依赖 <dependency><groupId>com.googlecode.soundlibs</groupId><artifactId>mp3spi</artifactId><version>1.9.5.4</version> </dependency>2 Java 代码 package com.xu.music.…

迪萧科技有限公司邀您参观2024生物发酵展

参展企业介绍 浙江迪萧科技有限公司位于浙江杭州&#xff0c;是一家专注于膜技术的国家高新企业。公司针对食品饮料、医药保健等领域的过程分离与控制、产品提取及浓缩、废料资源化利用等提供全方案解决服务。坚持以“顾客至上、优质服务、卓越品质”为原则。为客户企业提供清…

视频批量瘦身:一键缩小尺寸,轻松处理海量视频

在如今视频内容爆炸的时代&#xff0c;无论是个人创作者还是企业团队&#xff0c;都面临着处理大量视频的需求。而视频尺寸过大往往会导致上传缓慢、存储空间不足等问题。为了解决这个问题&#xff0c;我们推出了一款强大的视频批量剪辑工具&#xff0c;让你轻松实现视频尺寸批…

NXP实战笔记(七):S32K3xx基于RTD-SDK在S32DS上配置ICU输入捕获

目录 1、概述 2、输入捕获SDK配置 2.1、SAIC中断方式 2.2、IPWM或者IPM 1、概述 输入捕获&#xff0c;可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数&#xff08;ABZ解码&#xff09;、时间戳、唤醒中断。 记录一下根据Emios模块实现上述部分…

Spring Cache框架使用教程,通过简单且强大的方式在应用程序中使用缓存提高性能

Spring Cache Spring Cache 框架是 Spring 框架的一部分,它提供了一种简单但功能强大的方式来在应用程序中实现缓存。下面是 Spring Cache 框架的一些好处: 性能提升: 使用缓存可以大大提高应用程序的性能,特别是对于那些需要频繁访问和计算的数据。通过缓存先前计算的结果…

【ARMv8M Cortex-M33 系列 8.1 -- RT-Thread 堆内存 检查命令 free 实现及介绍】

文章目录 RT-Thread 堆内存 检查命令 free 实现及介绍rt_memory_info 函数验证 RT-Thread 堆内存 检查命令 free 实现及介绍 在RT-Thread系统中&#xff0c;通常可以通过rt_memory_info函数获取当前的堆内存使用信息&#xff0c;然后你可以包装这个函数来显示剩余的堆空间。rt…

最全整理,软件测试-Web页面测试思路总结,13年经验...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Web功能测试 …

Vim 模式切换 | 命令集

Vim 模式切换 | 命令集 vim 主要模式及切换一、正常/普通/命令模式1 光标相关操作命令集1.1 光标移动1.2 文字删除1.3 粘贴和复制1.4 替换1.5 字符更改 二、插入模式2.1 插入模式和命令行模式相互切换 三、末行模式2.1 末行模式和命令行模式相互切换2.2 末行模式相关命令集 vim…

【EI会议征稿通知】第十届机械工程、材料和自动化技术国际会议(MMEAT 2024)

2024年第十届机械工程、材料和自动化技术国际会议(MMEAT 2024) 2024 10th International Conference on Mechanical Engineering,Materials and Automation Technology 2024年第十届机械工程、材料和自动化技术国际会议( MMEAT 2024) 将于2024年06月21-23日在中国武汉举行。MM…

【LeetCode每日一题】单调栈316去除重复字母

题目&#xff1a;去除重复字母 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; 输入&#xff1a;s “bcabc” 输…

docker自定义网络实现容器之间的通信

Background docker原理 docker是一个Client-Server结构的系统&#xff0c;Docker的守护进程运行在主机上。通过Socket从客户端访问。docker核心三大组件&#xff1a;image–镜像、container-容器、 repository-仓库。docker使用的cpu、内存以及系统内核等资源都是直接使用宿主…

python 函数-04-参数收集-带1个或2个星号

一个函数&#xff0c;至多可以带一个一星参数&#xff08;收集位置参数&#xff09;&#xff0c;加上一个二星参数&#xff08;收集关键字参数&#xff09;。 01 一个星号参数 入参为不定参数&#xff08;参数个数不确定&#xff09;&#xff0c;此时在定义参数时&#xff0c…

最简单方式把jar打包成Windows服务

废话 &#x1f622; 将JAR文件转化为Windows服务是一种高效且常见的Java应用部署策略。这种转变赋予了Java应用程序在Windows操作系统上以无界面后台服务模式运行的能力&#xff0c;从而实现了持续、稳定且可靠的功能提供。这种部署方式不仅提升了应用的可用性&#xff0c…

Python学习笔记——类(编程风格)

编写的应用比较复杂时&#xff0c;特别是大型项目&#xff0c;团队分工协同&#xff0c;尤其要注意编程风格。 &#xff08;1&#xff09;类名应采用驼峰命名法&#xff0c;即将类名中的每个单词的首字母都大写&#xff08;类名的首字母是大写的&#xff09;&#xff0c;并且不…

导入excel某些数值是0

目录 导入excel某些数值是0数据全部都是0原因解决 部分数据是0原因解决 导入excel某些数值是0 数据全部都是0 有一列“工单本月入库重量”全部的数据都是0 原因 展示的时候&#xff0c;展示的字段和内表需要展示的字段不一致&#xff0c;导致显示的是0。 解决 修改展示的字…

kubernetes面试题及核心知识点

无状态负载deployment有状态管理 &#xff1a; config配置文件 secret密码文件 内置volumn插件 1、emptyDir宿主机的存储为容器分配资源。临时储存&#xff0c;随着pod的删除而消失&#xff0c; 2、hostPath宿主机的存储为容器分配资源。不会随着pod的删除而消失&#xf…

Video generation models as world simulators-视频生成模型作为世界模拟器

原文地址&#xff1a;Video generation models as world simulators 我们探索在视频数据上进行大规模生成模型的训练。具体来说&#xff0c;我们联合训练文本条件扩散模型&#xff0c;同时处理不同持续时间、分辨率和长宽比的视频和图像。我们利用一个在视频和图像潜在编码的时…