面试:SpringMVC问题

news2024/11/16 11:28:45

文章目录

    • SpringMVC运行流程
    • MVC的概念与请求在MVC中的执行路径,@ResponsBody注解的用途
    • SpringMVC启动流程
    • SpringMVC的拦截器和过滤器有什么区别?执行顺序?
    • Spring和SpringMVC为什么需要父子容器?

SpringMVC运行流程

在这里插入图片描述

• 客户端(浏览器)发送请求,直接请求到 DispatcherServlet 。
• DispatcherServlet 根据请求信息调用 HandlerMapping ,解析请求对应的 Handler 。
• 解析到对应的 Handler (也就是 Controller 控制器)后,开始由HandlerAdapter 适配器处理。
• HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。
• 处理器处理完业务后,会返回一个 ModelAndView 对象, Model 是返回的数据对象
• ViewResolver 会根据逻辑 View 查找实际的 View 。
• DispaterServlet 把返回的 Model 传给 View (视图渲染)。
• 把 View 返回给请求者(浏览器)

MVC的概念与请求在MVC中的执行路径,@ResponsBody注解的用途

请求到达mvc后,通过一个分发器,找到对应的处理controller,处理完好返回的model数据,经过view处理器渲染进视图中返回,如JSP。如果有@ResponseBody注解,就不进行view渲染,直接返回model数据,一般以json格式。
见另一篇博客:mvc。

SpringMVC启动流程

SpringMVC的拦截器和过滤器有什么区别?执行顺序?

拦截器和过滤器在Web应用中都扮演着请求和响应处理的角色,但它们之间存在一些关键区别。

  1. 归属不同:拦截器是SpringMVC框架的一部分,而过滤器是Servlet规范的一部分。拦截器主要用于对控制器层的请求进行处理,它们提供了更细粒度的控制,可以在请求进入控制器之前和之后执行特定的逻辑,例如身份验证、日志记录和权限检查。过滤器独立于SpringMVC,用于处理通用的请求和响应内容,例如字符编码、压缩和安全性。
  2. 执行顺序也不同:拦截器的执行顺序由配置文件中的顺序决定,可以有多个拦截器,它们按照配置的顺序依次执行。而过滤器的执行顺序由web.xml文件中的配置顺序决定,同样可以有多个过滤器,按照配置的顺序执行。一般来说,首先执行过滤器,然后再执行拦截器。
  3. 用途不同:拦截器用于对SpringMVC的请求和响应进行特定的业务处理,通常与控制器层的请求处理有关。过滤器用于对所有Servlet请求和响应进行通用性的处理,通常关注请求和响应内容,而不涉及具体的业务逻辑。

总的来说,了解拦截器和过滤器之间的这些区别非常重要。在面试中,这种理解将有助于说明您在Web应用程序中如何处理请求和响应以及如何利用SpringMVC和Servlet规范的不同功能。

Spring和SpringMVC为什么需要父子容器?

  • 首先,它们帮助划分功能边界,使得大型应用程序更易于管理。通过将不同模块或层次的组件分别放置在父子容器中,我们能够清晰地定义每个容器的职责,从而提高了代码的可维护性和可扩展性。
  • 其次,父子容器在规范整体架构方面起到了关键作用。例如,我们可以将业务逻辑层(Service)和数据访问层(DAO)交给Spring管理,而将控制器层(Controller)交给SpringMVC管理。这种规范化有助于提高代码的可读性,并使团队协作更加顺畅。
  • 此外,父子容器还能限制组件之间的依赖关系,确保模块之间的隔离。子容器可以访问父容器中的组件,但反之则不成立。这有助于减少意外的依赖和提高代码的稳定性。
  • 另一个优势是方便切换子容器。如果我们需要更改子容器,例如从Spring MVC切换到Struts,只需更改子容器的配置而无需更改父容器。这提供了更好的可维护性和扩展性,使得应用程序更容易适应不同的技术栈或框架。
  • 最后,父子容器的使用还有助于节省资源。父容器中的Bean可以在整个应用程序范围内共享,而不必每次创建。这对于大型应用程序来说尤为重要,可以降低内存和性能开销。

综上所述,父子容器在Spring框架中的应用不仅有助于功能性划分,还有助于架构的规范化、模块化、松耦合和可维护性。虽然一些现代框架如Spring Boot可能减少了对父子容器的需求,但在大型和复杂的应用程序中,父子容器仍然是一种有用的设计模式,有助于管理和组织应用程序的各个部分。

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

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

相关文章

【raect.js + hooks】useRef 搭配 Houdini 创造 useRipple

水波纹点击特效 really cool,实现水波纹的方案也有很多,笔者经常使用 material 组件,非常喜欢 mui 中的 ripple,他家的 ripple 特效就是通过 css Houdini 实现的。 今天,我们将复刻一个 ripple,并封装成 ho…

vuepress-----3、导航栏

3、导航栏 # 页面目录结构约定 . ├── docs │ ├── .vuepress (可选的) │ │ ├── components (可选的) │ │ ├── theme (可选的) │ │ │ └── Layout.vue │ │ ├── public (可选的) │ │ ├── styles (可选的) │ │ │…

