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>
            <!-- 下面代码会加载src下的springmvc-servlet.xml。 -->
            <param-value>classpath:springmvc-servlet.xml</param-value>
            <!-- 下面代码会加载WEB-INF下的springmvc-servlet.xml-->
<!--             <param-value>/WEB-INF/springmvc-servlet.xml</param-value> -->
        </init-param>
<!--         load-on-startup:表示容器启动时初始化该servlet; -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    classpath:只会到你的class路径中查找找文件; 
    classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 

  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。

原文地址:https://www.cnblogs.com/Y-zhiwei/p/7724730.html