深入理解SpringMvc映射原理,SpringBoot的容器概念以及注解分析

SSM面试题,2021最新Java面试题及答案 1.什么叫Aop 2.什么叫Ioc 3. 什么是SpringBoot 4.什么是bean 5.Spring的优点 6.Springboot的核心配置是什么 7.@RequestMapping 8.Spring常用的注入方式 9.@Requestbody 10.Dao层的作用 11.SpringMVC 常用的几个注解? 12.什么是Mybatis? 13.SpringMVC的执行流程 14.SpringBoot的优点 15.什么是YAML? ... 阅读详情

SpringMvc映射原理以及SpringBoot的启动原理

        我们使用SpringBoot最直观的感受就是springboot的自动装配,感觉什么都不用自己去做,只是去使用一些注解就可以完成各个层次之间的联系以及对象的注入,但有时候我们却不了解或者容易忘记为什么加了这些注解就可以达到这种效果,或者说,是否有一些疑惑,我们为什么要这么做,为什么这么做他就可以达到这种效果?

SpringMvc

我们不妨先从springmvc开始梳理,也会便于后期springboot的理解。

MVC主要作用是降低了视图与业务逻辑间的双向偶合。

最初的jsp+servlet

我们在最初写javaweb项目的时候,最开始的版本jsp+servlet.我们的操作往往是:

  1. 用户发请求

  2. Servlet接收请求数据,并调用对应的业务逻辑方法

  3. 业务处理完毕,返回更新后的数据给servlet

  4. servlet转向到JSP,由JSP来渲染页面

  5. 响应给前端更新后的页面。

具体到代码实现就是:

编写一个Servlet类,用来处理用户的请求,再写一个jsp页面,再去手动写web.xml将这两者进行绑定在web.xml中注册Servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0">
   <servlet>
       <servlet-name>HelloServlet</servlet-name>
       <servlet-class>com.zzm.servlet.HelloServlet</servlet-class>
   </servlet>
   <servlet-mapping>
       <servlet-name>HelloServlet</servlet-name>
       <url-pattern>/user</url-pattern>
   </servlet-mapping>

</web-app>

如果你经历了这方面的洗礼,可能会更好地加深前后端不分离的这种开发,加强一些对jsp,js知识以及前后端交互ajax的理解,本人最开始写的javaweb项目就是用jsp写的,可谓是相当地痛苦。

MVC框架

帮助我们:

将url映射到java类或java类的方法 ,封装用户提交的数据 .处理请求,调用相关的业务处理--封装响应数据 .将响应的数据进行渲染 . jsp / html 等表示层数据 。

我们在使用该框架的时候已经不需要去配置一些web.xml文件了,只需要一些注解就可以完成这类的映射关系,一下觉得,哇,轻松了好多。那么我们不妨去想想,它为什么会如此轻松,原理又是如何做到的?

这里有一个核心的类:DispatcherServlet

DispatcherServlet

        本人在进行原理方面学习的时候,遇到了一位很忠爱的博主,可能在实际应用和扩展企业级知识的方面可能不够,但在某些学习的原理初探的地方讲的倒是津津有味:”狂神”。这位老师也让我深深地喜欢上去探索原理:

这里借用狂神的图:

dispatcherservlet:类的一些继承关系,这里还是建议大家去ctrl+左键去一层一层的看一下。

SpringMVC的原理图:

        当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

执行类图:

HandlerMapping:

HandlerMapping查找控制器:DispatcherServlet将HTTP请求交给HandlerMapping进行处理,HandlerMapping负责将请求映射到相应的控制器。HandlerMapping根据请求的URL和配置文件中的控制器映射信息,确定要调用的控制器对象

而这些类执行的流程如下:

  1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。

    我们假设请求的url为 : http://localhost:8080/SpringMVC/hello

    如上url拆分成三部分:

    http://localhost:8080服务器域名

    SpringMVC部署在服务器上的web站点

    hello表示控制器

控制器实例理解:

@Controller
public class HelloController {
 
@RequestMapping("/hello")
public ModelAndView hello() {
    ModelAndView modelAndView = new ModelAndView("hello");
    modelAndView.addObject("message", "Hello, SpringMVC!");
    return modelAndView;
}
}

        在上面的示例中,控制器接收一个HTTP请求,并返回一个ModelAndView对象,其中包含了一个名为“message”的模型数据和一个名为“hello”的视图信息。

  1. 通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

  2. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

  3. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

  4. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  5. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

  6. Handler让具体的Controller执行。

  7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

  8. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

  9. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

  10. 视图解析器将解析的逻辑视图名传给DispatcherServlet。

  11. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

  12. 最终视图呈现给用户。