《微信小程序开发从入门到实战》学习三十七

4.2 云开发JSON数据库 4.2.8 分页查询 在计算机互联网时代,很多页面底部分页导航按钮,有首页、上一页、第一页、第二页、尾页。 分页查询是指根据页码将每一页的数据查询出来。 在移动互联网时代,网页和应用都对网页进行优化,…

PHP在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

Java小游戏 王者荣耀(简易版)

GameFrame类 所需图片: package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList…

轻型载重汽车转向前桥总成系统毕业设计机械设计

wx供重浩:创享日记 对话框发送:前桥 获取完整说明报告工程源文件 绪论 1.1 轻型载重汽车转向桥的设计意义 汽车是现代交通工具中用得最多,最普遍,也是最方便的交通运输工具。汽车转向系是汽车上的一个重要系统,它是汽车转向运动…

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02实现掉电保存计时时间应用

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02实现掉电保存计时时间应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单…

用行云管家实现IT统一运维管理,提高运维效率

随着公司业务的不断壮大,需要用到的IT系统也越来越多,使用起来耗时耗力。因此实现IT统一运维管理已成为提高运维效率、降低成本、优化资源配置的重要途径。这里我们小编告诉您,用行云管家实现IT统一运维管理,提高运维效率&#xf…

java元注解

一、注解 Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。 Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该…

焊接设备行业分析:预计2029年将达到834亿元

近年来我国焊割设备行业的主要出口产品多为零部件以及部分中、低端设备,其出口单价和利润额均相对较低。 随着国内原材料价格上涨和人民币不断升值,出口产品的竞争力日趋下降,利润空间也随着出口价格的下降被进一步压缩。同时近年来国际经济形…

猫头虎博主与CSDN的三年之约——我的创作纪念日三周年

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

数学建模-基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究

基基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究 整体求解过程概述(摘要) 卒中是全球致残率、致死率最高的疾病之一,其中脑出血(Intracerebral hemorrhage,ICH)患者仅占卒中患者的 20%,但致残、死亡人…

Retrobatch for mac图片批处理软件

Retrobatch是一款功能强大的图片批量操作软件,提供了批量加水印、裁剪、压缩等功能,而且处理速度非常快。 在Retrobatch中,用户可以通过拖动相应动作到工作区形成节点(Nodes),并将节点连接起来形成一个Workflow,最后运…

SpringBoot application.yml配置文件写法

1,基本介绍 (1)YAML 是 JSON 的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代 application.properties。 (2)在创建一个 SpringBoot 项目时,引入的 spri…

Windows系统搭建Appium 2 和 Appium Inspector 环境

前言 自 2022 年 1 月 1 日起,Appium 核心团队不再维护 Appium 1.x。官方支持的平台驱动程序的所有最新版本均不兼容 Appium 1.x,需要 Appium 2 才能运行。 Appium 2是一个自动化移动应用程序的开源工具,它带来了以下重要改进:  …

【Linux】进程控制--进程创建/进程终止/进程等待/进程程序替换/简易shell实现

文章目录 一、进程创建1.fork函数2.fork函数返回值3.写时拷贝4.fork常规用法5.fork调用失败的原因 二、进程终止1.进程退出码2.进程退出场景3.进程常见退出方法 三、进程等待1.为什么要进行进程等待2.如何进行进程等待1.wait方法2.waitpid方法3.获取子进程status4.进程的阻塞等…

对接电商平台高效获取各大电商平台数据,商品详情数据代码示例

电商可以通过使用API接口获取商品信息数据。API是应用程序编程接口的缩写,它允许程序之间进行通信和数据传输。为了获取商品信息数据,电商可以利用API接口向商品供应商的数据库发送请求,然后接收并解析返回的数据。 具体来说,电商…

高压放大器用于什么地方使用

高压放大器是一种电子设备,用于将低电压信号放大到高电压水平。它主要应用于需要高电压的领域,下面将详细介绍其主要应用地方。 科研实验室:科研实验室通常需要进行高电压实验,例如粒子加速器、高压放电实验等。高压放大器可以为这…

uniapp和vue3+ts实现自定义头部导航栏左侧胶囊内容

由于某些原因,可能需要我们自己定义头部导航栏的内容,实现各种设计师画的设计稿,所以就需要这个自定义的组件,实现的内容:自定义标题和左侧胶囊图标内容,也可以自定义搜索内容到里面,实现的效果…

网络和Linux网络_7(传输层)UDP和TCP协议(端口号+确认应答+超时重传+三次握手四次挥手)

目录 1. 重看端口号 1.1 端口号的概念 1.2 端口号的划分 2. 重看UDP协议 2.1 UDP协议格式 2.2 UDP的特点 3. 重看TCP协议 3.1 TCP协议格式 3.2 TCP的解包分用 3.3 TCP的可靠性及机制 3.3.1 确认应答ACK机制 3.3.2 超时重传机制 3.3.3 连接管理机制(三次…