当前位置: 首页 > wzjs >正文

赣州做网站公司网站职业技能培训班

赣州做网站公司,网站职业技能培训班,网站可以自己建立吗,网页制作素材末班Spring Boot一次接口请求涉及的完整执行链路 🔁 Spring 项目请求执行链路(简化视图) 客户端请求(浏览器、Postman)↓ Tomcat(Servlet 容器)↓ 【Listener 监听器】↓ 【Filter 过滤器】&#x…

Spring Boot一次接口请求涉及的完整执行链路


🔁 Spring 项目请求执行链路(简化视图)

客户端请求(浏览器、Postman)↓
Tomcat(Servlet 容器)↓
【Listener 监听器】↓
【Filter 过滤器】(如安全认证)↓
DispatcherServlet(中央调度器)↓
【HandlerInterceptor 拦截器】↓
【参数解析器(HandlerMethodArgumentResolver)】↓
Controller 方法执行

🧩 各组件详细解析与执行顺序

1️⃣ Listener(Servlet Listener)【最早执行】

  • 监听整个请求生命周期,例如:
    • ServletRequestListener
    • HttpSessionListener
    • ServletContextListener
  • 适合做请求进入/退出日志记录、资源准备等操作

📌【执行时机】:Tomcat 接收到请求,构造 Request 后即触发


2️⃣ Filter(过滤器)【Servlet 级别】

  • 实现 javax.servlet.Filter 接口
  • 是整个请求过程中最早的一环,甚至可以不进入 Spring
  • 常见用途:登录校验、XSS 过滤、CORS 跨域处理等

📌【执行时机】:

  • DispatcherServlet 执行前
  • 可通过 FilterRegistrationBean 控制顺序(@Order@WebFilter

3️⃣ DispatcherServlet(Spring MVC 核心调度器)

  • 核心职责:将请求分发给对应的 Controller
  • 执行顺序如下:
DispatcherServlet.doDispatch()├─ 处理 Multipart 请求(如文件上传)├─ 调用 HandlerMapping 查找 Controller├─ 调用 HandlerInterceptor.preHandle()├─ 参数解析器(ArgumentResolver)├─ 调用 Controller 方法├─ HandlerInterceptor.postHandle()└─ 渲染视图(如 JSON、HTML)

4️⃣ HandlerInterceptor(拦截器)【Spring 层】

  • 实现 HandlerInterceptor 接口
  • 常用于权限校验、日志记录、参数加工等
  • 分为三段生命周期方法:
方法时机
preHandleController 方法
postHandleController 方法 ,视图渲染前
afterCompletion请求全部结束后(包括异常)

📌【执行时机】:由 Spring MVC 控制,必须经过 DispatcherServlet 才会生效


5️⃣ Aspect(AOP 切面)【更精细控制】

  • 使用 @Aspect 实现 AOP,可以控制更细粒度的方法前后逻辑
  • 可用于审计、日志、权限等

📌【执行时机】:真正进入 Controller 方法执行时,环绕通知才会生效

  • 与拦截器的最大区别是,它操作的是方法级别,支持注解切点、参数切点等
  • 可以作用于 Service、Mapper、Controller 等层面

6️⃣ HandlerMethodArgumentResolver(参数解析器)

  • 将 HTTP 参数解析为 Java 方法参数
  • 常见的如 @RequestParam, @PathVariable, @RequestBody 就是由这些解析器完成的

7️⃣ Controller 方法执行

至此,请求真正进入你的业务方法。


🧯 异常处理(ExceptionResolver)

  • 如果 Controller 或任何处理过程中抛出异常,会进入 HandlerExceptionResolver
  • Spring 默认提供:
    • DefaultHandlerExceptionResolver
    • ResponseStatusExceptionResolver
    • ExceptionHandlerExceptionResolver(处理 @ExceptionHandler 注解的方法)

📌 总结执行顺序一览

执行阶段说明
Listener请求刚进来,监听请求/会话/上下文
FilterServlet 层面统一过滤
DispatcherServletSpring MVC 核心分发器
Interceptor.preHandle控制器方法执行前,适合权限校验
ArgumentResolver将参数注入到 Controller 方法中
AOP Around控制器方法执行前后,可用于埋点日志
Controller 方法正式执行业务代码
Interceptor.postHandle方法执行后,视图渲染前
Interceptor.afterCompletion全流程结束后调用,包括异常情况
ExceptionResolver统一异常处理

✅ Filter、Interceptor、AOP 区别总览

对比维度FilterInterceptor(拦截器)AOP(切面)
所属技术Servlet 规范(JEE 层)Spring MVCSpring AOP(基于代理)
是否依赖 Spring❌ 无需依赖 Spring✅ 依赖 Spring MVC✅ 依赖 Spring(Context + AOP)
拦截对象所有请求(静态资源也可)Controller 映射方法(Handler)Bean 的方法调用
拦截级别HTTP 请求级别MVC 控制器调用前后方法级别(可拦 Service、DAO、Controller)
是否感知注解❌ 无✅ 可以读取注解✅ 强大注解支持
常见应用日志打印、CORS、XSS、限流等登录鉴权、权限控制、日志追踪等审计日志、事务控制、性能统计、通用逻辑抽取
是否支持链式调用✅ FilterChain✅ 多个拦截器链✅ 多个切面 + 顺序控制(@Order)
注册方式Web.xml 或 Spring Boot 注册 Bean实现接口 + WebMvcConfigurer 注册@Aspect 注解 + @EnableAspectJAutoProxy
可用于非 Spring✅ 是(纯 Servlet 容器可用)❌ 否(只能在 Spring MVC 项目)❌ 否(必须由 Spring 管理的 Bean)

📦 Filter 注册方式(Spring Boot)

方式 1:使用 @WebFilter 注解 + @ServletComponentScan

@WebFilter(urlPatterns = "/*", filterName = "logFilter")
public class LogFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {// 前置处理chain.doFilter(request, response); // 放行// 后置处理}
}

需要在配置类或主启动类上添加:

@ServletComponentScan

方式 2:使用 Spring Boot 的 FilterRegistrationBean

@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<LogFilter> logFilter() {FilterRegistrationBean<LogFilter> bean = new FilterRegistrationBean<>();bean.setFilter(new LogFilter());bean.addUrlPatterns("/*");bean.setOrder(1); // 控制执行顺序,值越小越先执行return bean;}
}

🔗 Interceptor 注册方式(Spring Boot)

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")  // 拦截路径.excludePathPatterns("/login"); // 排除路径}
}

