Spring Web MVC 笔记

Spring Web MVC 流程

Dispatcher Servlet

这是一个前端分派 Servlet(前端控制器模式),外部所有的请求都会先到达这里,然后由其将请求分派给其他组件进行实际的处理。

Handler Mapping

处理器映射,由 DispatcherServlet 通过 url 信息查询映射表,确定该请求要分派给哪个 Controller(即 Handler)。

Controller

请求被从 DispatcherServlet 发送到合适的 Controller 后,会在这里卸下它的负载(request context)并等待控制器处理这些信息。

实际上,设计良好的 Controller 本身只处理很少的工作(甚至根本不处理),而是将业务逻辑委托给一个或多个 Service 对象进行处理。

在处理完信息后,Controller 将模型数据打包进 Model 中,然后内部会自动将 Model 和 ViewName 打包成 ModelAndView 回传给 DispatcherServlet。(如果该方法有 @Repsonsebody 注解,则会跳过后面的视图解析,直接写入流)

Service

业务逻辑应该在这里实现

Repository

即 DAO(Data Access Object),专门连接数据库做增删查改用。

View Resolver

视图解析器,通过 Controller 返回的 ViewName 查询对应的 View。

View

这是请求的最后一站,在这里,View 得到 Model 对象,并将该对象中的数据渲染,然后该输出会被作为响应体返回给客户端。

使用 Spring Web MVC

配置 DispatcherServlet

Java Servlet 是 Java Web 的核心技术,所有的 Http 请求都要通过它进行处理,Http 响应对象都要通过它来填充。因此要使用 Spring Web MVC,首先要在 Servlet 容器中配置 DispatcherServlet。传统的配置方式是使用 web.xml,从 Spring3.1 和 Serlvet 3.0 规范开始,可以使用基于 Java 类的方式来配置 Servlet。

在 Serlvet3.0 环境中,Servlet 容器会在 classpath 中查找实现了 javax.servlet.ServletContainerInitializer 接口的类,如果找到了,就使用它来配置 Servlet 容器。从 Spring3.2 开始,可以直接继承 AbstractAnnotationConfigDispatcherServletInitializer 类,该类提供了一个很方便的基础实现。

Context Hierarchy(Context 层次结构)

DispatcherServlet 有两个 Context:一个 WebApplicationContext(ApplicationContext 的拓展),而 WebApplicationContext 又有一个指向它所关联的 ServletContext 和 Servlet 的链接。

待续。。

参考

附:完整的运行流程

posted @ 2018-06-24 22:50  於清樂  阅读(334)  评论(0编辑  收藏  举报