SpringMVC处理请求

Python爬取腾讯视频m3u8加密流实战(附完整代码) 本文提供了一份详细的Python实战教程,指导如何通过抓包分析、模拟请求头与载荷,破解腾讯视频的m3u8加密流防盗链机制,并附上完整代码实现视频片段的下载与合并。教程涵盖从侦察到代码实现的完整流程,并包含参数动态化、多线程下载等高级技巧与避坑指南,旨在帮助开发者掌握流媒体下载的核心技术。 阅读详情

HttpServletBean

这里写图片描述
从HttpServletBean的结构中可知,其没有重写service,doXXX等处理请求方法,所以HttpServletBean没有具体处理请求

FrameworkServlet

这里写图片描述
FrameworkServlet重写了HttpServlet的这些方法
这里写图片描述
可以看到Service之中将除了PATCH方法的所有请求都集中到processRequest中进行处理。
这和HttpServlet将不同请求按类型分到不同的方法中正好相反。为什么要这么做?其实SpringMVC对不同类型的请求划分的很好,这里只是应该有其他的事情要做,并且将结构分得更为清晰。先看processRquest
这里写图片描述
这里写图片描述
核心的是doService()模板方法,这个方法在DispatchServlet中实现。在doService前后还做了一些事情,这个就是装饰器设计模式。
在doService()之前是将请求之前的LocaleContext和RequestAttribute保存,然后获取当期请求的LocaleContext和RequestAttribute并设置上,doService()处理之后在finally中使用resetContextHolder再进行恢复。
最后发送一个ServletRequestHandledEvent。

LocaleContextHolder、RequestAttributesHolder

LocaleContext中存放的是本地化信息
这里写图片描述
这里写图片描述
这里写图片描述
首先要提到的一点是LocaleContextHolder是个abstract类,其中的所有方法都是static方法,可以直接调用,而且没有父类也没有子类。也即是不能对其进行实例化,只能调用其中的方法,这种设计是值得学习的。(ps:我通常写Django代码的时候写了很多的工具函数,其实没有做过封装,是很不好的。)

在LocaleContextHolder中封装了两个属性
这里写图片描述
都是ThreadLocal类型的,第二个可以被子线程继承,关于ThreadLocal可以参考:

另外LocalContextHolder提供了get/setLocal方法
这里写图片描述

举个例子程序中如果要使用到Locale的时候首先可以从request中获取,request.getLocale(),但是如果是在Service层中的话就没有request对象了,需要Controller将request传进来。这个就太麻烦了,而且需要修改Service层的接口。这个时候可以直接使用LocaleContextHolder.getLocale()获取Locale对象

RequestAttributes是Spring的一个接口
这里写图片描述
通过RequestAttributes可以get/set/removeAttributes,根据scope参数判定是操作的reques还是session
FrameworkServlet使用的是ServletRequestAttributes,看下其set方式(get/remove类似)
这里写图片描述
这里判定了一个属性isRequestActive(),当调用了requestComplete()方法后request的requestActive就变成了false,可以参看FrameworkServlet中finally中的调用。其实很容易立即,request执行完毕之后就是非active的了。
这里提出一个问题:我想Attributes应该是个Map属性,用来设置key-value,但是一直没有找到这个属性,在HttpServletRequest中没有找到,具体存储在哪里现在还不知道。。
这里写图片描述

在说一下RequestAttributesHolder,其和LocaleContextHolder的设计类似:
这里写图片描述
这里写图片描述
同样的可以在Service层中通过RequestAttributesHolder获取Request

HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse resp = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();

可以参考Spring MVC 中几种获取request和response的方式

publishRequestHandledEvent

在FrameworkServlet中的finally中调用了:
这里写图片描述
这里写图片描述
当publishEvent为true的时候就发送消息,在web.xml中publishEvent的配置默认为true。
对于监听这个消息值需要继承ApplicationListener接口,并实现onApplicationEvent方法
对于使用参考下这篇文章:利用spring的ApplicationListener监听某一类事件的发生

DispatchServlet

DispatchServelet是SpringMVC的核心类,所有的顶层设计都在这里。
通过之前的分析可以知道DispatchServlet中执行处理方法的入口是doService
这里写图片描述
设置属性中前面4个和Handler/View有关,后面的三个属性和flashMap有关,主要用与Redirect转发时参数的传递。具体之后研究

由上述代码可知doService()将具体的工作转发给了doDispatch()

这里写图片描述
这里写图片描述

2025华为杯第二十二届中国研究生数学建模竞赛E题:高速列车轴承智能故障诊断问题 - 完整解题分析+完整MATLAB源码! 🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀! 阅读详情

相关推荐

配置权重_高盛都在用的资产配置模型,BL贝叶斯框架改进Markowitz

前面我们说到,markoviz的均值-方差模型,第一次,用数学的方式严格证明了投资组合存在最优的权重,但它的学术意义大于实战。主要原因有两个:1,人们很难有效的预测期望收益率;2,最优资产组合配置对输入非常敏感,结果往往难以被人理解。还有就是在投资中,定量只是完成初步构建,同步的定性判断依然非常重要:第一,投资者的认知偏好:倾向于关注他们认为被低估,但有发展潜力或者可以确定相对交易价值的小部分股票...

