ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:224.65KB ,
资源ID:9260663      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9260663.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Struts与struts2比较学习.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Struts与struts2比较学习.docx

1、Struts与struts2比较学习 通过比较来学习Struts和Struts2 Author:Ivan Date:2008.11.16 不管怎样也是我幸苦敲出来的,署个名。- 有错误欢迎指正。1.从Hello World程序开始比较Struts和Struts2程序流程:从login.jsp页面开始,输入用户名和密码,如果输入正确就打印欢迎,如果错误则返回login.jsp页面.(1)对于struts和struts2一样,首先建立login.jsp页面,这里使用基本的html标签。Struts的login.jsp页面Struts2的login.jsp页面这里的区别很小,就是action后缀不同

2、,这个是可以改的,所以可以认为这两个页面没有区别。而对于成功后的跳转页面success.jsp就一点区别都没有了,因为就打印一句,welcome!(2)对于Struts来说,每个页面就需要一个ActionForm(可以用struts提供的LazyDynaBean简化FormBean,所有页面都使用一个FormBean,后面再说),所以写一个FormBean,FormBean的作用是作为数据从页面传输数据的载体,和hibernate里的Bean是一样的作用。FormBean需要继承ActionForm,样子像这样。可以看出,此类其实就是个Pojo,但是还要继承ActionForm,这里就很累赘了

3、。所以struts2不需要继承,直接写Pojo就行了。并且Struts2不需要再写Action类了,它只要在Pojo里添加一个execute方法就可以了。(相当于是把ActionForm和Action集成了)可以看到,这个Action不需要继承任何的父类,也就是说Struts2没有侵入性。这里的execute方法格式统一,因为struts2默认会执行这个方法的。这里只需要返回一个字符串就行了,比下面的Struts的Action简单很多。(3)有了FormBean这个数据载体了,那就需要处理数据的类,在Struts里就是Action了,所有的Action都要继承Action类。如下这里覆盖了Ac

4、tion里的execute方法,里面对name和password做了些处理,很简单的(简洁起见就不链接数据库了。)这里对execute里的几个参数做下解释。ActionMapping:以键值对的方式保存了配置文件里的信息。ActionForm:传入一个ActionForm,这里传入的是LoginForm,所以下面做了强制转换,从这里也可以看出,为什么FormBean都要继承ActionForm了。ActionForward:就是个forward,里面保存了配置文件里配置的forward。(4)配置配置文件,对Struts来说,配置如下就是配置FormBean嘛!name就是起个别名,当要改变F

5、ormBean的时候,只要修改type指向需要的FormBean就可以了,而其他都不需要改变。就是配置哪个页面由哪个Action来处理的,path的用途就是,从此path过来的请求由此action来处理。input是处理完成后所要跳转的页面,对应LoginAction里的actionMapping.getInputForward()。name就是FormBean的名字,用哪个FormBean来存储数据,type就是对应Action了,使用哪个Action来处理此请求。validate是对应FormBean的,就是是否需要对FormBean里的数据做验证,这里先不验证。最后一个就是这个Actio

6、n的作用范围。forward是另一个forward,是供LoginAction的actionMapping.findForward(“success”)使用的。Struts-config.xml与web.xml一样,默认放在WEB-INF下,你可以放到任意的地方,只要把下面的web.xml文件里的init-patam的值指向该文件就可以了。对于Struts2来说,它有个struts.xml文件,放在src目录下,在web.xml也不需要任何的配置,默认就是在src下寻找此文件。该文件的配置如下。很明显,比struts-config.xml简单很多。解释一下,package这行是默认的就这么写。

7、在action里name就是Action的别名,作用就是,表单里的action=”login.action”,去掉.action后的名字与此相同则用该Action处理该请求。class就不用解释了吧。两个result分别对应Action里的返回值,对应那个就跳转到哪个页面。比struts-config.xml简洁很多吧。(5)最后是web.xml文件。Struts配置如下这个应该很简单了,就配置了一个servlet,这里使用的struts的ActionServlet类,它的作用就是将凡是已*.do结尾的url的请求,转给struts-config.xml去处理。Struts2与Struts不同

8、,它不是一个servlet而是一个filter。作用和struts里的servlet是一样的。区别就是那个路径是所有路径,这里会对所有路径过滤,当检测到后缀是以.action结尾的就把请求交给struts.xml处理。(6)总结从这个例子可以看出,Struts2的确比Struts更好。首先,它不需要继承任何一个类,就没有了侵入性。而Struts的FormBean必须要继承ActionForm,Action必须要继承Action。且execute方法比较复杂。再来就是,Struts2的所有文件都比Strus简化不少,方便了开发。补充:对于Struts2来说,它支持Annotation。可以不使用

