DispatcherServlet

作者: 小弦弦喵喵喵 | 来源:发表于2018-01-15 13:47 被阅读24次

在颠覆者中,我们看到过如下代码。

public class WebInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext)
            throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(MyMvcConfig.class);
        ctx.setServletContext(servletContext); //2
        
        Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); //3
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
        servlet.setAsyncSupported(true);//1

    }
}

那么这个DispatcherServlet起到了什么作用呢?

SpringMVC实现了两种常见的设计模式:前端控制器模式与MVC模式。

对于前端控制器系统,在设计时会为所有传入的请求公开一个单独的入口点。在Java Web中,这个入口点通常是个Servlet——这个特别的Servlet会将请求分派并委托给其他组件处理。对于SpringMVC来说,这个特别的Servlet就是DispatcherServlet。

MVC设计模式是一种架构风格,它整体描述了一个应用,提倡在请求线程必须经过的三个不同层次之间要明确分离的关注点,这三个层次分别是模型、视图与控制器。

当客户端的请求被Servlet容器拦截时,它会被路由到DispatcherServlet。DispatcherServlet会将请求发送给一个控制器。

SpringMVC的流程可以通过下图来描述。

SpringMVC流程

(ViewResolver视图解析器,主要作用是把一个逻辑上的视图名称解析为一个真正的视图。Handler Mapping处理器映射,把一个URL指定到一个Controller上。)

DispatcherServlet是SpringMVC的入口点,DispatcherServlet依赖于HanderMapping的实现。根据不同的策略和特性,HanderMapping能够解析出适用于某个请求的控制器方法处理程序。

当DispatcherServlet有了控制器方法处理程序后,就会将请求指派给它。方法处理程序会将一个视图名(或是视图本身)以及填充好的模型数据返回给DispatcherServlet。

通过视图名,DispatcherServlet会请求ViewResolver的实现来查找并选择视图。

通过请求、视图与模型,DispatcherServlet就具备了构建客户端所需的一切。通过所有这些元素对视图进行处理后,会将响应返回给Servlet容器。

相关文章

  • 源码跟踪-springmvc(三):RequestMapping

    DispatcherServlet.getHandler DispatcherServlet.getHandler...

  • SpringMVC的流程

    发送请求到DispatcherServlet,然后DispatcherServlet请求HandlerMappin...

  • dispatcherservlet

    dispatcherservlet负责把请求分发到各个控制器,另外它还提供了一些另外一些web开发功能。Sprin...

  • DispatcherServlet

    DispatcherServlet是SpringMVC的分发器,本身是个Servlet 先看HttpServlet...

  • DispatcherServlet

    作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,...

  • DispatcherServlet

    在颠覆者中,我们看到过如下代码。 那么这个DispatcherServlet起到了什么作用呢? SpringMVC...

  • DispatcherServlet

    DispatcherServlet DispatcherServlet是前端控制器,主要作用是分派请求。即拦截所用...

  • DispatcherServlet

    ServletContext WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletCont...

  • 学习 spring mvc

    1. mvc 主要类DispatcherServlet class DispatcherServlet -> ex...

  • SpringMvc流程

    DispatcherServlet 在springMVC里请求都是由DispatcherServlet 接收,类继...

网友评论

    本文标题:DispatcherServlet

    本文链接:https://www.haomeiwen.com/subject/idgroxtx.html