Spring MVC体系结构

【Spring MVC类图】
《Spring实战》中:
《Spring3.0就这么简单》中:
http://blog.csdn.net/gstormspire/article/details/8239182
==========================================================================
 
Spring MVC在高并发情况下性能更好,而且对代码的侵入性很少,轻量级的原因使得开发效率比Struts2好。
Spring MVC更加接近“零配置”的目标。
 
==========================================================================
 
——MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。
——从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观
 
SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。
这个方案实际上涉及到两个方面:
l 处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来
l 处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式
 
处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:
l 步骤1—— 对Http请求进行初步处理,查找与之对应的Controller处理类(方法)   ——HandlerMapping
l 步骤2—— 调用相应的Controller处理类(方法)完成业务逻辑                    ——HandlerAdapter
l 步骤3—— 对Controller处理类(方法)调用时可能发生的异常进行处理            ——HandlerExceptionResolver
l 步骤4—— 根据Controller处理类(方法)的调用结果,进行Http响应处理       ——ViewResolver
 
Struts2优势:
Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:
public class UserController {
    private User user
    public String execute() {
        // 这里加入业务逻辑代码
       return "success";
    }
}
从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:
1.在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样的原生Servlet对象。
2.将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。
 
整个Controller类彻底与Web容器解耦,可以方便地进行单元测试。
 
因为在传统Servlet模式中的禁地Controller中的属性变量被合理利用了起来作为请求处理过程中的数据部分。这样的改造不仅使得表达式引擎能够得到最大限度的发挥,同时使得整个Controller看起来更像是一个POJO。因而,这种表现形态被笔者冠以的名称是:POJO实现模式。POJO实现模式是一种具有革命性意义的模式,因为它能够把解耦合这样一个观点发挥到极致。从面向对象的角度来看,POJO模式无疑也是所有程序员所追求的一个目标。这也就是Webwork2 /Struts2那么多年来经久不衰的一个重要原因。
 
 
所以,我们看到第一条原因是Struts2依靠技术上的革新赢得了程序员的青睐。但是,这些年来Struts2在技术革新上的作为似乎步子就迈得比较小。我们可以看到,在JDK1.5普及之后,Annotation作为一种新兴的Java语法,逐渐被大家熟知和应用。这一点上SpringMVC紧跟了时代的潮流,直接用于请求-响应的映射。而Struts2却迟迟无法在单一配置源的问题上形成突破。当然,这只是技术革新上的一个简单的例子,其他的例子还有很多。
至少给人的感觉是这样的。在这一点上Struts并不是很沾光,因为Spring的口碑和影响力也客观程度上加深了大家对SpirngMVC是技术领导者的印象。
 
【注意】现在的struts2也有自己的注解。
 
==========================================================================
 
struts2是类级别的拦截,一个类对应一个request上下文。
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应。所以说从架构本身上 spring3 mvc就容易实现restful url。
而struts2的架构实现起来要费劲,因为struts2 action的一个方法可以对应一个url ,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
 
spring3mvc的方法之间基本上独立的,独享request response数据。请求数据通过参数获取,处理结果通过ModelMap交回给框架。方法之间不共享变量。
而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的。这不会影响程序运行,却给我们编码读程序时带来麻烦。 
 
spring3 mvc的验证也是一个亮点,支持JSR303。处理ajax的请求更是方便只需一个注解@ResponseBody ,然后直接返回响应文本即可。
 
struts1也一样,运行一个action的方法的时候创建一个action类,以后再运行就不会创建了,其实也是Servlet的封装的框架。
struts2特殊一些,每个请求要new一个action来保证线程安全。所以效率会低一些,但是不会低的特别离谱。
这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的。struts2的确实是线程安全的。
 
==========================================================================
 
1.spring mvc的入口是servlet,而struts2是filter
2.性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类。
【基于类:是指一个URL请求对应于一个action类去处理】
【基于方法:一个请求对应类中的一个方法处理】
3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。
6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。

时间: 2024-09-30 03:05:27

Spring MVC体系结构的相关文章

Spring MVC 体系结构和处理请求控制器

①MVC小结: 1.MVC处理过程 对于MVC的三部分(模型Model.视图View.控制器Controller)功能职责分别进行了相应的阐述,并描述了各部分之间的调用关系. MVC整体的处理过程: (1)首先视图提供系统与用户交互的界面,并发送用户输入给控制器. (2)控制器接受用户的请求,并决定应该调用那个模型来进行处理. (3)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果(数据). (4)控制器根据返回的处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户结果. 2

Spring MVC体系结构和处理请求控制器

MVC设计模式 通常的Web项目,架构模式基本分层 数据库访问接口:DAO层 处理业务逻辑:Service层 数据实体:POJO 负责前端请求的接受处理:Servlet 负责前端页面展示:JSP MVC设计模式:它是软件工程中的一种软件架构模式.它强制性地使软件系统的输入.处理和输出分开.把软件系统分为三个基本部分:模型(Model).视图(View).控制器(Controller) 视图(View):负责格式化数据并把他们呈现给用户,包括数据展示.用户交互.数据验证.界面设计等功能.对应组件:

Spring MVC 相关资料整理

来源于:http://www.cnblogs.com/ylhssn/p/4062757.html 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们简化日常web系统的开发. Spring MVC框架就是一种MVC框架.其前端控制器是DispatcherServlet主要用于控制流程:应用控制器为Handler Mapping-处理器映射器进行处理器管理和View Res

servlet/struts1/struts2/spring mvc 的线程安全问题

线程安全的概念: 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 线程安全问题都是由全局变量及静态变量引起的. 若每个线程中对全局变量.静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全. 在Java里,线程安全一般体现在两个方面:  1.多个thread对同一个java

Spring MVC 快速入门-01

MVC介绍 MVC是什么 mvc是一种使用MVC(Model View Controller) 设计创建Web应用程序的模式 Model(模型) 表示程序核心计算 View(视图) 展示数据 Controller (控制器) 处理输入 常用的MVC框架 比较常用的MVC框架有Struts 和 Spring MVC Struts是java Web MVC框架中不争的王者.经过长达九年的发展,Struts已经逐渐成长为一个稳定.成熟的框架,并且占有了MVC框架中最大的市场份额.但是Struts某些技

spring MVC 第一课 概念

1.起源.背景 Spring是一个开源框架,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架. Spring致力于提供一种方法管理你的业务对象.Spring是全面的和模块化的.Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的.因例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象. 它的设计从底部帮助你编写易于测试的代码.Spring是用于测试驱动工程的理想的framework.

java框架学习之路——Spring的体系结构

分类: java框架学习 Spring的体系结构 Spring是一个开源的轻量级框架 Spring项目开发流程: 创建项目-->添加必须的类库jar包-->创建源文件编程调用库-->创建bean的配置文件-->运行调试 核心特征: 1.AOP:面向切面编程 2.IOC:控制反转,把对象的创建交给Spring管理,依赖注入DI,对象生成放在了XML定义 3.跨越javaEE三层 Web层:SpringMVC Service层:Spring IOC Dao层:jdbcTemplate

Spring框架学习——Spring的体系结构详解

1.Spring体系结构简介 Spring框架至今已集成了20多个模块,这些模块分布在以下模块中: 核心容器(Core Container) 数据访问/集成(Data Access/Integration)层 Web层 AOP(Aspect Oriented Programming)模块 植入(Instrumentation)模块 消息传输(Messaging) 测试(Test)模块 Spring体系结构如下图: 2.核心容器 Spring的核心容器是其他模块建立的基础,有Spring-core

Spring MVC XML 的配置

JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和这篇文章中讲解的SpringMVC是Web层的框架,Spring是业务层的框架,之前文章中讲解的Hibernate和MyBatis是持久层的框架. SpringMVC是一种基于Java,实现了Web MVC(模型 - 视图 - 控制器)设计模式,请求驱动类型的轻量级的开源的Web框架,即用了MVC架构模式的思想,将Web层进行职责解耦.基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发