Spring Web MVC核心架构图:

核心架构图流程如下:

1.首先用户发送请求------->DispatcherServlet(前端控制器),前端控制器收到请求后自己不进行处理,而是委托给其他解析器处理,定位好似全称的流程控制

2.DispatcherServlet(前端控制器)-------->HandlerMapping(映射处理器),HandlerMapping会把请求映射为HandlerExecutionChain对象,并返回给DispatcherServlet

3.DispatcherServlet----->HandlerAdapter(处理适配器),HandlerAdapter(处理适配器)将会把处理器包装为适配器,从而适配多种类型的处理器

4.HandlerAdapter------->Controller,HandlerAdapter会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象

5.ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

、  View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

具体实现:

1.首先在Web.xml中配置DispatcherServlet即前端控制器

配置完成后,我们已经将请求交给了Dispatcher处理,Dispatcher会默认加载/WEB-INF/[配置的Dispatcher名字]-servlet.xml配置文件

2.在dispatcher-servlet.xml中配置映射处理器(HandlerMapping)、映射适配器(HandlerAdapter)

如图中注释所示:

处理映射器

BeanNameUrlHandlerMapping表示将请求的UrlBean的名字(id)进行映射,如Url为xxx/hello.do,则Spring中必须有一个名字(id)为"/hello.do"的Bean(具体配置在下面)

处理适配器

所有实现了org.springframework.web.servlet.mvc.Controller接口的类都可以作为SpringWEBMVC的处理器,它会把处理映射器(HanderMapping)包装的适配器与处理器进行匹配,方式就是上面述的请求的URL和Bean的ID

3.在dispatcher-servlet.xml中配置ViewResolver(视图解析器)

如图中注释所示:

视图解析器会将设置的视图名与前缀和后缀进行拼接,如:视图名为hello,则该jsp视图页面的存放应该为/WEB-INF/hello.jsp

3.编写处理器部分的代码并在dispatcher-servlet.xml中配置Controller

处理器必须实现org.springframework.web.servlet.mvc.Controller接口

public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能处理方法,实现相应的功能处理,比如收集参数、验证参数、绑定参数到命令对象、将命令对象传入业务对象进行业务处理、最后返回ModelAndView对象;

ModelAndView:包含了视图要实现的模型数据和逻辑视图名;"mv.addObject("messager", "HelloWorld");

"表示添加模型数据,此处可以是任意POJO对象;"mv.setViewName("success");"表示设置逻辑视图名为"success",视图解析器会将其解析为具体的视图,如前边的视图解析器InternalResourceViewResolver会将其解析为"WEB-INF/success.jsp"。

在dispatcher-servlet.xml中配置Controller

如上图注释和处理映射器部分解释所示

BeanNameUrlHandlerMapping表示将请求的UrlBean的名字(id)进行映射,此时本人在Index.jsp的表单中请求的地址是LoginServlet.do,所以bean的名字(id)必须为/LoginServlet.do

4.index.jsp/success.jsp页面

整个运行流畅

注:本人根据http://jinnianshilongnian.iteye.com/blog/1594806整理而出

整理SpringMVC的更多相关文章

  1. SpringMVC请求参数接收总结(一)

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  2. 2.5万字长文简单总结SpringMVC请求参数接收

    这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...

  3. <mvc:default-servlet-handler/>导致SimpleUrlHandlerMapping失效

    整理springmvc的demo的时候遇到一件奇葩事情,本来就是想简单演示一下SimpleUrlHandlerMapping的用法就完活.结果写好demo怎么都无法进行映射,就好像根本就没有创建Sim ...

  4. 关于springMVC中component-scan的问题以及springmvc.xml整理

    关于springMVC中component-scan的问题以及springmvc.xml整理 一.component-scan问题和解决办法         最近在学习使用springMVC+myba ...

  5. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  6. 关于springmvc中常用的注解,自己也整理一下

    1.@Controller 在springMVC中@controller主要用在控制层的类上,之前只知道用注解开发的时候必须加一个@controller ,今天看了别的大佬整理的才知道为什么这么用,控 ...

  7. myBatis+Spring+SpringMVC框架面试题整理

    myBatis+Spring+SpringMVC框架面试题整理(一) 2018年09月06日 13:36:01 新新许愿树 阅读数 14034更多 分类专栏: SSM   版权声明:本文为博主原创文章 ...

  8. Spring SpringMVC SpringBoot SpringCloud 注解整理大全

    Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...

  9. springmvc学习资料整理

    springmvc接口开发返回XML/JSON数据 1.SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上):http: ...

随机推荐

  1. React 轮播图实现

    接到项目, 用react和material-ui实现轮播图. 搜索了一些方法参考, 不论语言/框架的使用,大体上分为两种思路 超宽列表实现法 在原生JS或者JQuery中,轮播图的实现一般是这样子的 ...

  2. 软件测试为什么需要学习Linux的知识?Linux学到什么程度?-log5

    ​软件测试为什么需要学习Linux的知识?学到什么程度?-log5 Dotest软件测试学堂-董浩 公司目前90%的服务器操作系统不是Windows,而是Linux(RedHat.Debian.Cen ...

  3. Python学习笔记-SQLSERVER的大批量导入以及日常操作(比executemany快3倍)

    环境 : python3.6 / win10 / vs2017 / sqlserver2017 一.需要安装的包pymssql pip install pymssql 二.pymssql模块的介绍 p ...

  4. 【译】索引进阶(七):SQL SERVER中的过滤索引

    原文链接:传送门. To be continued...

  5. mysql性能优化分析 --- 上篇

    概要 之前看过<高性能mysql>对mysql数据库有了系统化的理解,虽然没能达到精通,但有了概念,遇到问题时会有逻辑条理的分析; 问题 问题:公司xxx页面调用某个接口时,loading ...

  6. Cardinality

    Cardinality: 优化器在计算成本的时候,需要从统计信息中取得数据,然后去估计每一步操作所涉及的行数,叫做Cardinality. 比如,一张表T有1000行数据,列COL1上没有直方图,没有 ...

  7. Shell学习笔记(二)

    if 语句 最简单的用法就是只使用 if 语句,它的语法格式为: if condition then statement(s) fi condition是判断条件,如果 condition 成立(返回 ...

  8. php递归实现一维数组转为指定树状结构 --- 省市区处理

    ### 这两天脑壳痛,一时短路,想不到准备利用递归实现这个需求,最后还是要请教同事,回来自己在实现了一遍,并记录下来 ### 原数据: // { // 广东省: { // 广州市: [ // &quo ...

  9. lr 中cookie的解释与用法

    Loadrunner 中 cookie 解释与用法loadrunner 中与 cookie 处理相关的常用函数如下: web_add_cookie(): 添加新的 cookie 或者修改已经存在的 c ...

  10. 《剑指offer》和为S的两个数字

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结: