SpringMVC03 执行原理

1、执行流程

  • 一个请求进来之后,前置控制器 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-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        // 匹配所有的请求,不包括jsp页面,/*会包括jsp页面
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • DispatcherServlet 拦截请求后会调用处理器映射器 HandlerMapping,HandlerMapping 根据请求的 url 查找Handle,比如请求的url:http://127.0.0.1:8080/hello ,根据 /hello 查找映射 Handler,并返回一个执行链 HandlerExecutionChain 给DispatcherServlet
    <!-- 处理器映射器 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
        <!-- 具体的Handler, 不加斜杠会报404 -->
    <bean id="/hello" class="com.study.controller.HelloController"/>
  • DispatcherServlet 会调用处理器适配器 HandlerAdapter,HandlerAdapter 按照特定的规则找到Handler,Handler 让具体的Controller 执行,最终返回 ModelAndView 给 HandlerAdapter,HandlerAdapter 再返回给 DispatcherServlet
    <!-- 适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","hello mvc!");
        modelAndView.setViewName("hello");
        return modelAndView;
    }
}
  • DispatcherServlet 调用视图解析器 ViewResolver 解析ModelAndView,说白了就是解析视图名,ViewResolver 解析拼接好之后,返回给DispatcherServlet
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
  • DispatcherServlet 根据视图解析器解析的视图结果,调用具体的视图,最终返回给用户

2、执行图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值