Struts2与Struts1的区别

本文深入探讨了Struts2框架的核心特性,包括表单处理、对象注入、Action实现方式、数据类型注入、getter/setter方法兼容性以及初始化Spring容器的多种方法。重点介绍了与Struts1相比的优势,如降低耦合度、简化配置和提高开发效率。通过实例展示了Struts2如何灵活地处理不同类型的参数和数据注入,以及如何利用拦截器进行参数解析。同时,对比了Struts2与WebWork在初始化Spring容器上的差异,强调了Struts2在这一领域的改进。

1、相对struts1而言,没有了formbean,表单代码不需要一定要使用struts提供的html标签,一般的html表单标签照样可以使用,耦合度学习成本都低了很多。想想struts1,不用它自身提供的html标签,表单元素就不能注入,除action外,还得另外再写一个formbean,而且只能注入java基本数据类型,代码冗余太多,配置太复杂;

  2、之前使用struts1时,除标签使用不习惯外,就是对象的属性注入了,struts2终于可以使用(对象.属性)的方式进行注入,例:<INPUTname=picture.id>,方便啊!!

  3、action不用继承任何父类,也不用实现任何接口,相当于一个简单的对象了,这比webwork高级了。从页面传下的参数以及从action传到页面的参数,都是通过拦截器完成的。以下是常用的几种实现action的方式,当然也有其他方式,具体可以看看API。

  1) Action可以不用继承任何父类实现任何接口,不用与ServletAPI耦合,也不用与struts2API耦合可以只是一个普通的pojo,包含getter和setter方法以及execute方法。运用struts2的拦截器机制,负责解析用户的请求参数,并将请求参数赋值给Action对应的属性。但,这种action类没有与javabean交互,没有将业务逻辑操作的结果显示给客户端。

  2)接口Action,这个接口只定义execute方法和5个标准字符串常量:SUCCESS/NONE/ERROR/INPUT/LOGIN,可以简化execute方法的返回值。

  3)继承ActionSupport,ActionSupport是个工具类,已经实现了Action接口,还实现了Validateable接口,提供了数据校验功能。具体可以看API文档。重写Validateable接口中定义的validate方法,如果表单输入错误,则将错误添加到ActionSupport的fieldErrors中,然后通过OGNL表达式输出。validate方法在execute方法之前执行,数据校验错误,请求将被转发到input逻辑试图处。当然,也可不重写validate方法,运用配置文件进行数据校验。此外,ActionSupport提供了国际化信息的能力getText。

  4、List元素类型的注入,webwork提供了数组类型的输入,但是对象List的注入不行。举个简单的例子,上传图片时,用户可能会一次性上传一张,也可能会一次性就上传n张,不确定的对象个数。

  1)private List< PICTURE> pictureList;//图片对象list图片1<INPUT name=pictureList[0].detion>图片2<INPUTname=pictureList[1].detion>输出:< ?xml:namespace prefix =ww/>

  < ww:iterator value="pictureList"><ww:propertyvalue="detion"></ww:property></ww:iterator>2)private String detion;//字符串数组描述1< INPUTname=detion>描述2< INPUTname=detion>输出:< ww:iteratorvalue="detion"><ww:property>< /ww:property></ww:iterator>

  webwork第一种方式是不能自动注入的,但是第二种可以;现在struts2两种方式都能实现,方便!!

  5、Struts标签只认标准的getter和setter方法,而对于boolean类型的属性,eclipse自动生成的get、set方法是不标准的。比如:定义boolean值属性时是isXxxxx,用Eclipse生成的getter和setter就是setXxxxx(booleanisXxxxx),isXxxxx(),而Struts2.0的转换器对boolean的转换用的是setIsXxxxx(booleanisXxxxx),getIsXxxxx();又比如boolean属性名为xxx,Eclipse生成的方法为isXxx()和setXxx(booleanxxx),而struts2用户的是getXxx(),setXxx(booleanisXxxxx)。但是Eclipse自动生成的get、set方法,ibatis能够自动注入,而标准的get、set方法ibatis也能注入。

  6、 初始化spring容器的两个方式:

  1)ContextLoaderListener。如果没有contextConfigLocation的配置,spring自动查找WEB-INF路径下的applicationContext.xml文件。

 

  2)Listener是Servlet2.3之后才出现的规范,所以如果Web服务器不支持2.3以上的规范,则listener无法使用,那么就采用load-on-startup的Servlet,与Listener的作用大致相同。Listener总比所有的Servlet更优先加载,因此,采用ContextLoaderListener创建ApplicationContext的时机更早。

 

  ok,先写这么多吧。因为跟webwork差不多,所以也就没啥感觉了。总之,80%的时候都是用它20%的功能,其余20%的时候多查查资料也能搞定,总的来说这本Struts2权威指南还是有一定价值的。

 

  编辑推荐

  在Eclipse中开发struts应用程序

  手把手教你在Eclipse中配置开发Struts

  Eclipse下开发struts完整解决乱码问题

  Struts相关背景介绍

  使用Easy Struts for Eclipse开发Struts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值