0000 - Spring MVC 原理以及helloworld
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实现流程及使用
- 客户端请求被DispatcherServlet(前端控制器)接收
- 根据HandlerMapper映射到Handler
- 生成Handler和HandlerInterceptor(如果由则生成)
- Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
- DispatcherServlet通过HandlerAdapter调用Handler的方法做业务逻辑处理
- 返回一个ModelAndView对象给DispatcherServlet
- DisptcherServlet将获取的ModelAndView对象传给ViewResolver试图解析器,将逻辑视图解析成物理视图View
- ViewResolver返回一个View给DispatcherServlet
- Dispatcher根据View进行视图渲染(将模型数据填充到视图中)
- 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

- DispatacherServlet接收到URL请求的index,结合@RequestMapper("/index")注解将请求交给index业务方法
- 执行index业务方法,返回“index”字符串
- 结合spring-mvc.xml中的视图解析器配置,找到目标资源:/index.jsp,即index.jsp,将该jsp资源返回客户端完成响应
0000 - Spring MVC 原理以及helloworld的更多相关文章
- spring MVC原理
spring MVC原理 Spring MVC工作流程图 图一 图二 Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt D ...
- Spring MVC 原理探秘 - 容器的创建过程
1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...
- Spring MVC 原理探秘 - 一个请求的旅行过程
1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...
- Spring学习 6- Spring MVC (Spring MVC原理及配置详解)
百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...
- Spring MVC原理及配置
Spring MVC原理及配置 1. Spring MVC概述 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得 ...
- 基于XML配置的Spring MVC 简单的HelloWorld实例应用
1.1 问题 使用Spring Web MVC构建helloworld Web应用案例. 1.2 方案 解决本案例的方案如下: 1. 创建Web工程,导入Spring Web MVC相关开发包. Sp ...
- spring MVC 初探 (HelloWorld)
1.使用spring MVC 需要导入相关jar包 2.web.xml 启用spring MVC <servlet> <servlet-name>spring3mvc</ ...
- Spring MVC原理及配置详解
Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制 ...
- Spring MVC原理及实例基础扫盲篇
近期 项目中刚接触了SpringMVC,就把这几天看的跟实践的东西写出来吧. 一.首先,先来了解一下SpringMVC究竟是个什么样的框架? Spring Web MVC是一种基于Java的实现了We ...
随机推荐
- url和资源的再理解
元数据管理系统中, 确实是所有的静态资源都放在WebContent 不在dgs这个主项目中,通过url访问了 下面的这个项目在dgs中
- How to scale Complex Event Processing (CEP)/ Streaming SQL Systems?
转自:https://iwringer.wordpress.com/2012/05/18/how-to-scale-complex-event-processing-cep-systems/ What ...
- camunda 开源的bpm系统
看到camunda 是在zeebe 的介绍中,实际上camunda 是一个很完整的bpm 平台,包含了很多在bpm 系统中需要的组件,以下为一张参考图 从上图可以看出,组件还是比较多的,对于完整的bp ...
- drone 1.0 新的构建徽章特性
drone 1.0 昨天新发布的功能,支持了一个方便的查看构建状态的功能徽章 如下: 环境准备 docker-compose 文件 version: '3' services: drone-serve ...
- 在树莓派是安装并配置NTP服务
我们都知道树莓派的小巧和省电节省空间等太多的优势,这里就不一一列举了,那么树莓派就需要长时间的运行,可以7×24的方式运行,那么我们就把树莓派当作一个小的服务器来运行,可以跑一些小的应用,例如可以在局 ...
- count(*) 和 count(1)和count(列名)区别
执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL cou ...
- 适配器(Adapter)
Adapter:将一个Class的接口转换成另一个Class的接口,使原本因接口不兼容而不能合作的Class可以一起运作.主要有两种:迭代器适配器(Iterator Adpater)和容器适配器(Co ...
- Autofac学习之三种生命周期:InstancePerLifetimeScope、SingleInstance、InstancePerDependency 【转载】
InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例 SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象:每次都用同一个对象: In ...
- eclipse 视图打不开解决方法
遇到一个eclipse问题,查看方法调用者,或打开调用层次窗口失败,这时要查看一个方法的调用者只好通过全局搜索的方式.网上搜索报错关键词没找到答案,看了一下全局设置也没有想过的选项. 后想到一个ecl ...
- mysql之 OPTIMIZE TABLE整理碎片
来看看手册中关于 OPTIMIZE 的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 如果您已经删除 ...