springmvc之DispatcherServlet

  • 前言

  最近打算利用闲暇的时间从零写个springmvc项目,工作中的项目框架都是搭好的,写业务逻辑多些,所以开始就一路磕磕碰碰。快半个月了项目还没搭起来。对底层和框架了解的太少了,趁此机会把遇到的问题都好好研究一下并记录下来,供以后学习用。希望文中有不对的或是不严谨的地方还请不吝赐教,感谢!!!

  • 正文

  1.什么DispatcherServlet

  与许多其他的web框架一样,SpringMvc是围绕前端控制器模式设计的,在这一模式中DispatcherServlet,为请求处理提供了一种共享的算法,而实际的工作是由可配置的委托组件执行的。这个模型是灵活的,支持不同的工作流。

  DistpatcherServlet和所有的servelet一样需要根据Servlet规范使用Java配置或web.xml来声明和映射。然后,DispatcherServlet使用Spring配置来发现它所需要的委托组件,用于请求映射、视图解析、异常处理等等。

  下面是一个注册和初始化DispatcherServlet的Java配置示例。这个类是由Servlet容器自动检测的。

public class MyWebApplicationInitializer implements WebApplicationInitializer {

  @Override
  public void onStartup(ServletContext servletCxt) {

    // Load Spring web application configuration
    AnnotationConfigWebApplicationContext cxt = new AnnotationConfigWebApplicationContext();
    cxt.register(AppConfig.class);
    cxt.refresh();

    // Create DispatcherServlet
    DispatcherServlet servlet = new DispatcherServlet(cxt);

    // Register and map the Servlet
    ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);
    registration.setLoadOnStartup(1);
    registration.addMapping("/app/*");
  }

}

  2.DispatcherServlet在web.xml中的配置方法

    (1)通过web.xml中<servlet-name>来配置

      此方法会加载WEB-INF下的xxx-servlet.xml配置文件,此处“xxx”即为web.xml中<servlet-name>配置的名字。

      因此下面代码会加载WEB-INF下的springmvc-servlet.xml。

<servlet>
        <!-- springmvc的核心是dispatcherServlet他负责控制整个页面的请求路径 -->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- load-on-startup:表示容器启动时初始化该servlet; -->
        <load-on-startup>1</load-on-startup>
</servlet>

    (2)通过web.xml中DispatcherServlet的init-param来配置

<servlet>
  <!-- springmvc的核心是dispatcherServlet他负责控制整个页面的请求路径 -->
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-servlet.xml</param-value>
    </init-param>
  <!-- load-on-startup:表示容器启动时初始化该servlet; -->
  <load-on-startup>1</load-on-startup>
</servlet>

  3.DispatcherServlet的作用

未完待续

ps :参考https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web.html#mvc-servlet,

   https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web.html#mvc-container-config

   http://www.iigrowing.cn/spring_pei_zhi_wen_jian_location_de_ji_zhong_she_zhi_fang_fa.html。

时间: 2024-08-09 00:59:06

springmvc之DispatcherServlet的相关文章

【转】SpringMVC中DispatcherServlet配置中url-pattern 配置/*和/的区别

原文地址:http://m.blog.csdn.net/blog/liuxiao723846/43733287 在使用springmvc时,都会在web.xml中配置一个dispatchservlet,如下: <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- Spring

初识Spring-MVC之DispatcherServlet详解

Spring-MVC是一种基于请求启动的WEB框架,并且使用了前端控制器的设计模式,所有满足[WEB-INF/web.xml]文件中的[url-pattern]的匹配条件的请求,这些满足的请求都会交给这个前端控制器.而这个前端控制器就是[DispatcherServlet],然后再由这个前端控制器转交给满足URL匹配的页面控制器. 这个前端控制器就是提供一个统一的访问点, 一.Spring-MVC的一个请求的流程图: 二.DispatcherServlet的功能:从上图可以清楚的看到Dispat

SpringMVC中DispatcherServlet中 / 和 /* 的区别

<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value&g

springmvc的DispatcherServlet拦截以及访问静态资源html、js、css 404问题

之前一直使用*.do来做的,但是绝的*.do很丑,于是就改用“/”来配置: 1 2 3 4 5 6 7 8 9 10 <servlet>      <servlet-name>dispatcherServlet</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>      <load-on-s

SpringMVC之DispatcherServlet类图

DispatcherServlet类图 在IntelliJ IDEA 中打开其源码,然后右键查看Diagrams,工具会自动生成其类图. 可是直观的看出,DispatcherServlet本质上是Servlet. 原文地址:https://www.cnblogs.com/shoshana-kong/p/9050873.html

SpringMVC的DispatcherServlet加载过程

首先在web.xml中配置容器启动监听器,这样在容器启动后Spring会初始化一个ServletContext 原文地址:https://www.cnblogs.com/panning/p/9781790.html

SpringMVC源码剖析(二)- DispatcherServlet的前世今生

上一篇文章<SpringMVC源码剖析(一)- 从抽象和接口说起>中,我介绍了一次典型的SpringMVC请求处理过程中,相继粉墨登场的各种核心类和接口.我刻意忽略了源码中的处理细节,只列出最简单的类甚至是接口类,目的就是让大家先从最高层次的抽象意义上来审视SpringMVC这个框架:我也刻意将SpringMVC和Struts2做对比,目的是让大家看到,SpringMVC究竟吸取了Sturts2设计思想中的哪些精华,又弥补了它的哪些遗憾. DispatcherServlet作为SpringMV

SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

本文是专栏文章(SpringMVC深度探险)系列的文章之一,博客地址为:http://downpour.iteye.com/blog/1341459. 在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 SpringMVC定义了一系列组件(接口)与所有的处理单元对应起来 SpringMVC由DispatcherServlet贯穿始终,并将所有的组件串联起来

SpringMVC深入探究(1)——DispatcherServlet与初始化主线

在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 SpringMVC定义了一系列组件(接口)与所有的处理单元对应起来 SpringMVC由DispatcherServlet贯穿始终,并将所有的组件串联起来 在整个过程中,组件和DispatcherServlet总是维持着一个相互支撑的关系: DispatcherServlet —— 串联起整个逻辑主线,是整