简单讲一下SpringMVC的执行流程?_springmvc执行流程-程序员宅基地

技术标签: java  The interview questions  面试题  intellij idea  springMVC  

一、Struts2中的拦截器,你都用它干什么?

  java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。
  在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
面试:
struts2中的的功能(参数处理、文件上传、字符编码等)都是通过系统拦截器实现的。
如果业务需要,当然我们也可以自定义拦截器,进行可插拔配置,在执行Action的方法前后、加入相关逻辑完成业务。

使用场景:
1、用户登录判断,在执行Action的前面判断是否已经登录,如果没有登录的跳转到登录页面。
2、用户权限判断,在执行Action的前面判断是否具有,如果没有权限就给出提示信息。
3、操作日志…

二、简单讲一下SpringMVC的执行流程?

在这里插入图片描述
  1.用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
  2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
  3.DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)
  4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
  HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
  数据转换:对请求消息进行数据转换。如String转换成Integer、Double等;
  数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等;
  数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中;

  5.Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
  6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
  7. ViewResolver 结合Model和View,来渲染视图;
  8. 将渲染结果返回给客户端;

面试:
  1、用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获(捕获);
  2、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;(查找handler);
  3、 DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller), Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象(执行handler);
  4、DispatcherServlet 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver) (选择ViewResolver);
  5、通过ViewResolver 结合Model和View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回);

快速记忆技巧:
  核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/faramita_of_mine/article/details/123909578

智能推荐

Software rendering doesn't support hardware bitmaps-程序员宅基地

文章浏览阅读6.8k次。应用在8.0的手机上使用tansition 动画时崩溃,并报出该错误:java.lang.IllegalStateExceptionSoftware rendering doesn't support hardware bitmaps查了一下,貌似是Glide的问题。在Glide 4.3上,hardware bitmaps(开启hardware bitmaps作用大概就是在使用ARGB_..._software rendering doesn't support hardware bitmaps

flacs 安装教程_改良人工晶体安装方法在FLACS中的应用研究-程序员宅基地

文章浏览阅读217次。摘要目的探讨改良人工晶体安装方法在飞秒激光辅助白内障手术(FLACS)中的应用效果。方法将2019年9~11月在陆军军医大学大坪医院行FLACS的80例患者随机分为对照组和观察组,每组40例。植入的人工晶体选用一片式两襻疏水性丙烯酸制成的可折叠、后房型人工晶体,对照组患者按照常规方法安装晶体,观察组患者按照改良后的方法安装晶体。观察并比较2组患者手术时间、晶体展开时间、术中晶体植入囊袋后襻的变化、..._flack晶体怎么解决

SpringCloud第九章Hystrix断路器(服务监控hystrixDashboard)_cloud-consumer-hystrix-dashboard9001-程序员宅基地

文章浏览阅读176次。5、服务监控hystrixDashboard5.1、概述除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring Cloud也提供了Hystrix Dashboard的整合,对监控内容转化成可视化_cloud-consumer-hystrix-dashboard9001

django ajax异步加载 实现局部刷新_django3 ajax局部刷新div-程序员宅基地

文章浏览阅读3.8k次。<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-2.1.0.js"></script><script type="text/javascript"> $(function(){ $("#inp1").blur(function(){ ..._django3 ajax局部刷新div

组成原理:计算机系统概述_机器主频clk和时钟脉冲-程序员宅基地

文章浏览阅读265次。文章目录层次结构功能部件指令执行过程取指周期分析指令执行指令计算机的性能指标层次结构一个完整的计算机系统由硬件系统和软件系统共同组成,如果某一功能既可由硬件实现,又可由软件实现,则称软硬件在逻辑上是等效的(注意不是等价的),一般来说,用硬件实现的效率高,用软件实现的较灵活。冯氏机有六个特点:计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备组成。指令和数据以同等地位存储在存储器中,可按地址访存。指令和数据均采用二进制代码表示。指令由操作码和地址码组成,操作码用于表示操作的性质,地址码_机器主频clk和时钟脉冲

Aliddns插件使用:小白超详细图文教程-程序员宅基地

文章浏览阅读7.8w次,点赞6次,收藏39次。Aliddns插件使用:小白超详细图文教程。Aliddns插件,用阿里的云解析速度是快,天下武功为快不破....作为一个小白的我,看这篇帖子也是一脸懵逼,http://koolshare.cn/thread-64703-1-1.html经过自己不耻下问的精神,总算完全搞明白了...给大家带来完整超详细的教程:首先你宽带要是公网IP,不是公网IP的童鞋,可以到_aliddns

随便推点

Elasticsearch6.5.4+Logstash6.5.4的基本应用-程序员宅基地

文章浏览阅读661次。创建mapping在kibana中创建Elastiicsearch的mapping,应用ik分词器对中文字段进行分词。PUT /omega/{ &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;settings&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;: { &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;number_of_sha

解决 MAC 无法打开“***”,因为无法验证开发者_无法打开 因为无法验证开发者-程序员宅基地

文章浏览阅读10w+次,点赞38次,收藏12次。当安装非信任开发者的软件时,系统提示无法打开“***”,因为无法验证开发者。我们可以按照以下方法解决打开方达,在右侧菜单栏选择应用程序找到提示无法验证的应用,右键点击打开第一次会出现以下提示,继续点击打开即可完成以上步骤,你就可以成功使用应用..._无法打开 因为无法验证开发者

c++基本类型与 byte数组互转_c++ byte数组-程序员宅基地

文章浏览阅读1w次,点赞23次,收藏68次。c++ 基本类型与byte 数组互相转换前言 由于根据编译器的不同 有部分基础数据类型字节数不一致 本文档 基础类型位数如下 bool 字节数: 1 char 字节数: 1 short 字节数: 2 int 字节数: 4 long 字节数: 4 long long 字节数: 8 float 字节数: 4 double 字节数: 8 long double 字节数: 12说明传统C方式 位操作: 使用一个unsigned int变量来作为位容器。 强制指针类_c++ byte数组

RecBole小白入门系列博客(四)——Sequential类模型运行流程_recbole 保存模型结果-程序员宅基地

文章浏览阅读7k次,点赞6次,收藏27次。RecBole小白入门系列博客(四)——Sequential类模型运行流程写在前面选定模型设置模型超参数选定数据集数据集基本格式设置数据集参数设置训练参数设置评测参数总结参数设置运行调(lian)参(dan)结束语传送门:RecBole小白入门系列博客(一)——快速安装和简单上手RecBole小白入门系列博客(二)——General类模型运行流程RecBole小白入门系列博客(三)——Context类模型运行流程写在前面这次的内容和General类和Context模型运行流程差不多,我会特别提_recbole 保存模型结果

【数据结构】队列(链队列、循环队列)的存储结构及基本运算(C语言)_用链队列作存储结构,实现队列(元素为整型)的基本运算。链队列的类型定义:-程序员宅基地

文章浏览阅读9.4k次,点赞17次,收藏185次。目录1. 队列基本概念2. 链队列代码+注释运行结果3. 循环队列代码+注释运行结果1. 队列基本概念队列(Queue)是一种限定性线性表,它只允许在表的一端插入元素,而在另一端删除元素,具有先进先出的特点。在队列中,允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。队列有顺序和链式两种存储表示。2. 链队列链队列采用带头结点的链表结构,并设置一个队头指针 front 和一个队尾指针 rear ,队头指针始终指向头结点,队尾指针指向最后一个元素。空的链队列的队头指针和队尾指_用链队列作存储结构,实现队列(元素为整型)的基本运算。链队列的类型定义:

js 中文英文混排a-z_IBL with Multiple Scattering in Three.js-程序员宅基地

文章浏览阅读158次。IBL with Multiple Scattering implemented in Three.jsOnline demo & source code (Copy the link and open it in Chrome browser):https://codesandbox.io/s/multiple-scattering-ibl-k4990试着写了英文版的,如果有语法错误欢迎..._averagefresnel

推荐文章

热门文章

相关标签