9、struts.xml来配置,这样会简单一些,但是Annotation也是硬编码,所以个人认为基本不变的配置可以使用Annotation(因为简单嘛!),经常变化的就用xml。下面看看怎么修改。其实改动不大,首先是struts.xml文件不需要了。里面的内容可以注释掉,删掉也行。然后在web.xml文件里添加一个参数。如下图。这个参数的作用是扫描org.struts2.action文件夹下的所有类,来解析里面的Annotation。然后在LoginAction里面添加Annotation。如下很简单吧?作用不用解释吧?这里眼尖的应该会发现这里没有配置Action里面的名字,那Form提交的时候怎

10、么确认提交到哪个Action的?那么注意这里Form是提交到login,再看类名!是不是猜到什么了?这里Struts2会将LoginAction的类名去掉Action(如果原本就没有Action后缀,那么就保持不变),再全部小写去匹配login,如果匹配就使用这个Action,你可以试试修改login或者LoginAction,看还能不能提交了! 2.Struts和Struts2的数据验证 Struts和Struts2都有数据验证功能。这是毋庸置疑的。 对于Struts来说,只需要在FormBean里面覆盖父类的validate方法即可。如下所示红线部分即为Struts的验证部分。记得要将验证

11、启用,就是把struts-config.xml里的validate设为”true”,其实默认是true,上面是特意设为flase的。这样的话,只要密码长度小于3那么就直接返回了,而不会再由Action去处理了。这里返回一个ActionErrors,就是个键值对,保存错误信息。在loginjsp没有显示代码,所以不会显示这个错误信息。目前我还不知道如何在普通html文件里面显示错误,后面再看。这里先提供Struts标签的方式来显示错误信息。先要对上面的页面做点小调整。Validate方法里的new ActionMessage(“.”),改成这样这里的errors.password是passwor

12、d在属性文件里的键值。然后在src目录下创建一个message.properties属性文件。属性文件里errors.password所对应的值就是刚才的字符串了。接着在struts-config.xml添加上属性文件。最后再修改一下login.jsp文件。这里添加了taglib和这行标签,这样验证不通过就会显示属性文件里对应errors.password的值了。对于Struts2来说,添加验证比Struts复杂一点,首先需要让Pojo继承Struts2的Action类,这里继承ActionSupport.然后覆盖父类的validate方法,可以看出这个validate方法比struts的va

13、lidate方法简单很多,没有返回值,没有参数。也是验证密码长度,应为不要返回值,所以这里就有了addFieldError方法,作用和ActionErrors一样的,都是保存错误的。这里Struts2的验证还没写完,还要在struts.xml文件里添加验证错误后的跳转页面。如图所示,这里的name是input,这是Struts2里默认的错误处理名称。3.Struts与Struts2的验证框架Validator 对于Struts来说,所有的验证都写在FormBean里的话,不但麻烦,冗余代码也很多,同样的上面Struts2的验证也是,还侵入了Pojo。所以Struts和Struts2都提供了Va

14、lidator框架来简化验证。 Struts使用的是Comming-Validator框架,此框架需要两个配置文件,validator-rules.xml和validation.xml,前者的作用是声明需插入到框架中的验证例程。后者的作用是定义将哪个验证框架例程应用到哪个FormBean上去。对于validator-rules.xml文件,你一般不需要去动它,因为它被打包到jar文件里了,而且提供的功能基本够用了。而且如果要改动的话,需要取出此文件,修改完后再打包到jar里面去,很麻烦。 下面对原来的例子添加validator框架支持。首先,struts默认是不启动validator的,需要再

15、struts-config.xml里面启动这个validator框架,它是以插件的形式提供。 修改如下:这样就启动了validator框架了。解释一下参数。就是插件了,value的值是两个xml的路径,一个是自己创建的validation.xml文件,一个是在jar包里的validator-rules.xml文件。这两个文件就由pathnames这个属性来指明。接着修改FormBean,要使Validator起作用,必须使FormBean继承Validator提供的ActionForm,这里继承了ValidatorForm。另外,ValidatorForm自己实现了validate方法,所以F

16、ormBean里的validate方法不再需要了。这样看起来,这个FormBean比原来简单了不少。最后在validation.xml文件里面配置一下检验参数。这里的form标签里的name指定的是在struts-config.xml文件里面配置的form-bean的别名。接着是要检验的字段,这里检验password,检验的是required和minlength。下面两个arg指定的是属性文件里的属性值,现看下属性文件的配置。从这个开始解释,当验证不通过的时候,struts 会自动到属性文件里面找对应的错误信息,这里的required队形errors.required,minlength对应e

