Struts与Struts2的区别(简单详细)

Struts2与Struts的异同与联系 总结起来,Struts2是Struts的升级版本,它在设计和实现上引入了更多现代化的概念和技术。然而,由于Struts2是Struts的升级版本,所以在某些方面仍然保留了一些Struts的设计和概念。Struts2和Struts是两个常用的Java Web开发框架,它们都是基于MVC(Model-View-Controller)设计模式的框架,用于构建灵活和可扩展的Web应用程序。此外,Struts2的模块化设计使得开发人员可以根据项目需求选择所需的功能模块,减少了框架的冗余。 阅读详情

从发展来看Struts2继承了Struts与WebWork的MVC框架,Struts2取两者之精华,形成新的框架,但是struts2还是更多的继承了struts的设计思想,并加入了WebWork的优点。

MVC简介
1)Model:JavaBean、EJB的EntityBean
2)View:JSP、Struts的TagLib
3)Controller:Struts的ActionServlet、Action
概括起来MVC的优点主要有一下方面:
1)多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护
2)模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等
3)应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性
4)控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念
5)MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码
对于MVC的概念性的东西也就废话到此,其关键的地方就是各个模块的实现技术分别是什么

简单来说二者的区别是:
一个是Stuts ,一个是Stuts2,这是最大的区别,技术方面:
Stuts有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强;
而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对Stuts1来说慢一点。

Struts2简介
Struts2既然是从Struts发展而来,为什么Struts2不沿用Struts的设计思想,毕竟Struts在目前的企业应用中还是有非常大的市场在的。
那么,来看下Struts的一些缺点吧:
1)支持的表现层技术单一
2)与Servlet API严重耦合,这点可以从Action的Execute的方法声明里面就可以看的出来
3)代码依赖Struts1 API,有侵入性,这点可以从写Action类和FormBean的时候看的出来,Action必须实现Struts的Action类

  而Struts2之所以以WebWork的设计思想为其核心,再就是WebWork没有Struts上面的那些缺点,更符合MVC的设计思想,也更利于代码的复用。
    基于以上介绍可以看的出,Struts2体系结构与Struts的体系结构有很大的差别,Struts是使用ActionServlet做为其中心处理器,Struts2则使用一个拦截器(FilterDispatcher)做为其中心处理器,这样做的一个好处就是将Action类和Servlet API进行了分离。

Struts2的简单处理流程如下:
1)浏览器发送请求
2)中心处理器根据struts.xml文件查找对应的处理请求的Action类
3)WebWork的拦截器链自动对请求应用通用功能,例如:WorkFlow、Validation等功能
4)如果Struts.xml文件中配置Method参数,则调用Method参数对应的Action类中的Method方法,否则调用通用的Execute方法来处理用户请求
5)将Action类中的对应方法返回的结果响应给浏览器

Struts2与struts的不同主要体现在以下几个方面:

Action类
在struts中都是使用抽象类编程而不是接口,因此他要求开发Action类继承一个抽象的基类,如DispatchAction等。
Struts2则基于接口编程,我们的Action类可以实现一个Action接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在struts2中Action接口不是必需的,任何有execute()函数的pojo对象都可以用作struts2的Action类来使用。

线程模式
struts的Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单列策略限制了struts Action能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或同步的;
struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。

Servlet依赖
struts的Action依赖于Servlet API,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行方法,例如:

public ActionForward execute(Actionmapping apping,
ActionForm Form,HttpServletRequest request,
HttpServletResponse response)
{
}

struts2的Action不依赖与容器,允许Action脱离容器单独被测试。如果需要,Struts2的Action任然可以访问初始的request和response。例如下面的这个类Action.Java,他可以通过ActionContext对象取得Session值,也可以通过ServletActionContext对象取得request对象。

Publicclass Action{
   protected Object getSession(String key)
   {
         return ActionContext.getContext().getSession(key);
    }
    protectedHttpServletRequest getRequest()
    {
        return(String)ServletActionContext.getRequest();
    }
}

可测试性
测试Struts Action的一个主要问题是,execute()方法暴露了Servlet API,这使得测试要依赖于容器。虽然有第三方的软件struts TestCase能够使用模拟对象来进行测试,但显然会让我们的测试变得更加复杂。
Struts2 Action的类是POJO对象,因此可以直接编写测试类来测试Action类,只需要在测试类中注入属性即可。

捕获输入
struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是再创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;
struts2直接使用Action属性作为输入属性,消除对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象类型。Action属性能够通过Web页面的taglibs访问。同时,struts2也支持ActionForm模式。

表达式语言
struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱
struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL

绑定值到页面
struts使用标准jsp机制把对象绑定到页面中来访问
struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)

类型转换
struts的ActionForm属性通常都是String类型,并不使用 Commons-Beanutils进行类型转换。每个类提供一个转换器,对每个实例来说是不可配置的;
struts2使用OGNL进行OGNL进行类型转换,提供了基本和常用对象转换器。

数据校验
struts支持在ActionForm的Validate方法中手动校验,或者通过Commons Validator来扩展校验。同一个类可以有不同的校验内容,但不能校验子对象;
struts2支持通过validata()方法和XWork校验框架来进行校验,XWork校验框架使用为属性类型定义的校验和内容校验,来支持chain校验子属性。

Action执行的控制
struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须提供相同的生命周期;
struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用

struts1和struts2的区别 struts1的配置比struts2麻烦很多。不仅要在.xml里写繁多的配置,多数也还要写一个FormBean来和action对应。struts2配置简单。不用继续servlet,任何一个带有方法的类都能当作action来使用。 立即下载

相关推荐

struts1和struts2的区别(详细)

