Struts和spring分别是什么?

Struts和spring分别是什么?,第1张

通常更多的我们对比 SpringMVC与Struts

把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。

 

为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:

 

第一、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

正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。

 

第三、设计原则更加明朗。

    Open for extension /closed for modification

这条重要的设计原则被写在了Spring官方的reference中SpringMVC章节的起始段: A key design principle in SpringWeb MVC and in Spring in general is the “Open for extension, closed for modification” principle

并且重点很好地体现在SpringMVC的实现当中,可以扩展,但却不能改变。我曾经扩展过Spring的IOC、AOP功能,这一点SpringMVC应该和Spring一脉相承。

 

第四、组件化的设计方案和特定的设计原则让SpringMVC形散神聚。

神 —— SpringMVC总是沿着一条固定的逻辑主线运行

形 —— SpringMVC却拥有多种不同的行为模式

SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。

第五、更加贴合Web发展的趋势,这个更加虚了,不再展开说这个 问题了。

 

第六、技术上的放缓导致了程序员对Struts2失去了热情,导致SpringMVC依靠自身的努力和Spring的口碑,逐渐显露了自身的优势和特点。

 

为什么SpringMVC会赢得最后的胜利呢?最后,我们不妨想一想Struts2是怎样流行起来的!

我自己是从Struts1用过来的,后来Struts1的问题很明显了,开源社区出现了很多的MVC框架,最为突出的是Webwork2。

Webwork2探索了一条与传统Servlet模型不同的解决方案,逐渐被大家熟识和理解,不断发展并得到了广大程序员的认可。它以优秀的设计思想和灵活的实现,吸引了大批的Web层开发人员投入它的 怀抱。

Apache社区与Opensymphony宣布未来的Struts项目将与Webwork2项目合并,并联合推出Struts2。

Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:

public class UserController {

    private User user

    public String execute() {

        // 这里加入业务逻辑代码

       return "success";

    }

}

 

从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:

在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样的原生Servlet对象。

将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。

这两大改造被看作是框架的神来之笔。因为通过这一改造,整个Controller类彻底与Web容器解耦,可以方便地进行单元测试。而摆脱了Servlet束缚的Controller,也为整个编程模型赋予了全新的定义。从引入新的编程元素的角度来说,Webwork2 / Struts2无疑也是成功的。因为在传统Servlet模式中的禁地Controller中的属性变量被合理利用了起来作为请求处理过程中的数据部分。这样的改造不仅使得表达式引擎能够得到最大限度的发挥,同时使得整个Controller看起来更像是一个POJO。因而,这种表现形态被笔者冠以的名称 是:POJO实现模式。POJO实现模式是一种具有革命性意义的模式,因为它能够把解耦合这样一个观点发挥到极致。从面向对象的角度来看,POJO模式无疑也是所有程序员所追求的一个目标。这也就是Webwork2 /Struts2那么多年来经久不衰的一个重要原因。

所以,我们看到第一条原因是Struts2依靠技术上的革新赢得了程序员的青睐。但是,这些年来Struts2在技术革新上的作为似乎步子就迈得比较小。我们可以看到,在JDK15普及之后,Annotation作为一种新兴的Java语法,逐渐 被大家熟知和应用。这一点上SpringMVC紧跟了时代的潮流,直接用于请求-响应的映射。而Struts2却迟迟无法在单一配置源的问题上形成突破。 当然,这只是技术革新上的一个简单的例子,其他的例子还有很多。

至少给人的感觉是这样的。在这一点上Struts并不是很沾光,因为Spring的口碑和影响力也客观程度上加深了大家对SpirngMVC是技术领导者的印象。

在计算机学涉及到‘事务’这个词通常就是指数据库事务?

追根溯源,其实事务不光指数据库事务。

但是,我们软件开发中的事物如无特别说明,那就是数据库事务了

spring 的事务处理?

首先,我们要明白数据库事务 ,这个概念。

下面是一个事务操作实例

在JDBC的操作中,手动作一个事务操作,

------

try{

javasqlConnection conn= 获得一个连接;

connsetAutoCommit(false);

具体的数据库操作(多个)

conncommit();

}catch(Exception ex){

connrollback();

}

------

当具体的数据库操作中有一个发生异常,那么整个事务就回滚,

所有的增删改操作都将无效。

而spring 配置式事务要达到的效果是:

1,对指定的类的方法添加事务,

2,配置管理,不需要每个数据库造作都像上面一样写那么多代码,

3,spring的配置式事务可以吧多个操作数据库的方法配置在一个事务中,

这样灵活性更加高了。

spring和springboot的区别是:构建目标不同、依赖管理不同、启动方式不同、部署方式不同、兼容性不同。

1、构建目标不同:Spring是一个综合性的框架,提供了多种功能,SpringBoot则是为了简化Spring应用的构建和开发流程而生,它提供了自动化配置等特性,可以快速地构建微服务、Web应用等小型应用。

2、依赖管理不同:Spring需要通过Maven或者Gradle等构建工具来管理依赖,需要手动配置。而SpringBoot则提供了自动化配置,可以自动管理应用所需的依赖。

3、启动方式不同:Spring需要通过XML配置文件、Java配置类等来配置应用,而SpringBoot则提供了快速应用启动的方式,只需要引入SpringBootStarter,即可自动配置应用。

4、部署方式不同:Spring需要手动在服务器上部署,需要考虑容器等相关问题。而SpringBoot则可以快速进行打包部署,可以通过命令行工具或者内嵌Tomcat等方式进行部署。

5、兼容性不同:Spring可以与各种框架和技术进行整合,包括Mybatis、Hibernate、Struts等等。而SpringBoot则更加专注于与Spring相关的项目的整合,例如SpringMVC、SpringData等。

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/lianai/9471370.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-10-13
下一篇2023-10-13

发表评论

登录后才能评论

评论列表(0条)

    保存