拦截器实现:

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 登录校验逻辑return true; // true 放行,false 拦截}
}

🔍 AOP 使用与示例

AOP 切面适用于方法级别的增强操作,比如审计日志、数据脱敏、方法耗时统计等。

1. 添加依赖(如果是 Spring Boot 默认 Web 项目已经包含)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2. 定义切面类

@Aspect
@Component
public class LogAspect {@Pointcut("execution(* com.example.controller..*(..))")public void controllerMethods() {}@Before("controllerMethods()")public void beforeAdvice(JoinPoint joinPoint) {// 打印请求信息}@Around("controllerMethods()")public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {long start = System.currentTimeMillis();Object result = joinPoint.proceed();long end = System.currentTimeMillis();System.out.println("执行耗时:" + (end - start));return result;}
}

📌 执行顺序对比总结(默认情况)

↓ 请求进入 ↓
1. Listener(Servlet 容器级别)
2. Filter(全局过滤,早于 Spring)
3. DispatcherServlet
4. Interceptor.preHandle(Spring 拦截器)
5. AOP @Before / @Around(方法增强)
6. Controller 执行
7. AOP @After / @AfterReturning / @AfterThrowing
8. Interceptor.postHandle
9. Interceptor.afterCompletion

🎯 使用建议

目标推荐使用
全局过滤如跨域、XSS、编码等Filter
登录认证、权限控制Interceptor
方法日志、埋点、性能统计AOP
文件上传前置处理、敏感词替换等Filter 或 AOP(配合注解)
接口日志记录、签名校验Interceptor 或 AOP
http://www.dtcms.com/wzjs/784481.html

相关文章:

  • 怎么申请免费的网站空间视频微网站开发
  • 汽车app网站建设视频网站开发有哪些功能
  • 整站网站模板网站备案中打不开
  • 网站建设的分工备份文件wordpress
  • 西安学建网站百度风云榜
  • 洛阳鼎和电力建设有限公司网站百度搜索优化平台
  • 乐器网站模板什么叫营销型网站建设
  • 装饰公司网站制作如何注册一个平台
  • 做旅游网站的设计感想动漫网页设计作业
  • 建筑学院官网做网站域名怎么选有利于seo
  • 在阿里巴巴上做网站有效果吗做视频的网站有哪些
  • 中考管理系统登录网站百度福州分公司
  • 网站整站开发项目亮点电子商务网站策划方案
  • 网站建设基本技术开源企业网站程序
  • 山东电商网站建设wordpress版本推荐
  • 网站优化方案模板攀枝花城市建设网站
  • 网站 建设 汇报河北三河建设厅网站
  • 免费网站建站w二维码生成器小程序
  • 手机网站类型英文服装商城网站建设
  • 石家庄做网站备案有哪些公司wordpress登录链接
  • 策划文案的网站门户网站ip地址段
  • 建站公司哪家好都选万维科技博客seo教程
  • 哪个网站可以免费设计房子ps网站首页怎么设计
  • 做教育的网站需要资质吗小程序开发源码
  • 同城的网站建设网络架构分层包括哪些
  • vps建设网站别人访问不了单页面网站模板
  • 广告模板在哪个网站好建设网站方法有哪些内容
  • 多个网站做计划制作音乐排行榜html5
  • 做网站 花时间php+mysql 2012也买酒商城网站源码
  • 新乡网站建设哪家优惠自己制作手机app软件