struts1和struts2的区别(详细).txt

Struts与Struts2的区别

从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了WebWork的优点。在了解Struts2体系之前,让我们先看看struts2对struts做了哪些修改。 Struts2与struts的不同主要体现在以下几个方面。 (1)  Action类

杨春建的博客 1003

LabVIEW通过ActiveX控件实现与三菱FX5U PLC的高效数据交互

本文详细介绍了如何利用LabVIEW的ActiveX控件,通过三菱官方MX Component工具包实现与FX5U PLC的高效数据交互。文章从环境配置、控件插入到实战代码解析,系统讲解了连接建立、数据读写及资源释放的全流程,并提供了关键的避坑指南,帮助工程师快速构建稳定可靠的上位机通讯系统。

weixin_29197051的博客 373

Struts2与Struts的区别(详细,易懂)

Struts2与Struts的区别 从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了WebWork的优点。在了解Struts2体系

captain 2万+

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1637

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?

Spring MVC更适合现代 Web 应用开发,特别是需要高度灵活性和可扩展性的项目。Struts2虽然功能强大,但在灵活性和性能方面不如 Spring MVC,更适合一些传统的企业级应用。

weixin_45422672的博客 772

Qwen2.5-VL模型微调实战:从零到部署的完整流程(附避坑指南)

本文详细介绍了Qwen2.5-VL视觉语言模型从零开始的完整微调与部署流程。内容涵盖使用LLaMA-Factory进行LoRA微调的关键参数配置与避坑指南,以及如何将训练好的模型权重合并,并最终利用vLLM高性能推理引擎进行部署,为开发者提供了一套可落地的实战方案。

oo7890的博客 591

java struts2 和struts_关于Struts2和SpringMVC的区别简单介绍。

Struts2简介:Struts2是一个基于web works的MVC框架,MVC是由Model(模型)、View(视图)、Controller(控制器)组成。Model:在struts2中,模型分为数据和业务逻辑模型,模型是由Action组件实现View:视图是由Jsp、Velocity模块板、FreeMark模板,还有其它的一些表现层组件实现.Controller:控制器是由FilterDis...

weixin_42628846的博客 246

qmt量化交易策略小白学习笔记第67期【qmt编程之获取ETF申赎清单】

qmt编程之获取ETF申赎清单

fanglue3705的博客 1773

图神经网络与大模型融合的理论综述:架构、机制与未来方向

然而,它们普遍缺乏对图结构数据的原生支持,无法直接处理边、节点之间的拓扑关系,这限制了其在关系密集型任务中的表现 [23]。2020年发布的BERT [16] 开启了自监督预训练时代,而2021年后,T5 [17]、PaLM [18]、LLaMA [19] 等模型相继推出,参数规模突破千亿级,展现出惊人的上下文学习(In-context Learning)与链式推理(Chain-of-Thought)能力 [20]。例如,将医学影像作为图节点,结合病理报告文本,实现更精准的疾病诊断 [58]。

andeyeluguo的博客 295

Struts2和SpringMVC简单配置以及区别总结

Struts2:   struts 2 是一个基于MVC(mode-view-con)设计模式的Web应用框架,是由Struts1和WebWork两个经典框架发展而来的。   工作流程:     1客户端浏览器发出HTTP请求     2根据web.xml配置,该请求被FilterDispatcher(过滤器调度员)接收     3根据struts.xml配置,找到需要调用的Action...

weixin_30652491的博客 160

单细胞数据分析(三):单细胞聚类分析

本文介绍了单细胞聚类分析的基本概念及其在单细胞RNA测序(scRNA-seq)数据中的应用。单细胞聚类分析通过将具有相似基因表达模式的细胞分组到不同的簇中,帮助识别细胞类型、状态和功能。文章详细展示了使用R语言中的Seurat包进行单细胞数据聚类分析的步骤,包括数据加载、降维、聚类和结果可视化。通过FindNeighbors和FindClusters函数,文章展示了如何基于降维数据进行细胞聚类,并选择合适的分辨率值。

专注生信领域 1905

简单介绍下 springMVC 和 struts2 的区别有哪些?

4.如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些? a、springmvc 的入口是一个 servlet 即前端控制器,而 struts2 入口是一个 filter 过虑器。 b、springmvc 是基于方法开发(一个 url 对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例), struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例。 c、Struts 采用值栈存储请求和响应的数据,通过 OGNL 存取数据,spri

sunchaoyang727的博客 182

将Windbg附加到软件进程上排查异常闪退的问题

使用Windbg和Process Explorer排查因为内存泄漏导致的软件异常闪退问题。

dvlinker的技术专栏 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java spring mvc与struts 效率,简单了解SpringMVC与Struts2的区别

这篇文章主要介绍了简单了解SpringMVC与Struts2的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful...

weixin_42506152的博客 182

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

简单介绍springmvc和struts2区别

springmvc和struts2都是MVC模式中C控制层的框架,但是两者也有一些本质上的区别: 1、springvc的核心是servlet,struts2的核心是filter。 2、springmvc基于方法开发的,struts2基于类开发 springmvc将请求URL和方法映射,映射成功后生成一个handler对象,对象中只包含了一个method,方法执行结束,

huajianjiu_的博客 462

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

简单理解Struts2中拦截器与过滤器的区别及执行顺序

当接收到一个httprequest ,  a) 当外部的httpservletrequest到来时  b) 初始到了servlet容器 传递给一个标准的过滤器链  c) FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy  d) ActionProxy将会通过Configuration

讲不出再见 4935
上一篇: jsp简介及学习
下一篇: 整合spring+mybatis三种方法
NetSnake_
博客等级 码龄10年 27粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值