首页 > 其他分享 >浏览器请求过程

浏览器请求过程

时间:2024-12-31 21:52:10浏览次数:1  
标签:控制器 拦截器 浏览器 请求 Spring 视图 过程 public

在 Spring MVC 中,处理一次 HTTP 请求的过程涉及多个关键组件,它们按特定顺序依次执行。每个组件都有其特定的职责,包括拦截、路由、请求处理、视图解析等。以下是处理一次 HTTP 请求的流程,涉及的主要组件包括 DispatcherServletHandlerMappingHandlerAdapterInterceptorViewResolver 等。

1. 请求到达 DispatcherServlet

  • 当一个 HTTP 请求到达 Spring Boot 应用时,首先会由 DispatcherServlet 处理。
  • DispatcherServlet 是整个 Spring MVC 请求处理流程的前端控制器,负责将请求转发到正确的处理器(即控制器)并返回响应。

2. 拦截器(Interceptor)

  • DispatcherServlet 处理请求之前,会经过 拦截器(Interceptor)链。
  • 拦截器 可以在请求进入控制器之前进行处理,或者在请求响应之后做处理。
  • 你可以在拦截器中执行日志记录、权限校验等操作。拦截器与过滤器(Filter)不同,拦截器是基于 Spring 的,而过滤器是基于 Servlet 的。
  • 拦截器执行顺序:preHandle(请求到达控制器前) → postHandle(控制器处理后,视图渲染前) → afterCompletion(请求完成后,视图渲染后)。

示例代码:

java @Component public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // 在控制器方法执行前 return true; // 返回true表示请求继续往下执行,false表示请求终止 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { // 在控制器方法执行后,视图渲染前 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // 在请求完成后执行,通常用于清理资源 } }

3. 处理器映射器(HandlerMapping)

  • HandlerMapping 是负责根据请求的 URL 查找合适的处理器(通常是控制器方法)并将请求分发给相应的处理器。
  • Spring MVC 提供了多种 HandlerMapping,例如 RequestMappingHandlerMapping,它用于根据请求的 URL、请求方法(如 GET 或 POST)等规则查找对应的处理器方法。

4. 处理器适配器(HandlerAdapter)

  • HandlerAdapter 是用来适配具体的处理器(控制器方法)与 Spring MVC 中的请求处理机制的。
  • 它的作用是执行具体的控制器方法,并返回执行结果。Spring MVC 中的 RequestMappingHandlerAdapter 主要用于支持基于注解的控制器方法。

5. 控制器(Controller)

  • 控制器是处理请求的核心组件。在控制器中定义了 URL 请求的处理方法。
  • 控制器的方法会被 HandlerAdapter 调用来执行业务逻辑。

示例代码:

java @RestController public class MyController { @GetMapping("/hello") public String hello() { return "Hello, World!"; } }

6. 视图解析器(ViewResolver)

  • 控制器方法返回的是模型数据(通常是一个对象),而视图解析器则负责根据返回值确定显示页面的视图。
  • 如果返回的是一个字符串,视图解析器会根据该字符串查找对应的视图页面(如 JSP、Thymeleaf 模板等)。
  • 视图解析器也负责将模型数据与视图进行绑定。

示例配置:

java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/views/", ".jsp"); } }

7. 视图渲染(View Rendering)

  • 视图解析器根据控制器返回的视图名,选择合适的视图进行渲染。
  • 例如,如果使用 JSP,视图渲染过程就是将返回的 JSP 页面与模型数据绑定,并生成最终的 HTML 页面响应。
  • 最终,HTTP 响应会返回给客户端。

8. 返回响应

  • 最终,响应会被 DispatcherServlet 返回到客户端。
  • 如果是 RESTful API,返回的是 JSON 或其他数据格式;如果是 Web 应用,返回的是 HTML 页面。

标签:控制器,拦截器,浏览器,请求,Spring,视图,过程,public
From: https://www.cnblogs.com/zyb-luckey/p/18644817