weixin_39892309的博客 715

Request的所有方法

setAttribute(String name,Object obj):用于设置request中的属性及其属性值 removeAttribute(String name):用于删除请求中的一个属性 getAttribute(String name):返回由name指定的属性值 getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组 getCharacterEncoding

qq_40298175的博客 2435

【技术解析】AlexNet——从ReLU到Dropout的深度学习关键突破

本文深入解析AlexNet在深度学习领域的关键突破,重点探讨了ReLU激活函数和Dropout技术的革命性应用。作为卷积神经网络的里程碑,AlexNet通过ReLU解决梯度消失问题,利用Dropout有效防止过拟合,为现代深度学习模型奠定了重要基础。这些创新技术至今仍在计算机视觉和自然语言处理等领域发挥重要作用。

weixin_33719619的博客 272

java removeattribute_Java HttpServletRequest.removeAttribute方法代碼示例

本文整理匯總了Java中javax.servlet.http.HttpServletRequest.removeAttribute方法的典型用法代碼示例。如果您正苦於以下問題:Java HttpServletRequest.removeAttribute方法的具體用法?Java HttpServletRequest.removeAttribute怎麽用?Java HttpServletReques...

weixin_39897392的博客 926

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

5分钟搞定Google Custom Search API申请:从注册到获取CX Key全流程

本文详细介绍了如何快速申请和配置Google Custom Search API,从Google Cloud项目创建、启用计费、获取API Key,到在Programmable Search Engine控制台创建自定义搜索引擎并获取关键的CX Key,提供了全流程实战指南。文章还包含安全配置建议、API调用测试方法及前端与后端的集成代码示例,帮助开发者高效实现网站或应用的智能搜索功能。

weixin_29227585的博客 1663

ThreadLocal在Spring中的应用

共享对象 如果在每个线程中ThreadLocal.set()进去的东西本来就是多线程共享的同一个对象,比如static对象,那么多个线程的ThreadLocal.get()取得的还是这个共享对象本身,还是有并发访问问题

Leon_Jinhai_Sun的博客 2309

14、方法论 - 自顶向下与自底向上的结合

本文探讨了如何将自顶向下的规范驱动方法与自底向上的组件构建方法相结合,以形成更加全面的编程理论。通过引入代数法则,简化逻辑关系、提高代码可读性并支持形式化验证,结合实际案例(如智能家居控制系统)展示了如何在设计和实现阶段确保系统的正确性和可靠性。文章还讨论了工具支持的重要性,并提出了未来发展的方向。

lstm7chronicler的博客 173

java setlocale 国际化_springboot 国际化之locale

