网站平台建设设备清单,wordpress编辑留言板,成都网站,促销策略步骤1#xff1a;用户发起请求 所有请求首先被 DispatcherServlet#xff08;前端控制器#xff09;拦截#xff0c;它是整个流程的入口。 DispatcherServlet 继承自 HttpServlet#xff0c;通过 web.xml 或 WebApplicationInitializer 配置映射路径#xff08;如 /用户发起请求 所有请求首先被 DispatcherServlet前端控制器拦截它是整个流程的入口。 DispatcherServlet 继承自 HttpServlet通过 web.xml 或 WebApplicationInitializer 配置映射路径如 /。
步骤2请求映射Handler Mapping HandlerMapping 根据请求的 URL、参数、Header 等信息找到对应的 处理器Handler。 处理器 可以是 Controller 注解的类中的方法或实现 Controller 接口的类。 关键接口RequestMappingHandlerMapping处理 RequestMapping 注解。 匹配规则 Controller
public class UserController {GetMapping(/users/{id})public String getUser(PathVariable Long id, Model model) {// 业务逻辑}
}
步骤3处理器适配Handler Adapter HandlerAdapter 负责调用处理器方法并处理参数绑定、返回值转换。 关键实现类RequestMappingHandlerAdapter支持 RequestMapping 方法。 适配过程 解析方法参数如 RequestParam、RequestBody。 执行方法逻辑。 处理返回值如 ModelAndView、JSON 数据。
步骤4执行拦截器Interceptor HandlerInterceptor 在处理器执行前后插入逻辑 preHandle在处理器方法执行前调用如权限校验。 postHandle在处理器方法执行后、视图渲染前调用。 afterCompletion在请求完成后调用资源清理。
步骤5业务逻辑处理 控制器方法执行业务逻辑可能涉及 调用 Service 层处理数据。 操作 Model 对象向视图传递数据。 GetMapping(/users)
public String listUsers(Model model) {ListUser users userService.findAll();model.addAttribute(users, users); // 数据传递到视图return user/list; // 视图名称
}
步骤6视图解析View Resolver ViewResolver 将控制器返回的视图名称解析为具体的 View 对象。 常见实现 InternalResourceViewResolver解析 JSP 页面如 /WEB-INF/views/user/list.jsp。 ThymeleafViewResolver解析 Thymeleaf 模板。 配置示例 Bean
public ViewResolver viewResolver() {InternalResourceViewResolver resolver new InternalResourceViewResolver();resolver.setPrefix(/WEB-INF/views/);resolver.setSuffix(.jsp);return resolver;
}
步骤7视图渲染View Rendering View 对象将模型数据渲染到响应中如生成 HTML、JSON。 渲染方式 JSP使用 JSTL 或 EL 表达式填充数据。 REST API通过 HttpMessageConverter 将返回值序列化为 JSON如 ResponseBody。
步骤8返回响应 渲染后的响应通过 DispatcherServlet 返回给客户端。 关键组件与接口
组件职责DispatcherServlet前端控制器统一调度请求处理流程。HandlerMapping映射请求到处理器Controller 方法。HandlerAdapter调用处理器方法处理参数绑定与返回值。ViewResolver解析视图名称到具体视图实现如 JSP、Thymeleaf。HandlerInterceptor拦截请求实现预处理和后处理逻辑如日志、权限校验。HttpMessageConverter处理请求/响应的数据转换如 JSON ↔ Java 对象。 异常处理机制 ExceptionHandler在 Controller 内处理特定异常。 ExceptionHandler(UserNotFoundException.class)
public ResponseEntityString handleUserNotFound(UserNotFoundException ex) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
} HandlerExceptionResolver全局异常解析器自定义异常响应。 ControllerAdvice定义全局异常处理类。 ControllerAdvice
public class GlobalExceptionHandler {ExceptionHandler(Exception.class)public ModelAndView handleAllExceptions(Exception ex) {ModelAndView mav new ModelAndView(error);mav.addObject(message, ex.getMessage());return mav;}
} RESTful 请求处理 RestController组合 Controller 和 ResponseBody直接返回数据。 RestController
RequestMapping(/api/users)
public class UserApiController {GetMapping(/{id})public User getUser(PathVariable Long id) {return userService.findById(id);}
} 内容协商根据请求的 Accept Header 返回 JSON/XML 等格式通过 HttpMessageConverter。 源码级流程解析简化版 DispatcherServlet.doDispatch() protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {HandlerExecutionChain mappedHandler getHandler(request); // 获取处理器链HandlerAdapter ha getHandlerAdapter(mappedHandler.getHandler());ModelAndView mv ha.handle(request, response, mappedHandler.getHandler());processDispatchResult(request, response, mappedHandler, mv, dispatchException);
} 2.参数解析通过 HandlerMethodArgumentResolver 解析方法参数。 3.返回值处理通过 HandlerMethodReturnValueHandler 处理返回值。 总结 核心流程DispatcherServlet → HandlerMapping → HandlerAdapter → Interceptor → ViewResolver。 扩展点拦截器、异常处理器、自定义参数解析器。 设计思想职责分离、组件化、高度可定制。