以上就是SpringMVC中核心控制器DispatcherServlet的运行原理理解。当然,原理理解要取其精华弃其糟粕,结合出自己的理解才会更加深刻。

SpringBoot

        在Spring里有很重要的概念,依赖注入和控制反转。这两个重要名词的官方概念spring官网都会有解释,我来说说我完全个人的理解,请大家结合自己的想法来理解,依赖注入就是将容器内的对象,在我们需要的时候进行取用,控制反转就是将创建某种对象的权限交给spring容器而不是我们自己,很直观的感受就是我们不用再去new,而是spring容器帮我们创建。

        这种思想也更贴合springboot的自动装配

容器和上下文的概念:

        我们在学习和利用SpringBoot的注解的时候,常常会涉及到这样的名字,有时候虽然我们能让程序正常运行,但我们往往不知道为什么要这样做,常常使用注解的时候带着疑惑,那我们不妨将他们弄清,或者能自己给出符合自己的理解,那下面则是我的理解:

        所谓容器的概念就像是一个百宝箱,但这个箱子一开始并不是拥有你想要的所有东西,有些是已经配置好的,但很多需要用到的需要我们自己去放进去。那我们通过什么放进去?对,就是我们经常用到的注解,configuration,bean,component注解等等。他会让我们写的类和方法等变成bean对象放入spring的容器,那么容器内的东西就会被spring接管,它来分析你是在启动的时候还是应用的时候将这些bean对象自动的进行装配和应用。当你在程序创建对象也好,Exception处理也好,mybatisplus配置类也好,你想让这些类自动生效,那么就需要将这些东西给到spring容器,将控制权给他,让spring自动注入生效。而我们常见的上下文也就是我们放进容器的bean对象(我们写的类和方法)。我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口。

        通过以上的解释,我们是否对springboot中的configuration,bean,component等注解有了更深刻的理解,是否有种轻松的感觉?

SpringApplication启动类:

        下面再结合狂神老师对spring启动类的运行过程的启动图:

        

深入理解注解式SpringMVC及其实战Demo 本文还有配套的精品资源,点击获取 简介:本文深入解析了注解式Spring MVC及其在Web应用程序开发中的应用,详细介绍了各种控制器注解如@Controller、@RestController、@RequestMapping及其变体、@PathVariable、@RequestParam、@RequestBody、@ResponseBody、@ModelAttribute... 阅读详情

相关推荐

【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention

本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。

weixin_29084231的博客 471

SpringMVC请求映射原理

1、涉及的接口与类 Servlet接口是最传统的接口,内部就四个方法,这里只列举一个核心方法service()。 GenericServlet是一个抽象类,内部也没有给出具体的service()实现。 HttpServlet这是有处理能力的Servlet实现类,实现了service()方法,并且针对不同的请求提供了不同的处理方法,这些请求统一交给了service调度。 HttpServletBean主要是对HttpServlet进行了简单的扩展,其余的主要是后面两个子类进行强大的扩充。

weixin_43808717的博客 1055

实战分享:如何利用svchost进程绕过360防护(附完整Shellcode注入教程)

本文深入解析系统进程安全防护机制,探讨svchost等关键进程的安全特性与防护策略。详细分析安全软件的行为检测和内存保护技术,提供系统加固与监控实践建议,助力企业构建多层次防御体系,有效应对潜在安全威胁。

weixin_30752699的博客 99

全面解析SpringMVC参数映射原理

目录 一、第一种情况,方法参数带@RequestBody 注解 1.GET 请求方式,传递的值放到请求参数上。 2. GET方式,请求中带body体 3. GET方式,content-type 改为 application/json ,结果正确。 4.上述方式改为POST,过程是一致的,只是报错信息变了. 5.这里引申一个知识点,关于 @RequestBody是如何被解析的。 二...

luxinghong199106的博客 4593

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2294

逆向分析美团外卖mtgsig3.0签名算法:从抓包到算法还原实战

