java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring MVC 请求处理

Spring MVC 请求处理流程步骤详解

作者:云之兕

这篇文章主要介绍了Spring MVC 请求处理流程详解,本文分步骤结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

步骤1:用户发起请求

步骤2:请求映射(Handler Mapping)

@Controller
public class UserController {
    @GetMapping("/users/{id}")
    public String getUser(@PathVariable Long id, Model model) {
        // 业务逻辑
    }
}

步骤3:处理器适配(Handler Adapter)

步骤4:执行拦截器(Interceptor)

步骤5:业务逻辑处理

@GetMapping("/users")
public String listUsers(Model model) {
    List<User> users = userService.findAll();
    model.addAttribute("users", users); // 数据传递到视图
    return "user/list"; // 视图名称
}

步骤6:视图解析(View Resolver)

@Bean
public ViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

步骤7:视图渲染(View Rendering)

步骤8:返回响应

渲染后的响应通过 DispatcherServlet 返回给客户端。

 关键组件与接口

组件职责
DispatcherServlet前端控制器,统一调度请求处理流程。
HandlerMapping映射请求到处理器(Controller 方法)。
HandlerAdapter调用处理器方法,处理参数绑定与返回值。
ViewResolver解析视图名称到具体视图实现(如 JSP、Thymeleaf)。
HandlerInterceptor拦截请求,实现预处理和后处理逻辑(如日志、权限校验)。
HttpMessageConverter处理请求/响应的数据转换(如 JSON ↔ Java 对象)。

异常处理机制

@ExceptionHandler:在 Controller 内处理特定异常。

@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
@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);
    }
}

源码级流程解析(简化版)

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 处理返回值。

总结

到此这篇关于Spring MVC 请求处理流程详解的文章就介绍到这了,更多相关Spring MVC 请求处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文