struts1 和2 的比较--ZT

Struts2与Struts1的对比
Action类:
• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
• Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式:
• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
• Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet 依赖:
• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
• Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

可测性:
• 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
• Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入:
• Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
• Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。

表达式语言:
• Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
• Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).

绑定值到页面(view):
• Struts 1使用标准JSP机制把对象绑定到页面中来访问。
• Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
 
类型转换:
• Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
• Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

校验:
• Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
• Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

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

NagaAgent3.0安装使用[项目源码] 本文分享了智能体NagaAgent3.0的安装与使用经验,包括从GitHub下载项目、解决安装过程中的权限问题、配置环境以及启动项目。作者详细介绍了如何通过修改pyproject.toml文件解决Python版本兼容性问题,并提供了API配置的具体步骤。此外,文章还提到了使用uv包管理器进行环境配置的注意事项,以及如何通过修改config.json文件来正确设置API连接。对于新手用户,作者建议谨慎参考,并等待后续更稳定的版本发布。 立即下载

相关推荐

Canoe Panel基础功能介绍

CANoe Panel 是 Vector CANoe 软件中用于设计图形化操作界面的功能模块。用户可以在面板上添加合适的控件,实时的改变信号或者变量的值

m0_56208280的博客 1951

在ubuntu下NetworkManager和networkd采用不同的dhcp方式申请ip

linux用networkdmanager和networkd申请dhcpIP的方式不通

m0_72676291的博客 723

使用Xpath语法爬取豆瓣读书Top250

使用Xpath语法爬取豆瓣读书Top250 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: # -*- coding: utf-8 -*- """ Created on Thu Apr 30 18:35:17 2020 @author: ASUS """ import requests import csv fr...

weixin_43987253的博客 2082

探索NagaAgent:智能对话助手的深度分析与使用指南

