zoukankan      html  css  js  c++  java
  • SpringMvc执行流程

    SpringMvc运行原理:

    SpringMvc运行原理图:

    列如请求:http://localhost:8080/springmvc/hello

    1、前端页面发送请求到DispatcherServlet(前端控制器):

    在web.xml中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>classpath:spring-mvc.xml</param-value>
          </init-param>
      </servlet>
     <servlet-mapping>
         <servlet-name>springmvc</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>

    2、DispatcherServlet根据加载的springmvc.xml文件,查找并发送请求到HandlerMapping:

         <!-- 扫描@Controller的包扫描 -->
            <context:component-scan base-package="com.ypf.*"></context:component-scan>
            <!-- 配置注解驱动 该配置会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,
              这是Spring MVC为@Controller分发请求所必需的--> <mvc:annotation-driven/>
    <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>

     3、HandlerMapping会根据请求查找com.ypf.*包下所有被扫描到的Controller,返回处理器执行链(一个或多个拦截器)和查询到的Handler(在多个Controller中根据请求路径匹配到的Controller)到前端控制器(DispatcherServlet)

        <!-- 扫描@Controller的包扫描 -->
            <context:component-scan base-package="com.ypf.*"></context:component-scan>
            <!-- 配置注解驱动 该配置会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的-->
            <mvc:annotation-driven/> 
            <!-- 配置视图解析器 -->
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/"></property>
                <property name="suffix" value=".jsp"></property>
            </bean>

    " /springmvc "就是当前项目,然后查找路径中的" /hello "匹配到Controller,

    cpackage com.ypf.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class HelloController {
        
        @RequestMapping("/hello")
        public String hello() {
            return "hello";
        }
    }

    4、DispatcherServlet发送请求到HandlerAdapter(处理器适配器)请求执行查询到的Handler(即匹配到的Controller)

    5、HandlerAdapter(处理器适配器)执行Handler(执行HelloController),代码如上图;

    6、执行完Handler,返回ModelAndView(返回“hello”字符串)到HandlerAdapter;

    7、HandlerAdapter(处理器适配器)将ModelAndView返回给DispatcherServlet(前端控制器);

    8、DispatcherServlet发送得到的字符串到ViewResolver(视图解析器),请求解析视图;

    <!-- 扫描@Controller的包扫描 -->
            <context:component-scan base-package="com.ypf.*"></context:component-scan>
            <!-- 配置注解驱动 该配置会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的-->
            <mvc:annotation-driven/> 
            <!-- 配置视图解析器 -->
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/"></property>
                <property name="suffix" value=".jsp"></property>
            </bean>

     9、ViewResolver(视图解析器)将接收到的字符串"hello",拼接上prefix(前缀)与suffix(后缀),即“ /WEB-INF/hello.jsp”,在/WEB-INF下找到hello.jsp页面,返回到DispatcherServlet(前端控制器);

    10、DispatcherServlet(前端控制器)将视图响应给用户。

    在整个过程中,前端控制器起到用于接收请求,响应结果,相当于转发器,中央处理器,减小向组件间的耦合度。

  • 相关阅读:
    在dubbo工程中,使用druid监控
    docker在windows下上传文件到容器
    Docker容器Tomcat部署war包
    You are using the runtime-only build of Vue where the template compiler is not available. Either pre
    Vue项目用了脚手架vue-cli3.0,会报错You are using the runtime-only build of Vue where the template compiler is not available
    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    Github上传代码菜鸟超详细教程
    23种设计模式
    java面试
    latex输入希腊字母
  • 原文地址:https://www.cnblogs.com/YpfBolg/p/10837990.html
Copyright © 2011-2022 走看看