1、概述

  Spring MVC是目前最好的实现MVC设计模式的框架,是Spring框架的一个分支产品。以Spring IOC容器为基础,并利用容易的特性来简化它的配置。Spring MVC相当于Spring的一个子模块,可以很好地和Spring 结合起来进行开发,是Java Web开发者应该要掌握的框架。

2、Spring MVC 能干什么

  实现了MVC设计模式,该设计模式是一种常用的软件架构方式:以Controller(控制层)、Model(模型层)、View(试图层)三个模块分离的形式来组织代码。

  MVC流程:控制层接收到客户端请求,调用模型层生成业务数据,传递给试图层,将最终的业务数据和试图响应给客户端做展示。

3、Spring MVC实现原理

3.1、核心组件:

  • DispatcherServerlet:前端控制器,是整个流程控制的核心,控制其他组件的执行,统一调度,降低组件之间的耦合性,相当于总指挥。
  • Handler:处理器,完成具体业务逻辑,相当于Servlet 或 Action
  • HandlerMapper:DispatcherServlet接受到请求之后,通过HandlerMapper将不同的请求分发到不同的Handler
  • HandlerInterceptor:处理器兰截图,是一个接口,如果我们需要做一些兰截处理,可以来实现这个接口
  • HandlerExecutionChain:处理器执行链,包括两部分内容,Handler和HandlerInterceptor(系统会又一个默认的HandlerInterceptor,如果需要额外拦截处理,可以添加拦截器设置)
  • HandlerAdapter:处理器适配器,Handler执行业务发放之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到JavaBean等,这一系列的操作,都是由HandlerAdapter来完成,DispatcherServlet通过HandlerAdapter执行不同的Handler
  • ModelAndView:装载了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet
  • ViewResolver:试图解析器,DispatcherServlet通过它将逻辑视图解析成物理视图,最终将渲染结果响应给客户端

3.2、SpringMVC实现流程及使用

  1. 客户端请求被DispatcherServlet(前端控制器)接收
  2. 根据HandlerMapper映射到Handler
  3. 生成Handler和HandlerInterceptor(如果由则生成)
  4. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
  5. DispatcherServlet通过HandlerAdapter调用Handler的方法做业务逻辑处理
  6. 返回一个ModelAndView对象给DispatcherServlet
  7. DisptcherServlet将获取的ModelAndView对象传给ViewResolver试图解析器,将逻辑视图解析成物理视图View
  8. ViewResolver返回一个View给DispatcherServlet
  9. Dispatcher根据View进行视图渲染(将模型数据填充到视图中)
  10. DispatcherServlet将渲染后的视图响应给客户端

4、HelloWorld

4.1、创建Maven工程,导入spring mvc依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.3.22.RELEASE</version>
</dependency>

4.2、在web.xml中配置Spring MVC的DispatcherServlet

<servlet>
  <servlet-name>spring-mvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>spring-mvc</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

4.3、创建spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

  <context:component-scan base-package="com.ourteam" />

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/" />
    <property name="suffix" value=".jsp" />
  </bean>

</beans>

自动扫描的类结合注解交给IOC容器来管理,视图解析器是Spring MVC底层的类,开发者只需要进行配置即可完成JSP页面的跳转。配置也很简单,记住一条:目标资源路径=前缀 + 返回值 + 后缀

比如,DispatcherServlet返回index,配置文件中前缀是/,后缀是.jsp,带入上述公式:

  目标资源路径:= /index.jsp。

4.4、创建Handler类

@RequestMapping("/")
@Controller
public class IndexController { @RequestMapping(value = "/index",method = RequestMethod.GET)
public String index(){
return "index";
}
}

4.5、启动tomcat,打开浏览器输入URL

  1. DispatacherServlet接收到URL请求的index,结合@RequestMapper("/index")注解将请求交给index业务方法
  2. 执行index业务方法,返回“index”字符串
  3. 结合spring-mvc.xml中的视图解析器配置,找到目标资源:/index.jsp,即index.jsp,将该jsp资源返回客户端完成响应

0000 - Spring MVC 原理以及helloworld的更多相关文章

  1. spring MVC原理

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

  2. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  3. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  4. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  5. Spring MVC原理及配置

    Spring MVC原理及配置 1. Spring MVC概述 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得 ...

  6. 基于XML配置的Spring MVC 简单的HelloWorld实例应用

    1.1 问题 使用Spring Web MVC构建helloworld Web应用案例. 1.2 方案 解决本案例的方案如下: 1. 创建Web工程,导入Spring Web MVC相关开发包. Sp ...

  7. spring MVC 初探 (HelloWorld)

    1.使用spring MVC 需要导入相关jar包 2.web.xml 启用spring MVC <servlet> <servlet-name>spring3mvc</ ...

  8. Spring MVC原理及配置详解

    Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制 ...

  9. Spring MVC原理及实例基础扫盲篇

    近期 项目中刚接触了SpringMVC,就把这几天看的跟实践的东西写出来吧. 一.首先,先来了解一下SpringMVC究竟是个什么样的框架? Spring Web MVC是一种基于Java的实现了We ...

随机推荐

  1. tile38 roaming-geofences 试用

    tile38 支持动态实时的移动对象的数据监控 环境准备 docker-compose 文件 version: "3" services:  app:    image: tile ...

  2. 人教版高中数学(A版)

    必修1 (已看) 第一章 集合与函数概念 1.1 集合 1.2 函数及其表示 1.3 函数的基本性质 第二章 基本初等函数(1) 2.1 指数函数 2.2 对数函数 2.3 幂函数 第三章 函数的应用 ...

  3. 在WinForm中使用Web Services 来实现 软件自动升级( Auto Update ) (C#)

    winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了 ...

  4. oracle-null和默认值

    Oracle的默认值处理要当心,如果应用中使用的是ORM工具,则必须要考虑对于字段为Null的处理,必要时在ORM工具中将Null转换为default或插入时去掉值为Null的字段. 可以将下面的系统 ...

  5. 20 约束 异常处理 MD5 日志

    三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完 ...

  6. direct3d

    DirectX for .Net procedure 1, install DXSDK  https://www.microsoft.com/en-us/download/details.aspx?i ...

  7. Mongo 用户创建及权限管理

    Mongo版本3.0之前使用的是db.addUser(),但3.0之后使用的是db.createUser() 内建的角色: 数据库用户角色:read.readWrite; 数据库管理角色:dbAdmi ...

  8. Nginx浏览目录配置及美化

    https://segmentfault.com/a/1190000012606305 在项目中有一个功能需要在浏览器页面中浏览服务器的目录.服务器使用Nginx,而Nginx提供了相应的ngx_ht ...

  9. Java 解密错误InvalidKeyException: Illegal key size解决方法

    做解密操作,出现如下错误 java.security.InvalidKeyException: Illegal key size // 设置解密模式为AES的CBC模式 Cipher cipher = ...

  10. Linux下批处理文件编写

    linux下的批处理文件,基本就是shell脚本文件. 一.最简单的脚本书写方法为: 1.新建一个文件,名字为test(自己定义的名字) touch test.sh 2.在里面编写脚本 程序必须以下面 ...