您的位置:首页 > 科技 > 能源 > 上海公司查名一网通_婚庆网页设计作品dw_百度安全中心_网站制作模板

上海公司查名一网通_婚庆网页设计作品dw_百度安全中心_网站制作模板

2025/4/21 11:46:04 来源:https://blog.csdn.net/qq_62112907/article/details/147234473  浏览:    关键词:上海公司查名一网通_婚庆网页设计作品dw_百度安全中心_网站制作模板
上海公司查名一网通_婚庆网页设计作品dw_百度安全中心_网站制作模板
步骤1:用户发起请求
  • 所有请求首先被 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 方法)。

    • 适配过程

      1. 解析方法参数(如 @RequestParam@RequestBody)。

      2. 执行方法逻辑。

      3. 处理返回值(如 ModelAndView、JSON 数据)。

步骤4:执行拦截器(Interceptor)
  • HandlerInterceptor 在处理器执行前后插入逻辑:

    • preHandle:在处理器方法执行前调用(如权限校验)。

    • postHandle:在处理器方法执行后、视图渲染前调用。

    • afterCompletion:在请求完成后调用(资源清理)。

步骤5:业务逻辑处理
  • 控制器方法执行业务逻辑,可能涉及:

    • 调用 Service 层处理数据。

    • 操作 Model 对象向视图传递数据。

      @GetMapping("/users")
      public String listUsers(Model model) {List<User> 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 ResponseEntity<String> 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)。


源码级流程解析(简化版)
  1. 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。

  • 扩展点:拦截器、异常处理器、自定义参数解析器。

  • 设计思想:职责分离、组件化、高度可定制。


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com