国际化首先要通过request中的获取语言变量,还是看源码吧DispatcherServlet.initStrategies->private void initLocaleResolver(ApplicationContext context) {try {this.localeResolver = context.getBean(LOCALE_RESOLVER_BEAN_NAME, Lo...

weixin_29830873的博客 712

uniapp [安卓苹果App端] - 在“安卓app/苹果app“平台端打包编译后,微信授权登录报错 login:fail [:-1]未能完成操作。(PGWXAPI错误-1。)错误码code:-10

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,微信授权登录,uniAppAPP端微信登录报错,出现微信确认登录界面后点击登录报错,BundleID,应用ID,微信登录,app微信一键登录,微信登录绑定点确定就出错,AppSecrect,login:fail[:-1]未能完成操作。(PGWXAPI错误-1。),"errCode":-100,"code":-100,在uniappmanifest.json配置了AppSecrect还是报错无

🏆 前端领域优质创作者 3762

【Qt开发教程】网络代理QNetworkProxy类详解及实战应用

QNetworkProxy 提供了一种灵活而强大的方式来配置和管理网络代理,通过设置代理类型、主机、端口和认证信息,可以使应用程序的所有网络请求通过代理服务器进行。结合 QNetworkProxyFactory 可以实现动态代理选择和自动配置,提高应用的网络通信能力和安全性。在实际应用中,通过合理设置代理、处理代理认证和错误情况,可以确保应用程序在复杂的网络环境中稳定运行,为用户提供可靠的网络访问体验。

科技改变人类,技术成就未来 1542

聊聊SpringMVC(2)---SpringMVC之请求过程

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34082854的博客 389

OAuth2.0集成SpringSecurity加JWT实现单点登录

单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以

Nicky's blog 9037

springMVC处理请求全过程

总的来说,Spring MVC 的请求处理流程是一个经典的 MVC 模式的实现,通过各个组件的配合,实现了请求的接收、处理、响应的完整流程,为开发者提供了一种简单、灵活且可扩展的方式来构建 Web 应用程序。熟悉这些流程和组件对于理解 Spring MVC 的工作原理和实现机制非常重要,有助于更加高效地开发和调试应用程序。

Supreme13的博客 3984

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SpringMVC 处理请求原理

SpringMVC 处理请求原理

学习笔记! 1118

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringMVC处理请求流程

下面是一个常见的SpringMVC处理请求的流程从上面的流程中可以看出核心对象是DispatcherServlet,下面我们根据上面的流程图来分析源码,不过需要先知道一些前置知识。

wsb_2526的博客 1132

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringMVC对请求的处理流程

  前言         在没有这些开发框架的传统项目中一般都是使用jsp+Servlet的实现方式,基本上是一个url对应一个Servlet,如果项目比较大的时候就会出现很多的问题,所以,后来出现了strusts、SpringMVC等等一些框架,SpringMVC是我们经常使用到的开发框架,MVC(Model/View/Controller)它是一种设计模式,简化了web开发的工作量,并且很...

xpsallwell的专栏 3208

SpringMVC 请求处理流程

SpringMVC 请求处理流程 一,如何进行初始化,初始化时做了什么,Filter和Servlet什么时候注入的? 1,springboot启动时onRefresh中会调用,ServletWebServerApplicationContext.createWebServer创建Tomcat 2,启动容器时触发TomcatStarter(实现了ServletContainerInitializer)onStartup方法初始化ServletContextInitializer接口的onStartup方法,第

u011309181的博客 2737

SpringMVC 请求处理详解

SpringMVC 的请求处理机制是其核心功能之一,通过前端控制器、处理器映射器、处理器适配器和视图解析器等组件的协同工作,实现了从接收请求到返回响应的完整流程。在实际开发中,灵活运用请求参数绑定、文件上传、拦截器等功能,可以提高开发效率和代码的可维护性。掌握 SpringMVC 请求处理的原理和方法,对于开发高质量的 Web 应用程序具有重要意义。

lyx20020823的博客 923

SpringMVC的DispatcherServlet处理请求的流程

内容参考https://my.oschina.net/lichhao/blog/104943 SpringMVC请求的大致处理流程图 1、请求的入口 1.1、HttpServlet与FrameworkServlet 从设计上看,SpringMVC是依托Servlet容器来设计的。在SpringMVC初始化之后,同样通过service()方法来接受、处理、返回。 DispatcherServlet的service()方法是他的父类FrameworkServlet实现的。 prote.

吃一口瓜 的博客 713

Springmvc的请求处理

在上两篇中,我们简单的介绍了web模式下bean的注入以及ioc容器的创建时间。那么,在容器创建之后,servletContext会持有ioc容器,以便在后面去处理业务逻辑 这一篇我们就仔细分析一下springmvc是怎么处理请求,又是如何去使用ioc容器中的bean的 我们都知道,springmvc也是基于servlet去处理请求。那么他就应该符合servlet的执行流程与规范 在使用servlet的时候,我们需要在web.xml文件中去配置servlet的名字与类路径以及他需要处理的请求。同样,我们也为

mist蒙的博客 245

Springmvc中对请求的处理

Springmvc中对请求的处理

weixin_53058174的博客 484

springMVC处理请求流程

具体流程: 步骤如下: 用户端发送请求request后 请求到达dispatcherServlet。 dispatcherServlet会怎么处理这个请求,它有什么作用? dispatcherServlet会转发给其他处理器处理,它本身并不对请求作任何处理,在整个任务流程中只负责调度工作,控制处理流程。 它做了什么调度工作? ①在接收到request后 请求HandlerMap...

Sokona的博客 399

SpringMVC到底是如何处理请求的?

很多人会用 SpringMVC,但对它的处理请求的方式并不清楚,当我们学习一个知识的时候,了解它会让我们更好地使用它,下面我们来看看 SpringMVC 是如何处理请求的。 请求流程的方式 先上图: Spring MVC 框架也是一个基于请求驱动的 Web 框架,并且使用了前端控制器模式(是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理。首先让我们整体看一下 Spring MVC 处理请求的流程: 首先

dirft_lez的博客 108

SpringMvc请求与参数处理

入门案例基础上编写BookController和UserController 最终创建好的项目结构如下:把环境准备好后,启动Tomcat服务器,后台会报错:从错误信息可以看出:团队多人开发,每人设置不同的请求路径,冲突问题该如何解决?解决思路:为不同模块设置模块名作为请求路径前置对于Book模块的save,将其访问路径设置对于User模块的save,将其访问路径设置这样在同一个模块中出现命名冲突的情况就比较少了。 问题是解决了,但是每个方法前面都需要进行修改,写起来比较麻烦而且还有很多重复代码,如果/u

几许的博客 1672

SpringMVC请求处理流程

Spring原码解析—SpringMVC请求处理流程 我们都知道SpringMVC的核心就是DispatcherServlet,它负责接收请求和调度,在开始原码解析前先来看看SpringMVC请求的一个处理流程图: 1)客户端发送请求,DispatcherServlet接收请求 2)DispatcherServlet将请求交给DefaultAnn...

Buggggggg 248
上一篇: springMVC整体结构
下一篇: SpringMVC组件概览
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值