zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    spring boot banner设置关闭以及关闭特定的自动配置
    spring boot 初始及快速搭建
    spring scheduling 计划任务
    idea database 导入实体带注解
    idea mapper下的方法找不到 Invalid bound statement (not found)
    spring jwt token 认证
    spring event 事件
    FrontEnd-Basis-6th
    FrontEnd-Basis-5th
    FrontEnd-Basis-4th
  • 原文地址:https://www.cnblogs.com/Y-zhiwei/p/7724730.html
Copyright © 2011-2022 走看看