mvc的流程
秋水 Lv4
  1. 客户端向web服务器(tomcat等) 发送一个http请求,web服务器对http请求进行解析,解析后的url地址如果匹配到DispatchServlet的映射路径(通过web.xml重的Servlet-mapping配置),web容器会将请求交给DIspatchServlet处理

  2. DispatcherServlet接收到请求后,在对URL进行解析,得到请求资源标识符URI,然后调用相应的方法获得handler对象以及它对应的拦截器。(在这里只是获得了Handler对象,并不会操作它,在SpringMVC中,是通过HandlerAdapter对Handler进行调用、控制的)

  3. DIspatcherServlet根据得到的Handler对象,选择一个合适的HandlerAdapter,创建其实例对象,执行拦截器中的preHandler()方法。

  4. 在拦截器方法中,提取请求中的数据模型,填充Handler入参,然后执行handler

  5. handler执行完毕后返回一个ModelAndView对象给DispatcherServle。

  6. 通过ModelAndView只是一个逻辑视图,并不是真正的视图,DispatcherServlet通过ViewResolver视图解析器将逻辑视图转化为真正的视图。

  7. DispatcherServlet通过Model将ModelAndView中得到的处数据解析后用于渲染视图,最后将视图通过http相应返回客户端。

关于HandlerInterceptor定义了三个接口的调用方法

  1. prehandle,该方法在调用Controller方法请求之前被调用。用途:进行预处理,权限检查,日志记录。
  2. posthandler , 该方法在控制器方法请求之后,DispatcherServlet进行视图返回渲染之前被调用。可以对模型中的视图进一步加工或者修改,比如添加公共数据,或者调整返回的视图
  3. aferCompletion 该方法在整个请求结束之后,也就是在DispatcherServlet渲染视图之后执行。用户进行资源清理工作或者对整个请求处理的最后日志记录等。

关于整体流程:

  1. 请求到达DispatcherServlet
  2. DispatcherServlet调用preHandle方法。
    • 如果preHandle返回false,请求处理流程中断,直接跳转到步骤5。
    • 如果preHandle返回true,流程继续。
  3. 执行控制器方法:DispatcherServlet将请求委托给相应的控制器处理。
  4. 调用postHandle方法(仅当preHandle返回true)。
  5. 视图渲染:DispatcherServlet渲染视图。
  6. 调用afterCompletion方法:完成所有请求处理后,进行清理工作。
  • Post title:mvc的流程
  • Post author:秋水
  • Create time:2024-04-02 20:31:06
  • Post link:tai769.github.io2024/04/02/mvc的流程/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.