17、rrors.minlength。而这里的arg就是来填写此属性对应的值所对应的变量的,position=”0”就对应0,而key就会到属性文件里找对应的属性值,填到哪个0里面去。对于第二个arg,它的resource=”false”,所以它不会去查找属性文件,而是把key里的值直接填到1里面去。而这里面又是个表达式,它是指下面变量名为minlength的值,这里是3。并且这个3也会作为minlength检验的标准。当不满足required的时候就会显示password is required,而长度不够的时候就显示password must longger than 3。 这样就比原来的硬编码

18、灵活很多吧!Validator还有很多特性,像可以按Action来验证,而不适按Form来验证,可以扩展,可以验证索引属性,还能跨多个页面验证,除了服务器端的验证,Validator还能进行客户端的js验证。自己去摸索吧。 Struts2的验证框架就完全不同了。它有自己的一套验证框架。而实现起来也比较简单。对loginAction里的validate 可以先注释掉。然后在LoginAction的同一目录下新建一个LoginAction-validation.xml文件。这个文件的命名是统一的,类名-validation.xml。这个就是验证文件了,相当于struts.xml里的validati

19、on.xml 文件。配置感觉比validation.xml 文件清晰明了。看下。对于field标签不难理解吧?对应的是哪个field,验证什么东西(type),错误提示什么(message),最后一个validator是对逻辑的验证,以表达式的方式来验证,这里是name不能和password 相同。配置完这个文件就ok了,很简单吧。要看见那些错误信息。需要修改下jsp页面,改成Struts2标签,如下。然后运行下看看吧! 这里要说明的是,LoginAction还是要继承ActionSupport的。因为它要使用addFieldError方法。当然了,你可以结合validate方法和valida

20、tor框架来验证。对Struts来说,需要先调用super.validate(.),而Struts2则不需要。这里就是实现机制的不同,书上都有说,不想费口舌。4.与Spring集成先看Struts2的集成。Struts2提供了一个与Spring集成的jar包。struts2-spring-plugin-2.0.11.jar很明显,要集成Spring就要导入此包。接着当然是要Spring来管理这个Action了。Spring将操作类注入到Action中去。首先建立一个验证接口,来验证用户名和密码,用接口是为了以后扩展的方便,虽然这里只实现了一个类。接着实现这个接口。这里当然可以和hibernat

21、e,jpa集成了,后话。接着在LoginAction里面将这个CheckLogin添加进来,如下。这里只有一个set方法,当然是给Spring注入用的。那么怎么注入这个类呢。在注入方面,Spring的applicationContext.xml文件和普通的注入没有一点区别。注意到这里,scope=”prototype”。因为Spring默认是singleton的,而Struts则会为每个请求生成一个Action,这里就有了冲突,所以需要将scope设为prototype。那么问题就是怎么样让这个类的创建交给Spring,而不是Struts2。需要改动两个地方。一个是web.xml文件,一个是s

22、truts.xml。Web.xml文件里面添加一个lintener。而在struts.xml里面,将action的class属性,由类名改成Spring里配置的id名称即可。这样每次请求过来时,Struts会根据class里的名字向Spring要相应的bean了。关于Spring里的自动装配,Struts2也有支持的。找本书看吧。关于Struts的集成,有几种方式,这里只写一种推荐的方式。即和上面的方式相同,将CheckLogin注入到Action里面去。首先看看Spring的配置。注意到了吧!这里不是id而是name!并且这个name要和struts-configure.xml里面的acti

23、on的path相同,如下并且这里的type,由原来的类改成了spring里面的类了。如果你使用的是Spring2.5,那么就要导入spring-webmvc-struts.jar包。Spring2.5将web给从Spring core里面分离出来了!jar文件在Spring下的dist/modules里面。接着在web.xml里面配置一个listener这里的context-param的作用是指明Spring配置文件的位置。然后将Action改成如下即可。相对Struts2来说,Struts的集成还是繁琐一点的。5.集成AJAX 与AJAX的集成应该没什么区别。直接把AJAX添加进来就可以了。

24、我最近学习AKoss,所以就以AK为例集成。AK主要还是做的界面的。所以呢,重写jsp页面即可。(可以在jsp页面里面使用zk标签,zk有一套jsp的标签,参考相关内容。也可以直接写zul文件,这里直接写zul)关于AK。请看官方网站。www.akoss.orgZk文件名以zul为后缀,新建一个login.zul的文件。输入如下代码。无视错误!ZK目前就eclipse有个插件,也不完善,纯靠手写。这里只要name对应,form里面提交的位置对,那就可以了。修改web.xml文件,添加ZK配置。这样就可以了。访问时直接访问login.zul就可以了。看下结果。是不是美观了不少!这样就使用了ZK的组件了,ZK的AJAX特性就能使用了,具体参看ZK吧!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1