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。

  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/Y-zhiwei/p/7724730.html
Copyright © 2011-2022 走看看