SpringMVC执行原理你都不知道?

前言

代码没用注解所以写的很古板 拿来讲原理 大佬勿喷

一、SpringMVC到底是怎么执行的呢?

配图:
SpringMVC执行原理你都不知道?

  1. 用户进入界面发送请求被前端控制器DispatcherServlet(SpringMVC的核心)拦截。

<!-- web.xml下   匹配所有请求: /(不包括jsp)-->
    <!--    匹配所有请求: /*(包括jsp)-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  1. DispatcherServlet调用HandlerMapping处理映射器。HandlerMapping会根据请求的url查找具体的Handler
<!--Handler  Springmvc-servlet.xml下-->
<bean id="/hello" class="com.openlab.controller.HelloController" />

3.Handler根据URL查找控制器,如示例的:hello 去查找HelloController
4. Handler将解析后的信息传递给DispatcherServlet
5. HandlerAdaper表示处理器适配器,按照特定的规则区执行 Handler,Handler让具体的controller执行

package com.openlab.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
//    @FunctionalInterface  函数式接口   Controller中的方法
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //ModelAndView  模型和试图
        ModelAndView mv = new ModelAndView();
//        调用业务层
//        封装对象,放在ModelAndView中 model
        mv.addObject("msg","hellowSpringMVC");
//        封装跳转的视图 放在ModelAndView中
        mv.setViewName("hello");  //WEB-INF/jsp/hello.jsp
        return mv;
    }
}
  1. Handler的具体执行信息返回给HandlerAdapter处理器适配器。如:ModelAndView
  2. DispatcherServlet会调用视图解析器ViewResolver
	<!--    视图解析器DisplatcherServlet 给他的ModelAbdView-->
<!--    获取了ModeAndeView是数据-->
<!--    解析ModeAndView视图的名字-->
<!--    拼接视图的名字找到相应的视图  hello-->
<!--    将数据渲染到视图上-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver" >
<!--        前缀-->
        <property name="prefix" value="/WEB-INF/jsp/" />
<!--        后缀-->
        <property name="suffix" value=".jsp" />
    </bean>
  1. 视图解析器ViewResolver将解析的逻辑视图传给DispatcherServlet
  2. DispatcherServlet根据解析的视图结构,调用具体视图。
  3. 最终返回给用户 。
上一篇:第一个springMVC程序


下一篇:5.2 springMVC常识!