spring MVC入门(一)

一、什么是MVC框架

MVC提供了模型-视图-控制的体系结构和可以用来开发灵活,松耦合的Web应用程序的组件,MVC导致了应用程序的不同方面(输入逻辑,业务逻辑,UI逻辑)的分离,同时提供了元素之间的松散耦合.
常见的MVC框架比较:
性能上比较:Jsp+Servlet>Struts1.1>spring MVC >struts2
开发效率比较:spring MVC >struts2>struts1.1>Jsp+Servlet
当今企业快速开发用:spring Boot(微框架) spring cloud(分布式开发)

二、概述

Spring MVC是Spring framework的后续产品,已经融合到web flow中,Spring MVC是基于Model2实现的,利用了处理器分离了模型对象,视图,控制,达到松耦合的效果,提高了系统的可重用性,可维护性,以及可扩展性,功能与struts相似,但是实现方式和原理有所不同.
优点:使用简单,学习成本低
功能强大,容易写出高性能的程序
使用灵活,可以和spring无缝衔接

特点:
Spring为展现层提供的基于MVC设计理念的优秀WEB框架,是目前最主流的MVC框架之一。
Spring3.0之后全面超越Struts2,成为最优秀的MVC框架
SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何接口
支持RESTFUL风格的URL请求。
采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性灵活性。

三、开始一个简单的框架搭建

1.首先创建一个动态工程
2.加入jar包
spring MVC入门(一)
3.在web.xml中配置DispatcherServlet
spring MVC入门(一)
4.加入springmvc配置文件
spring MVC入门(一)
5.简单编写请求处理器
spring MVC入门(一)
6.编写succcess.jsp页面
spring MVC入门(一)
7.结果
spring MVC入门(一)
8.

DispatcherServlet


Spring Web 模型-视图-控制(MVC)框架是围绕 DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。Spring Web MVC DispatcherServlet 的请求处理的工作流程如下图所示:
spring MVC入门(一)

下面是对应于 DispatcherServlet 传入 HTTP 请求的事件序列:
l 收到一个 HTTP 请求后,DispatcherServlet 根据 HandlerMapping 来选择并且调用适当的控制器。
l 控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。Service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 DispatcherServlet 中。
l DispatcherServlet 会从 ViewResolver 获取帮助,为请求检取定义视图。
l 一旦确定视图,DispatcherServlet 将把模型数据传递给视图,最后呈现在浏览器中。
上面所提到的所有组件,即 HandlerMapping、Controller 和 ViewResolver 是 WebApplicationContext 的一部分,而 WebApplicationContext 是带有一些对 web 应用程序必要的额外特性的 ApplicationContext 的扩展。

DispatcherServlet子容器的启动


WebApplicationContext的初始化


我们先看一下该类的继承结构。

spring MVC入门(一)

根上下文创建完成后, Spring会给每一个DispatcherServlet创建一个容器,其引用保存在其直接父类FrameworkServlet中:
spring MVC入门(一)

这里是WebApplicationContext的初始化。

我们知道servlet容器(如Tomcat)在创建一个servlet时会首先调用init()方法来初始化servlet,因此应当首先查找该方法。
经过查找分析, 我们发现该容器的创建由父类HttpServletBean的init()方法触发,最后由子类FrameworkServlet完成实际创建工作。
spring MVC入门(一)


DispatcherServlet请求处理流程


子容器创建完成后,当有请求到来时,DispatcherServlet就可以进行分发处理了。我们首先根据Servlet规范查找doService()方法,这个方法在DispatcherServlet本身就有实现:
spring MVC入门(一)

spring MVC入门(一)



分析到这里,DispatcherServlet的分发请求处理流程就一目了然了。
我们可以简单设计一个登陆的列子:
创建一个login.jsp
spring MVC入门(一)
然后修改index.jsp

spring MVC入门(一)

添加控制层方法:

spring MVC入门(一)

结果如下:
spring MVC入门(一)