cd NagaAgent ``` 2. 一键配置: ```powershell .\setup.ps1 ``` 3. 启动: ```powershell .\start.bat ``` ## 总结 NagaAgent是一个功能强大、易于使用的智能对话助手,它拥有许多独特的特点和优势。无论你是个人用户还是企业级用户,都可以从中受益。如果你正在寻找一个智能

gitblog_00256的博客 605

保姆级教程:用Adams/Car和Simulink搞定你的第一个整车联合仿真(附模型文件)

本文提供了一份详尽的Adams/Car与Simulink联合仿真教程,涵盖从环境配置到模型导出的全流程。通过实战案例解析,帮助工程师快速掌握多体动力学仿真与控制算法开发的集成技术,特别适合汽车工程领域的初学者。文章还包含常见问题解决方案和性能优化建议,助您高效完成整车联合仿真项目。

weixin_29663861的博客 337

精益六西格玛Python数字化应用开发-Day18 应用场景:家电企业生产效率优化

本文将重点介绍专门针对精益六西格玛黑带使用场景的 Python 库,这些库功能侧重于数据分析和流程优化,特别适用于 DMAIC 方法论和看板管理。考虑到读者具备中高级Python 使用经验,我们将深入探讨各库的高级功能和实际应用应用场景。 某家电企业生产线自动化程度高,数据量巨大,希望通过精益管理提升生产效率。企业借助 Python 脚本,打通各类数据源(MES、ERP、设备日志),自动归集生产数据,分析各工序的生产节拍、设备停机、效率损失,快速定位瓶颈环节

m0_56592100的博客 906

ubuntu18 网络问题

这个命令会根据/etc/network/interfaces这个文件里的配置信息来设置网卡,会覆盖掉上面方法一中的设置,导致不起作用。Ubuntu 18.04采用netplan来管理网络配置计划,在/etc/netplan/目录下有一个以yaml结尾的文件,例如00-installer-config.yaml,不同版本的系统这个文件名可能会有些差异,但是不影响,以实际为准。1,要看nm是否接管,如果没有接管,系统实际的IP设置以interfaces 中的为准。反之,以nm 中的为准。

码农崛起 7961

STM32 Nucleo-144开发板开箱bring-up

最近做项目,用到STM32F446ZET6这款MCU,为了赶进度,前期软件需要提前开发,于是在某宝买了对应主控的官方开发板,为了避免遗忘,后面能翻出来回忆一些细节,就形成了本篇的主要内容,同时也希望能够帮助刚上手的小伙伴少走弯路,如果对你有帮助请点赞、收藏、转发,谢谢!

汽车电子软件领域知识分享 2679

Ubuntu系统网络配置

Ubuntu系统中存在两种不同的网络管理工具分别是:systemd-networkd和NetworkManager,它们用于不同的环境和需求其主要区别如下。

dawei.wang的博客 2518

风光储互补微电网在偏远地区的应用实践:从建模到仿真全解析

本文深入解析了风光储互补微电网在偏远地区的应用实践,从系统设计到仿真建模全流程。通过Simulink等工具进行动态仿真,验证了系统在多种工况下的可靠性,并结合实际案例展示了其显著的经济和环保效益。文章为从业者提供了从技术路径到实施优化的全面指导。

weixin_29047545的博客 270

芯片设计-信号完整性 SI 解析:Unit Interval 与比特周期的关系及其在高速信号中的应用

本文深入解析了芯片设计中信号完整性(SI)的核心概念Unit Interval(UI)与比特周期的关系及其在高速信号中的应用。通过实际案例和计算公式,详细阐述了UI在不同数据速率下的变化、在眼图分析中的关键作用,以及如何应对高速信号设计中的抖动和码间干扰等挑战。文章还提供了PCB布线和芯片设计中的UI优化技巧,帮助工程师提升高速信号设计的实战能力。

weixin_28683391的博客 468

在 NetBeans 6 中使用 Struts2 (ZT)

前言:NetBeans 6 和 Struts2 每次使用一种java编辑器或IDE(如eclipse)一个多小时后,总是发现自己已经在NetBeans里敲代码了。至于Struts2,这是一个融合了WebWork 和Struts1.X 的基于MVC的Web开发框架,使用相当广泛。 在当前的NetBeans6.1中你还找不到Struts2的影子(至少我所使用的版本里没有,据说已经有人在开发插件

wish_silence的专栏 1021

数据分析案例-基于红米和华为手机的用户评论分析

在智能手机市场日益繁荣的今天,红米与华为手机作为国产手机品牌的佼佼者,凭借其各自独特的品牌魅力和技术实力,赢得了广泛的用户群体和高度关注。随着技术的不断进步和消费者需求的日益多样化,用户对手机的期望已不仅限于基本的通讯功能,更涵盖了性能、拍照、续航、用户体验等多个方面。因此,深入探究红米与华为手机在用户长期使用过程中的实际表现,尤其是用户评论中所反映出的真实反馈,对于理解市场需求、优化产品设计及提升用户体验具有重要意义。本实验的背景正是基于这样的市场环境和技术发展趋势。我们旨在通过收集并分析红米与华为手机的

m0_64336780的博客 1万+

【ZT】Struts 2中实现文件下载(修正中文问题)

【ZT】 http://itemdetail.iteye.com/blog/868783Struts 2中实现文件下载(修正中文问题)在BlogJava上已经有一位作者阐述了文件上传的问题,地址是在Struts 2中实现文件上传,因此我就不再讨论那个话题了。我今天简单介绍一下Struts 2的文件下载问题。我们的项目名为 struts2hello,所使用的开发环境是MyEclipse 6,当然其实

koterror的专栏 531

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

zt: struts 2 convention plugin

今天突然想把ss3ex中的Codebehind Plugin换成Convention Plugin,找了些资料汇总如下: The Convention Plugin is bundled with Struts since 2.1 and replaces the Codebehind Plugin and Zero Config plugins。使用Convention插件,你需要将其...

dianyonglei7782的博客 146

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

struts2和spring2的集成配置(zt)

   从struts2.0.6的lib目录中复制下面的库文件到WEB-INF/lib目录下:commons-logging-1.1.jarfreemarker-2.3.8.jarognl-2.6.9.jarstruts-api-2.0.6.jarstruts-core-2.0.6.jarstruts-spring-plugin-2.0.6.jarxwork-2.

IT人生 653

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

struts傻瓜式学习(一天篇)(zt)

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1、MVC2、模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了。    该案例包括首页,用户登陆、网站向导页面。就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会~!@#$%^&    WEB Serv

天大地大 2103

两段关于MVC的比较,待验证--ZT

还是Spring MVC好 前两天花时间看了一下Struts2(WebWork)的教程,对比了一下,还是觉得Spring MVC更好。原因有几点:1。Spring MVC的controller+command object模式比Struts2的Action模式更安全一些。而在Struts2中,自动数据绑定发生在Action对象上。这样,在Action类中任何有Set方法的属性都有可能被htt...

dandfly的专栏 144

ZT--Struts2的action之间如何传值?

Struts2的action之间如何传值? njyu 2009-02-20    在struts2的action中,我要从action1转到action2,同时带参数过去,使用如下方式只可以传递一个值:    <result type="redirect" >/action2.action?test={test}</result>,这种凡是只...

dandfly的专栏 211

Struts中的下拉列表标签的使用(ZT)

Struts中的下拉列表标签的使用(ZT) 页面中经常用到下拉列表,下面是个人对于STRUTS中标签使用的一点总结: STRUTS中的下拉选择列表标签必须嵌套在 标签中,包括: 1. 2. 3. 4. 使用时嵌套如下: 或 或 其中property为ActionForm中对应的一个属性. 1. displayN...

wuyishi的博客 115

【zt】struts2 common-fileupload上传文件大小限制

[url]http://hanxin0311.iteye.com/blog/200990[/url] [code="java"] 1. org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2359629) ...

iteye_6404的博客 245

web.xml和struts-config.xml的配置(ZT)

为struts配置web.xml1,配置ActionServlet(only one),使其接收应用程序收到的所有请求分为两步,a:使用servlet元素配置servlet实例,做servlet-mapping       storefront     完全限定的类名         storefront     *.do   Struts的核心是struts-config.xml配置文件,在

let5flying的专栏 1192

struts2简介

1、简介       Struts2 是一个web应用框架。它不是一个Struts的新的发布版本,而是一个全新的框架。Struts2 是第二代基于Model-View-Controller (MVC)模型的web应用框架。 Struts2是java企业级web应用的可扩展性的框架。 它是WebWork和Struts社区合并后的产物。 这一版本的Struts2声称,Struts2会接近于原先版本S

taozpwater的专栏 899

运用Jakarta Struts的七大实战心法(zt)

当作者 Chuck Cavaness(著有《Programming Jakarta Struts》一书)所在的网络公司决定采用Struts框架之后,Chuck曾经花费了好几个月来研究如何用它来构建公司的应用系统。本文叙述的正是作者在运用Struts过程中来之不易的若干经验和心得。如果你是个负责通过jsp和servlet开发Web应用的Java程序员,并且也正在考虑采用基于Struts的构建方法的话

大飞工作室 823

(ZT) 用struts2.1.6作图片上传 (From http://rancedxk.javaeye.com/blog/497148)

用struts2.1.6作图片上传 最近项目里要用到上传图片功能,本来这是很简单的功能,不消半天就能搞定,可是我却捣鼓了两天,全因为下边的错误: ERROR [Engine] StandardWrapperValve[default]: Servlet.service() for servlet default threw exception java.lang.IllegalState...

Jave's blog 152

[摘]struts+spring+hibernate之间的关系与差别(ZT)

struts+spring+hibernate之间的关系与差别(ZT) 摘自:    http://bluecode.yculblog.com/ Struts:用来作VC部分,即控制和显示作用; ...

从新开始 143
上一篇: java学习总结-java集合详解与总结--ZT
下一篇: 两段关于MVC的比较,待验证--ZT
dandfly
博客等级 码龄17年 1粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值