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。

  • 相关阅读:
    利用ganymed-ssh2远程执行其它Linux机器上的shell命令
    ZooKeeper 笔记(4) 实战应用之【消除单点故障】
    ZooKeeper 笔记(3) 实战应用之【统一配置管理】
    ZooKeeper 笔记(2) 监听数据变化
    ZooKeeper 笔记(1) 安装部署及hello world
    intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理
    hadoop: hive 1.2.0 在mac机上的安装与配置
    mac 下卸载mysql的方法
    mac OS X Yosemite 上编译hadoop 2.6.0/2.7.0及TEZ 0.5.2/0.7.0 注意事项
    hadoop: hbase1.0.1.1 伪分布安装
  • 原文地址:https://www.cnblogs.com/Y-zhiwei/p/7724730.html
Copyright © 2011-2022 走看看