在移动应用开发与安全领域,API接口签名是保障数据传输完整性与身份验证的核心机制。其基本原理是通过特定的算法,将请求参数、时间戳等数据与密钥结合,生成唯一的签名串,服务器通过验证签名来识别请求的合法性。这项技术的核心价值在于防止数据篡改、重放攻击和未授权访问,是构建安全客户端-服务器通信的基石。在实际应用中,签名算法广泛应用于电商、社交、金融等各类App的接口保护场景。本文以美团外卖App的mtgsig3.0签名为具体案例,详细拆解了其生成逻辑。通过结合Frida动态调试与Jadx静态分析,文章深入探讨了如

weixin_29325515的博客 1235

SpringMVC 工作原理一(处理器映射器 HandlerMapping)

实现getHandler方法,调用子类实现的方法获取handler后,将handler 和 HandlerInterceptor封装成返回。@Override@Nullable// 根据子类重写的 getHandlerInternal 方法获取handlerif (!// 将 handler 和 HandlerInterceptor 封装成 HandlerExecutionChain= null) {= null?if (config!= null) {

m0_61556498的博客 891

Vue3 - 详解实现网站接入微信扫码登录功能,微信授权生成登录二维码用户用手机扫描二维码登陆,微信扫描二维码登录详细流程及示例代码,支持弹框式、浏览器单独新开页显示,最新vue集成微信扫码授权登录!

vue3,nuxt3,PC网站,网页,微信扫码登录,微信登陆,vue3微信扫码登录,获取个人信息,扫码登录后如何获取用户手机号,微信扫码授权登录,vue3详细实现微信扫一扫登陆,pc网页微信登录,vue3集成微信扫码登录,详细流程和示例源码,第三方扫码登录,vue3微信扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,微信扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描微信二维码登录网站,最好用的插件,vue-wxlo

🏆 前端领域优质创作者 1万+

spring mvc 方法映射原理解析(二)

1.源码版本spring-mvc 4.3.92.回顾通过源码分析一可以看到 , 在DispatcherServlet的doDispatch方法中,有一个很重要的方法,就是通过request获取当前请求的handler , 这个handler就是我们请求的那个方法的封装。 这里主要说一下,spring mvc是如何对Controller进行初始化,以及http请求过来之后,是怎么通过通过请求URL找...

sharedCode源码交流 2217

EMI辐射发射超标案例

EMI辐射发射超标案例

让你爱上电路设计 8502

【WRF工具】WRF 模型输出可视化工具 RIP4

【WRF工具】WRF 模型输出可视化工具 RIP4

WW、forever的博客 1593

Spring3.1.0实现原理分析(十四).MVC之处理器映射

大家好,今天我们分析下处理器映射,这个功能是MVC框架所应具备的基本功能。那么,什么是处理器映射呢,是指根据一套规则获取处理本次request请求的执行链对象,它是连接url请求和执行链对象的桥梁。执行链又是什么东东呢?无论是spring mvc还是struts2,执行链往往就是若干个拦截器加一个处理请求的方法对象(又被称为处理器)。

roberts939299的专栏 1302

打开 AI 投研新时代 —— 深度解析 GitHub 高星项目 daily_stock_analysis

GitHub热门开源项目"daily_stock_analysis"是一款AI驱动的智能股票分析工具,能自动抓取行情数据、分析新闻语义并生成结构化报告。该项目采用Python开发,通过GitHub Actions实现全自动运行,支持邮件、企业微信等多渠道推送。核心功能包括AI决策仪表盘、多数据源整合和零成本部署方案,特别适合需要自动化投研辅助的个人投资者。项目强调其仅为分析工具而非投资建议,提醒用户注意AI模型的潜在误差。该工具通过智能化处理重复工作,帮助投资者提升决策效率,成为量化投资

陈奕昆的博客 1522

Spring,SpringMVC,SpringBoot中注解讲解

如果我们将此注解标注类,那么类中的所有方法都将获得支持跨域的能力。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。此注解可以让我们控制更细粒度的基于表达式的配置条件限制。在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过。注解一样,被此注解标注的类,会自动被Spring所管理。注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个。所标注的类,在该类中,定义一个用于处理具体异常的方法,并使用。

上善若泪 629

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringBoot常用注解

常用注解: @RestController @EnableAutoConfiguration 开启spring应用程序的自动配置,SpringBoot基于你所添加的依赖和你自己定义的bean,试图去猜测并配置你想要的配置。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了! @ComponentScan 配置组件扫描的指令。提供了类似

