精华内容
下载资源
问答
  • SpringMVC工作原理

    2018-08-14 09:43:10
    阅读本篇文章有助于快速了解MVC框架实现原理,帮助新人熟悉开发环境。
  • SpringMVC工作原理详解

    2021-02-28 06:28:23
    先来看一下什么是 MVC 模式MVC 是一种设计模式.MVC 的原理图如下:SpringMVC 简单介绍SpringMVC 框架是以请求为驱动,围绕 Servlet 设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。...

    先来看一下什么是 MVC 模式

    MVC 是一种设计模式.

    MVC 的原理图如下:

    0ad463012d157a30541bf14477f0cbd4.png

    SpringMVC 简单介绍

    SpringMVC 框架是以请求为驱动,围绕 Servlet 设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是 DispatcherServlet,它是一个 Servlet,顶层是实现的Servlet接口。

    SpringMVC 使用

    需要在 web.xml 中配置 DispatcherServlet 。并且需要配置 Spring 监听器ContextLoaderListener

    org.springframework.web.context.ContextLoaderListener

    springmvc

    org.springframework.web.servlet.DispatcherServlet

    contextConfigLocation

    classpath:spring/springmvc-servlet.xml

    1

    springmvc

    /

    SpringMVC 工作原理(重要)

    简单来说:

    客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler-> HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象->前端控制器 DispatcherServlet 渲染数据(Moder)->将得到视图对象返回给用户

    如下图所示:

    4dd2cbd6fb659431eeff9a406ac7ced6.png

    上图的一个笔误的小问题:Spring MVC 的入口函数也就是前端控制器 DispatcherServlet 的作用是接收请求,响应结果。

    流程说明(重要):

    (1)客户端(浏览器)发送请求,直接请求到 DispatcherServlet。

    (2)DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。

    (3)解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。

    (4)HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。

    (5)处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。

    (6)ViewResolver 会根据逻辑 View 查找实际的 View。

    (7)DispaterServlet 把返回的 Model 传给 View(视图渲染)。

    (8)把 View 返回给请求者(浏览器)

    SpringMVC 重要组件说明

    1、前端控制器DispatcherServlet(不需要工程师开发),由框架提供(重要)

    作用:Spring MVC 的入口函数。接收请求,响应结果,相当于转发器,中央处理器。有了 DispatcherServlet 减少了其它组件之间的耦合度。用户请求到达前端控制器,它就相当于mvc模式中的c,DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。

    2、处理器映射器HandlerMapping(不需要工程师开发),由框架提供

    作用:根据请求的url查找Handler。HandlerMapping负责根据用户请求找到Handler即处理器(Controller),SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

    3、处理器适配器HandlerAdapter

    作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

    4、处理器Handler(需要工程师开发)

    注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。 由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。

    5、视图解析器View resolver(不需要工程师开发),由框架提供

    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view) View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。

    6、视图View(需要工程师开发)

    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

    注意:处理器Handler(也就是我们平常说的Controller控制器)以及视图层view都是需要我们自己手动开发的。其他的一些组件比如:前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter等等都是框架提供给我们的,不需要自己手动开发。

    DispatcherServlet详细解析

    首先看下源码:

    package org.springframework.web.servlet;

    @SuppressWarnings("serial")

    public class DispatcherServlet extends FrameworkServlet {

    public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";

    public static final String LOCALE_RESOLVER_BEAN_NAME = "localeResolver";

    public static final String THEME_RESOLVER_BEAN_NAME = "themeResolver";

    public static final String HANDLER_MAPPING_BEAN_NAME = "handlerMapping";

    public static final String HANDLER_ADAPTER_BEAN_NAME = "handlerAdapter";

    public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME = "handlerExceptionResolver";

    public static final String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME = "viewNameTranslator";

    public static final String VIEW_RESOLVER_BEAN_NAME = "viewResolver";

    public static final String FLASH_MAP_MANAGER_BEAN_NAME = "flashMapManager";

    public static final String WEB_APPLICATION_CONTEXT_ATTRIBUTE = DispatcherServlet.class.getName() + ".CONTEXT";

    public static final String LOCALE_RESOLVER_ATTRIBUTE = DispatcherServlet.class.getName() + ".LOCALE_RESOLVER";

    public static final String THEME_RESOLVER_ATTRIBUTE = DispatcherServlet.class.getName() + ".THEME_RESOLVER";

    public static final String THEME_SOURCE_ATTRIBUTE = DispatcherServlet.class.getName() + ".THEME_SOURCE";

    public static final String INPUT_FLASH_MAP_ATTRIBUTE = DispatcherServlet.class.getName() + ".INPUT_FLASH_MAP";

    public static final String OUTPUT_FLASH_MAP_ATTRIBUTE = DispatcherServlet.class.getName() + ".OUTPUT_FLASH_MAP";

    public static final String FLASH_MAP_MANAGER_ATTRIBUTE = DispatcherServlet.class.getName() + ".FLASH_MAP_MANAGER";

    public static final String EXCEPTION_ATTRIBUTE = DispatcherServlet.class.getName() + ".EXCEPTION";

    public static final String PAGE_NOT_FOUND_LOG_CATEGORY = "org.springframework.web.servlet.PageNotFound";

    private static final String DEFAULT_STRATEGIES_PATH = "DispatcherServlet.properties";

    protected static final Log pageNotFoundLogger = LogFactory.getLog(PAGE_NOT_FOUND_LOG_CATEGORY);

    private static final Properties defaultStrategies;

    static {

    try {

    ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, DispatcherServlet.class);

    defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);

    }

    catch (IOException ex) {

    throw new IllegalStateException("Could not load 'DispatcherServlet.properties': " + ex.getMessage());

    }

    }

    /** Detect all HandlerMappings or just expect "handlerMapping" bean? */

    private boolean detectAllHandlerMappings = true;

    /** Detect all HandlerAdapters or just expect "handlerAdapter" bean? */

    private boolean detectAllHandlerAdapters = true;

    /** Detect all HandlerExceptionResolvers or just expect "handlerExceptionResolver" bean? */

    private boolean detectAllHandlerExceptionResolvers = true;

    /** Detect all ViewResolvers or just expect "viewResolver" bean? */

    private boolean detectAllViewResolvers = true;

    /** Throw a NoHandlerFoundException if no Handler was found to process this request? **/

    private boolean throwExceptionIfNoHandlerFound = false;

    /** Perform cleanup of request attributes after include request? */

    private boolean cleanupAfterInclude = true;

    /** MultipartResolver used by this servlet */

    private MultipartResolver multipartResolver;

    /** LocaleResolver used by this servlet */

    private LocaleResolver localeResolver;

    /** ThemeResolver used by this servlet */

    private ThemeResolver themeResolver;

    /** List of HandlerMappings used by this servlet */

    private List handlerMappings;

    /** List of HandlerAdapters used by this servlet */

    private List handlerAdapters;

    /** List of HandlerExceptionResolvers used by this servlet */

    private List handlerExceptionResolvers;

    /** RequestToViewNameTranslator used by this servlet */

    private RequestToViewNameTranslator viewNameTranslator;

    private FlashMapManager flashMapManager;

    /** List of ViewResolvers used by this servlet */

    private List viewResolvers;

    public DispatcherServlet() {

    super();

    }

    public DispatcherServlet(WebApplicationContext webApplicationContext) {

    super(webApplicationContext);

    }

    @Override

    protected void onRefresh(ApplicationContext context) {

    initStrategies(context);

    }

    protected void initStrategies(ApplicationContext context) {

    initMultipartResolver(context);

    initLocaleResolver(context);

    initThemeResolver(context);

    initHandlerMappings(context);

    initHandlerAdapters(context);

    initHandlerExceptionResolvers(context);

    initRequestToViewNameTranslator(context);

    initViewResolvers(context);

    initFlashMapManager(context);

    }

    }

    DispatcherServlet类中的属性beans:

    HandlerMapping:用于handlers映射请求和一系列的对于拦截器的前处理和后处理,大部分用@Controller注解。

    HandlerAdapter:帮助DispatcherServlet处理映射请求处理程序的适配器,而不用考虑实际调用的是 哪个处理程序。- - -

    ViewResolver:根据实际配置解析实际的View类型。

    ThemeResolver:解决Web应用程序可以使用的主题,例如提供个性化布局。

    MultipartResolver:解析多部分请求,以支持从HTML表单上传文件。-

    FlashMapManager:存储并检索可用于将一个请求属性传递到另一个请求的input和output的FlashMap,通常用于重定向。

    在Web MVC框架中,每个DispatcherServlet都拥自己的WebApplicationContext,它继承了ApplicationContext。WebApplicationContext包含了其上下文和Servlet实例之间共享的所有的基础框架beans。

    HandlerMapping

    c9cc904bc771e8eeb2c31a607f4e5974.png

    HandlerMapping接口处理请求的映射HandlerMapping接口的实现类:

    SimpleUrlHandlerMapping类通过配置文件把URL映射到Controller类。

    DefaultAnnotationHandlerMapping类通过注解把URL映射到Controller类。

    HandlerAdapter

    50409d700b268466fdbafd565cf5d295.png

    HandlerAdapter接口-处理请求映射

    AnnotationMethodHandlerAdapter:通过注解,把请求URL映射到Controller类的方法上。

    HandlerExceptionResolver

    8ec290d1080d5dfbbdabc9a2dd9400be.png

    HandlerExceptionResolver接口-异常处理接口

    SimpleMappingExceptionResolver通过配置文件进行异常处理。

    AnnotationMethodHandlerExceptionResolver:通过注解进行异常处理。

    ViewResolver

    cb370f1509bb84c95efd2e66c5d523f4.png

    ViewResolver接口解析View视图。

    UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理。

    展开全文
  • SpringMvc工作原理学习总结

    万次阅读 多人点赞 2020-11-07 10:42:47
    SpringMvc工作原理 了解SpringMvc之前先看看Mvc的工作原理 1、MVC工作原理 M:Model(完成业务逻辑 Service/dao/entity/) V:View(完成界面渲染 jsp/html) C:Controller(控制器->类似于CPU 接受请求->调用M...

    SpringMvc工作原理

    了解SpringMvc之前先看看Mvc的工作原理

    1、MVC工作原理

    1. M:Model(完成业务逻辑 Service/dao/entity/)

    2. V:View(完成界面渲染 jsp/html)

    3. C:Controller(控制器->类似于CPU 接受请求->调用M->返回V)

    4. MVC工作原理图

      image-20201107103726612

      2、SpringMvc工作原理

      1. Spring和SpringMvc的关系:

        SpringMVC是一个MVC的开源框架,SpringMVC是Spring的一个后续产品,其实就是Spring在原有基础上,又提供了web应用的MVC模块,可以简单的把SpringMVC理解为是spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说SpringMVC和Spring无缝集成,其实SpringMVC就是Spring的一个子模块,所以根本不需要同spring进行整合。

      2. SpringMVC中的组件:

        • 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。

          处理器映射器(HandlerMapping):根据URL去查找处理器

          处理器(Handler):(需要程序员去写代码处理逻辑的)

          处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)

          视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面

      3. SpringMvc工作原理图

      4. SpringMvc工作流程

        • 第一步:用户发起请求到前端控制器(DispatcherServlet)

          第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找

          第三步:找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链(HandlerExecutionChain)

          第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)

          第五步:处理器适配器去执行Handler

          第六步:Handler执行完给处理器适配器返回ModelAndView

          第七步:处理器适配器向前端控制器返回ModelAndView

          第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析

          第九步:视图解析器像前端控制器返回View

          第十步:前端控制器对视图进行渲染

          第十一步:前端控制器向用户响应结果

    展开全文
  • 主要介绍了SpringMVC工作原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • SpringMVC工作原理的介绍

    千次阅读 2019-04-21 21:58:46
    1.原理图: 2.流程文字介绍: 1.用户向服务器发送请求,请求被Spring前端控制Servlet DispatcherServlet捕获; 2.DispatcherServlet对请求UR进行解析,得到请求资源标识符(URI)。然后根据该URI,调用...

    1.原理图:

    在这里插入图片描述

    2.流程文字介绍:

    1.用户向服务器发送请求,请求被Spring前端控制Servlet DispatcherServlet捕获;
    2.DispatcherServlet对请求UR进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
    3.DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)
    4.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
    HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
    数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
    数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
    数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
    5.Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
    6.根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
    7.ViewResolver 结合Model和View,来渲染视图
    8.将渲染结果返回给客户端。

    3.组件说明:

    在这里插入图片描述

    展开全文
  • Springmvc工作原理详解

    千次阅读 2019-09-17 08:53:49
    0)先上一springmvc工作原理图张图 1)springmvc工作流程 用户发送请求至前端控制器DispatcherServlet DispatcherServlet收到请求调用HandlerMapping处理器映射器 处理器映射器找到具体的处理器...

    关于三层架构和 MVC

    我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就 是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于 三层架构设计的。
    三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:
    表现层:
    也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用 http协议请求 web 层, web 需要接收 http请求,完成 http 响应。 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
    表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。 表现层的设计一般都使用 MVC 模型。(MVC是表现层的设计模型,和其他层没有关系)
    业务层:
    也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。 web 层依赖业 务层,但是业务层不依赖 web 层。业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的, 事务应该放到业务层来控制)
    持久层:
    也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进 行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库 中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。

    MVC 模型
    在这里插入图片描述

    MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,
    是一种用于设计创建 Web 应用程序表现层的模式。 MVC 中每个部分各司其职:
    Model(模型) :
    通常指的就是我们的数据模型。作用一般情况下用于封装数据。
    View(视图) :
    通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。
    通常视图是依据模型数据创建的。
    Controller(控制器) :
    是应用程序中处理用户交互的部分。 作用一般就是处理程序逻辑的。
    它相对于前两个不是很好理解,这里举个例子:
    例如:
    我们要保存一个用户的信息,该用户信息中包含了姓名,性别,年龄等等。
    这时候表单输入要求年龄必须是 1~100 之间的整数。姓名和性别不能为空。并且把数据填充
    到模型之中。
    此时除了 js 的校验之外,服务器端也应该有数据准确性的校验,那么校验就是控制器的该做
    的。
    当校验失败后,由控制器负责把错误页面展示给使用者。
    如果校验成功,也是控制器负责把数据填充到模型,并且调用业务层实现完整的业务需求。
    

    SpringMVC 是什么

    SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架, 属于 Spring
    FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。 Spring 框架提供了构建 Web 应用程序的全功
    能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring
    的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用), Struts2 等。
    SpringMVC 已经成为目前最主流的 MVC 框架之一, 并且随着 Spring3.0 的发布, 全面超越 Struts2,成
    为最优秀的 MVC 框架。
    它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持
    RESTful 编程风格的请求。
    
    


    0)先上一springmvc工作原理图张图
    在这里插入图片描述
    在这里插入图片描述
    1)springmvc工作流程

    1. 用户发送请求至前端控制器DispatcherServlet
    2. DispatcherServlet收到请求调用HandlerMapping处理器映射器
    3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
    4. DispatcherServlet调用HandlerAdapter处理器适配器
    5. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
    6. Controller执行完成返回ModelAndView
    7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
    8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    9. ViewReslover解析后返回具体View
    10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中) DispatcherServlet响应用户

    组件
    前端控制器-DispatcherServlet : 接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性
    处理器映射器-HandlerMapping : 根据请求的url查找Handler
    HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等
    处理器适配器-HandlerAdapter : 按照特定规则(HandlerAdapter要求的规则)去执行Handler
    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行
    处理器-Handler(需要工程师开发) : 注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
    Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
    由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。
    视图解析器View resolver : 进行视图解析,根据逻辑视图名解析成真正的视图(view)
    View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等
    视图View(需要工程师开发) : View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

    springmvc的工作机制

    在容器初始化时会建立所有url和controller的对应关系,保存到Map<url,controller>中.tomcat启动时会通知spring初始化容器(加载bean的定义信息和初始化所有单例bean),然后springmvc会遍历容器中的bean,获取每一个controller中的所有方法访问的url,然后将url和controller保存到一个Map中;

    这样就可以根据request快速定位到controller,因为最终处理request的是controller中的方法,Map中只保留了url和controller中的对应关系,所以要根据request的url进一步确认controller中的method,这一步工作的原理就是拼接controller的url(controller上@RequestMapping的值)和方法的url(method上@RequestMapping的值),与request的url进行匹配,找到匹配的那个方法;

    确定处理请求的method后,接下来的任务就是参数绑定,把request中参数绑定到方法的形式参数上,这一步是整个请求处理过程中最复杂的一个步骤。springmvc提供了两种request参数与方法形参的绑定方法:

    ① 通过注解进行绑定,@RequestParam

    ②通过参数名称进行绑定.使用注解进行绑定,我们只要在方法参数前面声明@RequestParam(“a”),就可以将request中参数a的值绑定到方法的该参数上.使用参数名称进行绑定的前提是必须要获取方法中参数的名称,Java反射只提供了获取方法的参数的类型,并没有提供获取参数名称的方法.springmvc解决这个问题的方法是用asm框架读取字节码文件,来获取方法的参数名称.asm框架是一个字节码操作框架,关于asm更多介绍可以参考它的官网.个人建议,使用注解来完成参数绑定,这样就可以省去asm框架的读取字节码的操作.

    SpringMVC 的优势

    1、清晰的角色划分:
    前端控制器(DispatcherServlet)
    请求到处理器映射(HandlerMapping)
    处理器适配器(HandlerAdapter)
    视图解析器(ViewResolver)
    处理器或页面控制器(Controller)
    验证器( Validator)
    命令对象(Command 请求参数绑定到的对象就叫命令对象)
    表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
    2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
    3、由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。
    4、和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。
    5、可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。
    6、可定制性, HandlerMapping、 ViewResolver 等能够非常简单的定制。
    7、功能强大的数据验证、格式化、绑定机制。
    8、利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。
    9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
    10、强大的 JSP 标签库,使 JSP 编写更容易。
    ………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配
    置支持等等
    

    SpringMVC 和 Struts2 的优略分析

    共同点:
    它们都是表现层框架,都是基于 MVC 模型编写的。
    它们的底层都离不开原始 ServletAPI。
    它们处理请求的机制都是一个核心控制器。
    区别:
    Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
    Spring MVC 是基于方法设计的,而 Struts2 是基于类, Struts2 每次执行都会创建一个动作类。所
    以 Spring MVC 会稍微比 Struts2 快些。
    Spring MVC 使用更加简洁,同时还支持 JSR303, 处理 ajax 的请求更方便
    (JSR303 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注
    解加在我们 JavaBean 的属性上面,就可以在需要校验的时候进行校验了。 )
    Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些,但执行效率并没有比 JSTL 提
    升,尤其是 struts2 的表单标签,远没有 html 执行效率高。
    

    好了以上就是关于SpringMvc的解释与说明!!!!!!!!!!!!1

    展开全文
  • SpringMVC 工作原理

    2021-10-21 16:01:14
    1. 客户端请求提交到DispatcherServlet 2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller 3. DispatcherServlet将请求提交到Controller 4. Controller调用业务逻辑处理后,...
  • SpringMVC工作原理及其流程

    万次阅读 多人点赞 2018-02-17 15:52:11
    本文介绍SpringMVC的基本原理,对于一个浏览器请求,SpringMVC的处理流程。 SpringMVC主要包含一下组件 DispatcherServlet-前端控制器 HandlerMapping-处理器映射 Controller-控制器 ViewResolver-视图解析器 View...
  • SpringMVC工作原理概述

    万次阅读 多人点赞 2019-01-24 16:04:55
    SpringMVC框架介绍 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 ...
  • SpringMVC工作原理工作流程

    千次阅读 2019-05-15 08:25:30
    在博客看见一编写的非常清晰的博客,对现在的注重开发层面不注重底层...SpringMVC工作原理 SpringMVC工作原理图: SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServle...
  • SpringMVC工作原理简述

    2018-08-31 16:38:26
    SpringMVC工作原理图: SpringMVC工作流程: 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的...
  • SpringMVC工作原理是什么?SpringMVC的优缺点有哪些?以前运用的时候,真的没有考虑到这些问题! 现在我们来探讨一下SpringMVC。 1.什么是SpringMVC? 答:Spring是一个模块,基于MVC的一个框架。MVC是一种设计模式...
  • springMVC工作原理

    2016-05-17 02:40:57
    SpringMVC框架介绍  1) spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以...
  • springmvc工作原理

    2019-02-20 17:39:43
    springmvc工作原理其实很简单,其主要通过dispatcherservlet核心控制器来控制前后台交互 dispatcherservlet其实质是个servlet,在web.xml配置文件里经配置,当容器启动时,会调用dispatcherservlet父类的一系列初始...
  • 适用于面试和学习
  • SpringMVC工作原理(比较详细哦)

    万次阅读 多人点赞 2019-06-05 18:05:00
    MVC的原理图: 分析: M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity) V-View 视图(做界面的展示 jsp,html……) C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面) ...
  • 一、SpringMVC框架介绍  1.1、spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。  Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制...
  • Spring源码分析我以下呢 就模拟一个请求 从代码上 简单说说 SpringMVC一个请求得流程先来个图当一个请求(request)过来,进入DispatcherServlet中,里面有个方法叫 doDispatch方法 里面包含了核心流程源码如下:然后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,356
精华内容 22,542
关键字:

springmvc的工作原理

spring 订阅