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. Java读取一个文本文件拼接成一个字符串(readFileToString)

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  2. 2018-2019-2 20165231王杨鸿永《网络对抗》Exp1 PC平台逆向破解

    实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...

  3. Django-F,Q查询,Templatetags,session,中间件

    内容总览1.ORM的多对多的使用 1>语法与实例   2>聚合与分组   3>F与Q查询   4>事务2.模板之自定义 1>初始化 2>filter 3>si ...

  4. 【转】Beginning Game Programming v2.0

    Beginning Game Programming v2.0 Last Updated 8/19/18 Greetings everyone, welcome to the ground up re ...

  5. Selenium-WebDriver框架常用基本操作

    1.基础元素定位的八种方法 WebDriver driver = new ChromeDriver(); WebElement element = new WebElement(); 1.1 By.i ...

  6. 洛谷P5284 [十二省联考2019]字符串问题 [后缀树]

    传送门 思路 设\(dp_i\)表示以\(i\)结尾的\(A\)串,能达到的最长长度. 然后发现这显然可以\(i\)往自己控制的\(k\)连边,\(k\)往能匹配的\(j\)连边,就是个最长路,只要建 ...

  7. (转载)配置 Linux 操作系统的 JDK

    系统Ubuntu,下载jdk-9.0.1 1,切换到root   ,创建文件夹 xxxx@ubuntu:~$ sudo su root@ubuntu:~# mkdir /usr/java 2,找到下载 ...

  8. 2018-2019-2 20165328《网络对抗技术》Exp0 Kali安装week1

    1.下载Kaili安装资源并解压安装到虚拟机: 2.修改默认字体与共享文件设置: 3.更新软件源与下载中文输入法: 4.安装完成.

  9. 合并多个对象并且去重的2种写法(es6)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. CocosCraetor中图像资源Texture和SpriteFrame的区别

    Texture是保存在GPU缓冲中的一张纹理.是由一张图片创建获得的. SpriteFrame是Texture+Rect,根据一张纹理材质来剪切获得. SpriteFrame是Texture+Rect ...