相关文章

  • 浏览器原理-事件循环
    浏览器的进程模型何为进程?程序运行需要有专属的内存空间,这块内存空间可以简单理解为进程。每个应用至少有一个进程,进程之间相互独立。即使要通信,也需要双方同意。何为线程?有了进程后,就需要线程来执行程序。一个进程至少有一个线程,所以进程开启后会自动创建一个线程来运行代......
  • MediaWIKI 1.43 教程系列 3 — MediaWIKI 安装过程中的配置
    根据前期的2篇文章顺序,正式进入安装时的配置。 1.输入服务器的IP地址,如以下方式的其中任意一种情况: #若已经有绑定的域名,直接输入域名,如baidu.com #没有域名绑定,只是内部或公网的IP地址,如15.16.17.18 #已经设置过其他端口如8080,15.16.17.18:8080   2.点击上......
  • sql server 存储过程
    SQLServer存储过程笔记什么是存储过程(StoredProcedure)存储过程是预编译的SQL语句集合,存储在SQLServer数据库中,可以通过名称调用。它们通常用于执行复杂的操作、数据验证、错误处理或批量数据操作。存储过程可以接受输入参数,执行一系列的SQL操作,并返回结果或状态......
  • chrome浏览器network如何查看上一个页面的请求
    前言大家好,我是小徐啊。chrome浏览器是我们在JAVA开发中常用的浏览器,其中的console和network等,都是我们常用的功能。network中,是可以看到每次的请求的,包括请求的参数和返回的数据。但有时候,页面上请求之后,会有跳转的请求,导致看不到上一个页面的请求。其实,我们可以设置的,那么,该如......
  • 如何确保CSV文件读取过程中数据完整?
    确保CSV文件读取过程中数据完整,需要考虑以下几个方面:错误处理:检查文件是否成功打开。检查每次读取操作是否成功。处理可能的I/O异常。数据验证:验证每一行的数据是否符合预期格式。检查每行的列数是否一致。验证数据类型是否正确(例如,日期格式、数值范围等)。处理......
  • uniapp请求封装-token无感刷新
    当前是vue3+ts版本的封装vue3+js版本请求封装可参考https://www.cnblogs.com/lovejielive/p/14343619.htmltoken无感刷新,可自行删除requset.ts中ts相关数据恢复vue2版本先在目录下创建utils和common这2个文件夹utils是存放工具类的,common用来放置常用方法的之后......
  • Excel浏览器RPA2.0来了
    嗨,亲爱的小伙伴们,今天给大家介绍一款超实用的工具——Excel浏览器,它就像是我们的小助手,能帮我们轻松连接Excel表格和网络资源,实现网页抓取、文件处理等酷炫功能哦!最近,Excel浏览器升级了RPA指令,变得更强悍了!它现在支持js脚本和c#脚本,让我们可以完成更复杂的任务。下面,我就用轻松活......
  • 接口请求的Type显示preflight表示什么呢?
    在前端开发中,当你看到接口请求的Type显示为“preflight”,这通常指的是一个CORS(跨源资源共享)预检请求。CORS是一个W3C规范,它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。预检请求(Preflightrequest)是一个实际请求之前的“预备”请求,用于询问服务器是否允许该跨域......
  • 通过浏览器的开发者工具(F12)来加快网页中的视频播放速度
    使用JavaScript来修改视频元素的playbackRate属性。以下是具体步骤:打开你想要调整视频播放速度的网页。按下 F12 打开开发者工具。切换到“控制台”(Console)选项卡。输入以下JavaScript代码并按下回车键://获取页面中的第一个视频元素varvideo=document.querySelec......
  • 最新版Chrome浏览器集成ActiveX控件步骤
    编写背景   allWebPlugin中间件迎春版刚刚发布,受到很多网友的青睐。它极大的简化了Web系统集成ActiveX插件的步骤,提高了产品的实用性和通用性。本文将详细介绍如何使用allWebPlugin中间件接口,快速集成ActiveX插件。allWebPlugin简介   allWebPlugin中间件是一款......