Spring学习10-SpringMVC原理及核心组件1
一、SpringMVC原理
请求到来时,第一个接受这个请求的前端控制器叫DispatcherServlet(这个需要在web.xml中配置),
后端控制器叫Controller。负责处理请求URL和后端控制器映射的叫HandMapping,它有多种类型,比较灵活,也是在一个xml文件上进
行配置。负责业务逻辑处理的模型对象一般也是我们平常写的DAO/DTO组件。只是它最后的返回更灵活,Controller返回一个
ModelAndView对象给DispatcherServlet,ModelAndView可以携带一个视图对象,也可以携带一个视图对象的逻辑名。
如果携带的是一个视图对象的逻辑名,那DispatcherServlet需要一个ViewResolver来查找用于渲染回应的视图对象。最
后,DispatcherServlet将请求分派给ModelAndView对象指定的视图对象。视图对象负责渲染返回给客户的回应。
更具体的工作流程是:
①当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息(比如说请求的URL信息,用户名,密码什么的)。
②请求的第一站到达的是Spring的DispatcherServlet,它是一个前端控制器,工作是将用户的请求委托给其他的组件(这里是交给
Spring
MVC的控制器)去处理。这里DispatcherServlet要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映
射(Handler
Mapping)了。处理器映射会看请求的URL信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器ControllerA和
ControllerB,分别处理后缀名为.html和.jsp送来的请求,那么当请求者的后缀名为.html时,那么
DispatcherServlet就将请求交给ControllerA进行处理。
③当选择了一个合适的控制器后,DispatcherServlet就会将请求交给这个控制器去处理。在这个控制器上,用户的请求将会将用户提交的一些信
息交由控制器处理并等待。然而设计的比较好的控制器本身对信息做很少的处理或者根本不做处理,而是将业务逻辑交给一个或多个服务器对象(Model)去处
理。
④当控制器对用户请求所携带的信息进行处理(或交给模型层处理)后,经常会产生一些其他的需要返回给浏览器进行显示的数据。这些原始数据直接显示出来显然
是不友好的,那么就需要视图(View)来对这些数据进行显示了。控制器的最后一件事就是将模型数据打包,并且指定产生输出的视图的特定名称,然后它将模
型、视图名称以及request请求一起发送给DispatcherServlet。所以控制器并没有与视图进行耦合,因为传递给
DispatcherServlet的视图名称并不是某一个指定的特殊的文件名称(如后缀名一定是JSP或其他什么名称),它只要是一个可以产生输出和展
示结果的逻辑名称就可以了。
⑤DispatcherServlet会向一个视图解析器(ViewResolver)进行请求,视图解析器可以将逻辑视图名称映射到一个特定的视图显示文件上面。
⑥现在DispatcherServlet知道哪一个视图文件可以显示结果了。该视图将会利用模板数据产生输出,这些输出通过response对象返回给客户端进行显示。
关于DispatcherServlet中请求处理的流程,请参看下图:
二、SpringMVC核心接口(狠重要)
1、HandlerMapping接口 --
处理请求的映射
Spring提供了三种有用的HandlerMapping的实现:
—— BeanNameUrlHandlerMapping
根据控制器的名字将控制器映射到URL
例如:在映射文件的xml中这样配置:
—— SimpleUrlHandlerMapping
用上下文配置文件中定义的属性集合将控制器映射到URL
例如:在映射文件的xml中这样配置:
—— CommonsPathMapHandlerMapping
使用控制器代码中的元数据将控制器映射到URL
例如:在映射文件的xml中这样配置:
、Controller接口 --
后端控制器之一
Controller继承体系如下图:
那先让我们看一下ModelAndView的功能:
2.1:一般后端控制器:AbstractController抽象类实现类示例:
public class HelloController
extends AbstractController{
public
ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("hello", "welcome to spring!");
return new ModelAndView("welcome");
}
}
:Command
Controllers(命令后端控制器)
其中这些控制器的实现类包括:AbstractCommandController抽象类、AbstractWizardFormController抽象类、SimpleFormController类等。
2.:其他 Controllers(其他后端控制器)
3、ThrowawayController接口 -- 后端控制器之二
SpringMVC的jar包中没有实现它的类:
示例:
a:ThrowawayController类:
public class ExampleThrowAwayController implements
ThrowawayController
{
private
String msg;
public void
setMsg(String msg)
{
this.msg =
msg;
}
@Override
public
ModelAndView execute() throws Exception
{
String
hashCodeMsg = "["+hashCode()+"]-"+msg;
return new
ModelAndView("throwaway", "msg", hashCodeMsg);
}
}
b:映射文件的[ServletName]-servlet.xml应配置:
<bean
id="exampleThrowAwayController"
class="com.huateng.ExampleThrowAwayController"
scope="prototype">
4、HandlerInterceptor
接口--拦截器
继承体系:
示例:
Spring学习10-SpringMVC原理及核心组件1的更多相关文章
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
引用自:http://blog.csdn.net/qqhjqs/article/details/41683099?utm_source=tuicool&utm_medium=referral ...
- 【Spring学习】SpringMVC demo搭建
前言:今天会通过IDEA建立一个SpringMVC的demo项目,在其中会涉及到一些基础模块和相关知识,然后结合这个具体的知识点,理解清楚SpringMVC的框架原理(以图的形式展示),顺藤摸瓜分析源 ...
- spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...
- springmvc 运行原理 Spring ioc的实现原理 Mybatis工作流程 spring AOP实现原理
SpringMVC的工作原理图: SpringMVC流程 . 用户发送请求至前端控制器DispatcherServlet. . DispatcherServlet收到请求调用HandlerMappin ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- Spring学习之旅(三)Spring工作原理初探
详细的废话相信很多书籍视频资料都已经很多了,这里说几个小编个人认为对于理解Spring框架很重要的点.欢迎批评指正. 1)Spring的控制反转 先说说“依赖”,在面向对象程序设计中,类A中用到了类B ...
- 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat
作者:ssslinppp 1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...
随机推荐
- 解决Spring MVC报No converter found for return value of type:class java.util.ArrayList问题
一.背景 在搭建一套Spring+SpringMVC+Mybatis(SSM)的环境(搭建步骤会在以后博客中给出),结果运行 程序时,适用@ResponseBody注解进行返回List<对象&g ...
- 数学图形(2.5)Loxodrome曲线
这也是一种贴在球上的曲线 #http://www.mathcurve.com/courbes3d/loxodromie/sphereloxodromie.shtml vertices = 1000 t ...
- jQuery序列化表单数据 serialize()、serializeArray()及使用
1.serialize() 方法: serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. 您可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素 ...
- git 使用详解-- tag打标签
Git 的标签管理.跟大多数的 VCS 工具一样,git 也有在历史状态的关键点“贴标签”的功能,一般人们用这个功能来标记发布点(例如’v1.0′). 列出git中现有标签 要想列出git中现有的所有 ...
- Android怎样设置圆角button
1. 在res文件夹下的drawable文件夹下新建shape.xml文件 <?xml version="1.0" encoding="utf-8"?&g ...
- win10 当前操作环境不支持支付宝控件 完美解决办法
第一步,修改系统配置 在运行中输入“gpedit.msc”打开本地组策略编辑器: 打运行窗口的方法是:按win键+R (按下win键再按R键之后 同时松开) win键 即windows 的微标键 如 ...
- Linux内核通知链模块
通知链描写叙述 大多数内核子系统都是相互独立的,因此某个子系统可能对其他子系统产生的事件感兴趣. 为了满足这个需求,也即是让某个子系统在发生某个事件时通知其他的子系统.Linux内核提供了通知链的机制 ...
- POJ1035
#include <iostream> #include <cstdio> #include <cstring> #include <vector> # ...
- 公共DNS服务
一: 谷歌的 8.8.8.8 8.8.4.4 国内的两组 114.114.114.114 114.114.115.115
- [Swift A] - Welcome to Swift
Swift is a new object-oriented programming language for iOS and OS X development. Swift is modern, p ...