【SpringMVC】SpringMVC的工作流程详解

1、SpringMVC简介

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

2、SpringMVC的核心

SpringMVC的核心是 DispatcherServlet 。正如它的名字一样,它是一个Servlet,它的顶层实现了Servlet接口。DispatcherServlet 在SpringMVC框架中起着至关重要的作用:

  • 接收请求,转发给相应的组件处理,相当于转发器
  • 响应结果

DispatcherServlet 在SpringMVC 中扮演了中央处理器的角色,负责根据用户的请求调用相关组件进行处理,有了DispatcherServlet 就减少了其它组件之间的耦合度。
顺便记录一下它的配置:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <!-- 如果不设置init-param标签,则必须在/WEB-INF/下创建xxx-servlet.xml文件,其中xxx是servlet-name中配置的名称。 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springmvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

配置 DispatcherServlet 之前必须配置 ContextLoaderListener 监听器。它的作用是在启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

3、SpringMVC的组件

  • DispatcherServlet: 前端控制器,是SpringMVC框架的核心组件,负责接收用户发来的请求,并且调用相应的组件处理并响应结果,可降低组件之间的耦合性,提高每个组件的扩展性。
  • HandlerMapping: 处理器映射器,负责根据前端的请求路径查找与之对应的Handler(即Controller),映射方式有注解映射、配置文件映射和接口映射。
  • HandlerAdapter: 处理器适配器,负责适配执行Handler(适配器模式)
  • Handler: 处理器,即处理请求的业务逻辑,就是我们平常所编写的 Controller
  • ViewResolver: 视图解析器,把返回的逻辑视图解析成真正的视图
  • View: 即视图页面,由开发人员编写,不限于JSP(FreeMarker等)

4、SpringMVC的工作流程

在这里插入图片描述

该图片摘选自 https://blog.csdn.net/wdehxiang/article/details/77619512
  • 用户发送请求,由 DispatcherServlet 接收。
  • DispatcherServlet 收到请求调用 HanlderMapping 查询与请求相对应的处理器。
  • HanlderMapping 查询到结果返回 HandlerExecutionChain,其中包含 HandlerIntercepter 处理器拦截器和响应的Handler对象。
  • DispatcherServlet 获取到 Handler 调用HandlerAdapter 去执行Handler。
  • HandlerAdapter 调用执行对应的Handler对象。
  • Handler 处理器处理完毕后返回一个 ModelAndView 。
  • HandlerAdapter 将处理结果返回给 DispatcherServlet。
  • DispatcherServlet 调用 ViewResolver 视图解析器进行视图解析。
  • ViewResolver 解析完毕返回一个 View 视图。
  • DispatcherServlet 渲染视图,并将model数据转化为Response响应。
  • DispatcherServlet 响应用户

5、SpringMVC 与 Struts2 的区别

  • SpringMVC 的入口是一个servlet即前端控制器(DispaterchServlet),而Struts2 入口是一个filter过滤器(StrutsPrepareAndExecuteFilter)。

  • SpringMVC 是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

  • Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据,SpringMVC 通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值