版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36697353/article/details/64444147

SpringMVC 工作流程:

流程图,截取与----》(http://blog.csdn.net/zuoluoboy/article/details/19766131):

详细图:

SpringMVC工作流程描述

1.用户向服务器发送请求时,请求被Spring 前端控制器DispatcherServlet获取,如详细图第一步

2.DispatcherServlet对请求URL进行解析(比如我们发送一个url如下的请求

http://localhost:8080/SpringMVC/hello.action),就会得到请求资源标示符(URI,相当于就是上面的hello.action )。然后根据URI,调用处理器映射器(HandlerMapping)获得该Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。

3.DispatcherServlet获取上面返回的Handler,并选择一个适合的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4.选择好合适的HandlerAdapter后就会开始执行Handler。在填充Handler的入参过程中,根据配置,Spring将帮你做一些额外的工作(我们不需要管):
EG:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象(包含视图名或视图名和模型)

6.根据返回的ModelAndView对象,选择一个合适的ViewResolver返会给DispatcherServlet ;

7.ViewResolver结合,Model和View来渲染视图

8.最后将视图渲染结果返回给客户端

组件名词解释:

1.DispatcherServlet:前端控制器

等同于以前的Controller, 是整个流程的中心, 负责调用其他组件

2.HandlerMapping: 处理器映射器

负责根据请求找到Handler(处理器),springMVC中可以根据不同的映射器实现不同映射,比如 xml配置方式,注解方式,接口方式等

3.Handler:后端控制器

在前端控制器的控制下对具体的用户请求进行处理,所以一般情况下都需要开发者进行根据需求进行开发。

4.HandlerAdapter:处理器适配器

处理Handler,可以对多种类型的处理器进行执行,这是对适配器模式的应用体现。

5.ViewResolver
: 视图解析器

负责将处理结果生成view视图、开发者可以根据需要开发view

入门程序(详细步骤): 在理解了springMVC的工作流程后,下面我们根据流程步骤,来实现我们的入门程序,步骤如下:

1.导入我们的spring架包(一般去官网下载即可 4.2版本用的比较多)

2.在web.xml配置前端控制器

  1.  
    <servlet>
  2.  
    <servlet-name>springmvc</servlet-name>
  3.  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4.  
    </servlet>
  5.  
    <!-- 让servlet随服务启动 -->
  6.  
    <servlet-mapping>
  7.  
    <servlet-name>springmvc</servlet-name>
  8.  
    <url-pattern>*.action</url-pattern>
  9.  
    </servlet-mapping>
  10.  
     

这里说一下 我们的拦截方式:

1.   拦截固定后缀名的URL : 如 *.action, *.do

2.   拦截所有:设置为/,但是该方法会导致静态文件(css,js.jpg)被拦截下来不能正常显示,所以该方式需要特殊处理

注意:不能设置拦截所有为/*  该方式是错误的,因为请求action时,当action跳转到jsp时会再次被拦截,出现异常:根据jsp路径找不到映射地址

3.设置springmvc的配置文件

  1.  
    <servlet>
  2.  
    <init-param>
  3.  
    <param-name>contextConfigLocation</param-name>
  4.  
    <param-value>WEB-INF/springmvc.xml</param-value>
  5.  
    </init-param>
  6.  
    </servlet>

4.开发处理器

  1.  
    public class Hello implements Controller{
  2.  
    @Override
  3.  
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
  4.  
    List list = new ArrayList<>();
  5.  
    list.add("one");
  6.  
    list.add("two");
  7.  
    ModelAndView mv = new ModelAndView();
  8.  
    mv.addObject("list",list);
  9.  
    return mv;
  10.  
    }
  11.  
    }

5.在springmvc.xml中配置

  1.  
    <!-- 配置适配器 -->
  2.  
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
  3.  
    <!-- 处理器映射器 -->
  4.  
    <!-- 根据bean的 name 查找Handler , 将action的URL 配置在bean的name中-->
  5.  
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
  6.  
     
  7.  
    <!-- 配置处理器 -->
  8.  
    <bean name="/hello.action" class="com.mt.controller.Hello"></bean>
  9.  
    <!-- 配置视图解析器 -->
  10.  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

6.视图开发  ,jsp文件

  1.  
    <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.  
    pageEncoding="UTF-8"%>
  3.  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4.  
    <html>
  5.  
    <head>
  6.  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7.  
    <title>Insert title here</title>
  8.  
    </head>
  9.  
    <body>
  10.  
    asdfadfadfa
  11.  
    ${list }
  12.  
    </body>
  13.  
    </html>

测试结果:   开启服务器后, 发送 http://localhost:8080/SpringMVC/hello.action的请求

页面显示:

对应理解springMVC  的流程即可。

SpringMVC 工作流程的更多相关文章

  1. SpringMVC工作流程 --通透较详细

    SpringMVC工作流程 SpringMVC工作流程 流程说明(重要): (1)客户端发送一个http请求给前端控制器(DispatcherServlet): (2)前端控制器(DispacherS ...

  2. springmvc工作流程

    Spring MVC工作流程图   图一   图二    Spring工作流程描述       1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServle ...

  3. SpringMVC工作流程描述

    向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获. DispatcherServlet 根据 <servlet-name>-servlet.xml 中的 ...

  4. 简洁的描述SpringMVC工作流程

    1.客户端发送来的请求 经过前端控制器(springDispatcherServlet)调用映射器(HandlerMapping)来找到对应的执行链(HandlerExecutionChain)对象, ...

  5. SpringMVC第一篇【介绍、入门、工作流程、控制器】

    什么是SpringMVC? SpringMVC是Spring家族的一员,Spring是将现在开发中流行的组件进行组合而成的一个框架!它用在基于MVC的表现层开发,类似于struts2框架 为什么要使用 ...

  6. 面试题:SpringMVC的工作流程

    SpringMVC是当今最主流的Web MVC框架,没有之一,要做一名合格的JavaWeb工程师,学好它势在必行! 与Struts2原理不同,SpringMVC是通过最基础最传统的servlet来实现 ...

  7. Java Spring MVC工作流程

    本文是对 SpringMVC 工作流程的总结,自己一定要可以用语言描述. 名词解释: DispatcherServlet:前端控制器,是 SpringMVC 工作流程的中心,负责调用其他组件,在系统启 ...

  8. 了解SpringMVC框架及基本工作流程

    传统原生的JSP+Servlet在开发上过程上虽然简单明了,JSP页面传递数据到Servlet,Servlet整理数据(逻辑开发)或者从数据库提取数据接着再转发到JSP页面上,但是其似乎只能止步于此, ...

  9. springmvc 运行原理 Spring ioc的实现原理 Mybatis工作流程 spring AOP实现原理

    SpringMVC的工作原理图: SpringMVC流程 . 用户发送请求至前端控制器DispatcherServlet. . DispatcherServlet收到请求调用HandlerMappin ...

随机推荐

  1. mysql主从同步错误,提示The server quit without updating PID file

    在安装完lnmp后,启动mysqld失败,提示 [root@centos-6 ~]# service mysqld start Starting MySQL [确定][root@centos-6 ~] ...

  2. CentOS6.9 ARM虚拟机扩容系统磁盘

    由于扩容磁盘的操作非同小可,一旦哪一步出现问题,就会导致分区损坏,数据丢失等一系列严重的问题,因此建议:在进行虚拟机分区扩容之前,一定要备份重要数据文件,并且先在测试机上验证以下步骤,再应用于您的生产 ...

  3. dbproxy-id生成器

    id生成器使用的是snowflake, 需要执行 snowflake_init(region_id, worker_id); 而region_id和worker_id是在配置文件中配置的 networ ...

  4. Python导入模块Import和from+Import区别

    在我们使用python的时候会发现使用Import可以导入模块,from+Import也可以,那么他们之间有什么区别,该用哪一种呢?让我们来看看 1.首先在demo.py中创建一个变量a,定义一个函数 ...

  5. P4491 [HAOI2018]染色 容斥+NTT

    $ \color{#0066ff}{ 题目描述 }$ 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 \(N\) 的序列, 每个位置都可以被染成 ...

  6. 2016级算法第二次上机-C.AlvinZH的儿时梦想——坦克篇

    872 AlvinZH的儿时梦想----坦克篇 思路 简单题.仔细看题,题目意在找到直线穿过的矩形数最小,不能从两边穿过.那么我们只要知道每一行矩形之间的空隙位置就可以了. 如果这里用二维数组记住每一 ...

  7. 大数据-zookeeper集群安装

    一.安装前发现的问题: 1.安装前期发现jps权限不够 [root@master1 ~]# jps -bash: /opt/workspace/jdk1./bin/jps: Permission de ...

  8. 洛谷 P3204 [HNOI2010]公交线路

    题面 luogu 题解 矩阵快速幂\(+dp\) 其实也不是很难 先考虑朴素状压\(dp\) \(f[i][S]\) 表示最慢的车走到了\(i\),\([i, p+i-1]\)的覆盖情况 状态第一位一 ...

  9. django Form数据读取问题

    1.在我学习django的过程中,我学习到了一个关于表单验证的问题 2.我们从前端post一个表单,通过urls配置,传给对应的view方法 3.然后再传给Form验证 4.一开始我是很好奇,在vie ...

  10. SVN知识点整理

    Eclipse安装SubVersion插件 Help -> Install new software... -> add Name : Subversion Location : http ...