深入理解SpringMVC执行流程

首先了解MVC是什么

  • mvc是模型(module)、视图(view)、控制器(controller)的简写,是一种软件设计规范
    是将业务逻辑、数据、显示分离开来组织代码
  • mvc主要是作用是降低了视图与业务逻辑之间的双向耦合
  • mvc不是一种设计模式,mvc是一种架构模式

module(模型):数据模型,提供要展示的数据,包含数据和行为

view(视图):负责进行模型的展示,一般就是用户看到的界面

controller(控制器):接收用户的请求,委托给模型进行处理,处理完成以后把返回的数据模型返回给视图,由视图负责展示,控制器承担一个调度员你的责任

spring mvc的特点

  • 轻量级,简单易学
  • 高效、基于请求响应的mvc框架
  • 与Spring兼容性好,无缝结合
  • 约定优于配置
  • 功能强大:RESTful、数据验证、格式化、本地化、主题等
  • 简洁灵活

SpringMVC是围绕DispatcherServlet【调度servlet】来设计的
dispatcherservlet的作用就是将请求分发给不同的处理器

重点理解SpringMVC的执行流程
深入理解SpringMVC执行流程_第1张图片

1.用户提交请求给页面(提交给dispatcherservlet)
实际上完成的操作是提交了要访问那个控制器
url分为三部分
服务器域名
部署在服务器上的web站点
控制器
2.HandlerMapping为处理器映射。dispatcherservlet调用HandlerMapping寻找要使用哪个handler
3.HandlerExcution表示具体的Handler,其主要作用是根据url寻找对应的控制器
4.HandlerExcution将解析后的信息传递给dispatcherservlet,如解析控制器映射

<!--处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

<!--BeanNameUrlHandlerMapping:创建一个bean去寻找对应的解析器-->
<bean id="/hello" class="com.superman.controller.HelloController"/>

5.HandAdapter表示处理器适配器,按照特定的规则去寻找handle
6.handler去执行具体的controller

<!--处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>


<!--BeanNameUrlHandlerMapping:创建一个bean去寻找对应的解析器-->
<beclass="com.superman.controller.HelloControan id="/hello" ller"/>

7.controller将具体的执行信息返回给handleradapter,如moduleandeview

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();

        //业务代码
        String result="hello spring";
        mv.addObject("msg",result);

        //视图跳转
        mv.setViewName("test");

        return mv;
    }
}

8.handleradapter将视图逻辑名或模型传递给dispatcherservlet
9.dispatcherservlet调用视图解析器(viewresolver)来解析handleradapte传递的逻辑视图名
10.视图解析器将解析的逻辑视图名传给dispatcherservlet,然后dispatcherservlet去调用这个view

<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
    <!--配置前缀-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--配置后缀-->
    <property name="suffix" value=".jsp"/>
</bean>

如果遇到代码没有问题出现404错误,需要检察环境,检查打包过程中是否有lib文件,没有的话需要手动创建并且导入必要的依赖

你可能感兴趣的:(JAVA笔记,spring,java,mvc,servlet,jsp)