JohnMin的博客 576

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SpringBoot注解最全详解

SpringBoot注解最全详解 使用注解的优势: 采用纯java代码,不在需要配置繁杂的xml文件 在配置中也可享受面向对象带来的好处 类型安全对重构可以提供良好的支持 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 一、注解详解(配备了完善的释义) @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration

weixin_42113222的博客 120

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

说说SpringBoot常用的注解?

在面试中,当被问及 Spring Boot 相关的注解时,很多同学可能会觉得这是日常开发中经常接触的内容,因此回答起来信心满满。然而,即使是看似简单的问题,也可能隐藏着更深层次的知识点。以下是对 Spring Boot 中常用注解的总结,希望能帮助大家更深入地理解这些注解。

qq_74011163的博客 666

Springboot基础-基于SpringMVC的Web开发

前提:在SpringBoot中导入了基于SpringMVC的web场景包,在此基础上的一些原理源码解析。

Java小菜鸟滴博客 693

深入理解Spring生态常见注解:从基础到实战

本文系统梳理了Spring生态中的核心注解,涵盖Spring Framework、Spring MVC和Spring Boot三大模块。从组件注册、依赖注入到配置类和事务管理,再到Spring MVC的请求处理和参数绑定。文章通过代码示例详解每个注解的用法和适用场景,帮助开发者深入理解Spring注解体系,提升开发效率和代码质量。

2301_80017072的博客 987

SpringBoot整合SpringMVC学习笔记

现在网络大多数教程都是直接上手springMVC,需要编写大量重复而又既定的配置文件。本次我们使用springBoot来进行springMVC的学习,使用springBoot可以节省掉很多编写配置文件的时间。springboot自动实现spring容器的托管,并且在application.yaml中对编码方式进行配置可以省去编码过滤器的配置,防止乱码,并且可以简化视图解析器的配置。 阅读前需要有以下预备知识: JavaWeb 简单了解File类 IO流的简单使用 Spring MVC Spring

马哥在编程 452

注解一览表

注解

m0_73903000的博客 152

Spring boot 注解

Spring MVC 的注解 @RequestMapping RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 RequestMapping请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的方法都要加上其配置的路径;最常...

weixin_30851409的博客 73

springmvc改造成springboot 笔记之针对web.xml改造

这里写自定义目录标题启动类设置注册 serlvet注册Filter注册Listener拦截器配置 (注,该o2o项目为网上的springmvc源码项目) 启动类设置 启动spring boot项目的方式 方式一: 默认的application启动,在创建项目时自动生成application启动类,直接run执行即可。 方式二:使用外置的tomcat启动 默认的启动类要继承SpringBootServletInitiailzer类,并复写configure()方法。 代码: @EnableAutoConfig

stoneBrother 3517

SpringBoot注解最全详解(整合超详细版本)

使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.类型安全对重构可以提供良好的支持 4.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 一、注解详解(配备了完善的释义)------(可采用ctrl+F 来进行搜索哦~~~~) @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configurati...

mazhongjia的博客 411

面试题(springboot)

Springboot自动配置原理? 自动配置的注解@EnableAutoConfiguration 通过这个注解可以引入自动配置jar包下面的配置类信息 SpringApplication.run : 启动SpringBoot应用 主程序的注解 @SpringBootApplication:包括三个标签组成 @EnableAutoConfiguration : 开启自动配置功能 @SpringBootConfiguration - @Configuration : Spring的配置标签 @C

cjy_lean的博客 225

面面俱到太全了!华为大神珍藏版:SpringBoot全优笔记

前言 作为开发人员,对于Spring全家桶肯定是不陌生的,而来自于Spring大家族的Spring Boot,作为Spring团队提供的流行框架,它的存在解决的Spring框架使用较为繁琐的问题,所以掌握SpringBoot是精通Spring必不可少的一个过程。 在面试过程中,SpringBoot的相关内容都会被面试官给问到,几乎一线互联网对于技术岗的任职要求都对Spring有一定的规定,所以学习Spring刻不容缓。 而今天,我们则主要一起来学习SpringBoot相关内容,这份华为大神珍藏版分享给

Java架构师之路的博客 214
上一篇: VMware中Centos里docker卸载和安装
下一篇: Elasticsearch对象创建测试中new HttpHost和Http.create的区别
happystudy_neu
博客等级 码龄4年 1140粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值