通过比较来学习Struts和Struts2

上传人:飞*** 文档编号:42841731 上传时间:2018-06-03 格式:DOC 页数:19 大小:473KB
返回 下载 相关 举报
通过比较来学习Struts和Struts2_第1页
第1页 / 共19页
通过比较来学习Struts和Struts2_第2页
第2页 / 共19页
通过比较来学习Struts和Struts2_第3页
第3页 / 共19页
通过比较来学习Struts和Struts2_第4页
第4页 / 共19页
通过比较来学习Struts和Struts2_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《通过比较来学习Struts和Struts2》由会员分享,可在线阅读,更多相关《通过比较来学习Struts和Struts2(19页珍藏版)》请在金锄头文库上搜索。

1、 通过比较来学习 Struts 和 Struts2Author: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 页面这里的区别很小,就是 ac

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

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

4、数据载体了,那就需要处理数据的类,在 Struts 里就是 Action 了,所有的 Action 都要继承 Action 类。如下这里覆盖了 Action 里的 execute 方法,里面对 name 和 password 做了些处理,很简单的 (简洁起见就不链接数据库了。 )这里对 execute 里的几个参数做下解释。 ActionMapping:以键值对的方式保存了配置文件里的信息。 ActionForm:传入一个 ActionForm,这里传入的是 LoginForm,所以下面做了强制转换,从 这里也可以看出,为什么 FormBean 都要继承 ActionForm 了。 Actio

5、nForward:就是个 forward,里面保存了配置文件里配置的 forward。(4)配置配置文件,对 Struts 来说,配置如下就是配置 FormBean 嘛!name 就是起个别名,当要改变 FormBean 的时候,只要 修改 type 指向需要的 FormBean 就可以了,而其他都不需要改变。 就是配置哪个页面由哪个 Action 来处理的,path 的用途就是,从此 path 过来的请求由此 action 来处理。input 是处理完成后所要跳转的页面,对应 LoginAction 里的 actionMapping.getInputForward()。name 就是 For

6、mBean 的名字,用哪 个 FormBean 来存储数据,type 就是对应 Action 了,使用哪个 Action 来处理此请求。 validate 是对应 FormBean 的,就是是否需要对 FormBean 里的数据做验证,这里先不验证。 最后一个就是这个 Action 的作用范围。forward 是另一个 forward,是供 LoginAction 的 actionMapping.findForward(“success”)使用的。Struts-config.xml 与 web.xml 一样, 默认放在 WEB-INF 下,你可以放到任意的地方,只要把下面的 web.xml 文

7、件里的 init- patam 的值指向该文件就可以了。对于 Struts2 来说,它有个 struts.xml 文件,放在 src 目录下,在 web.xml 也不需要任何 的配置,默认就是在 src 下寻找此文件。该文件的配置如下。很明显,比 struts-config.xml 简单很多。解释一下,这行标签,这样验证不通过就会显示属性文件里对应 errors.password 的值了。对于 Struts2 来说,添加验证比 Struts 复杂一点,首先需要让 Pojo 继承 Struts2 的 Action 类,这里继承 ActionSupport.然后覆盖父类的 validate 方法,

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

9、代码也很多, 同样的上面 Struts2 的验证也是,还侵入了 Pojo。所以 Struts 和 Struts2 都提供了 Validator 框架来简化验证。 Struts 使用的是 Comming-Validator 框架,此框架需要两个配置文件,validator- rules.xml 和 validation.xml,前者的作用是声明需插入到框架中的验证例程。后者的作用 是定义将哪个验证框架例程应用到哪个 FormBean 上去。对于 validator-rules.xml 文件, 你一般不需要去动它,因为它被打包到 jar 文件里了,而且提供的功能基本够用了。而且 如果要改动的话,需

10、要取出此文件,修改完后再打包到 jar 里面去,很麻烦。下面对原来的例子添加 validator 框架支持。首先,struts 默认是不启动 validator 的,需要再 struts-config.xml 里面启动这个 validator 框架,它是以插件的形式提供。修改如下:这样就启动了 validator 框架了。解释一下参数。就是插件了,value 的值是两 个 xml 的路径,一个是自己创建的 validation.xml 文件,一个是在 jar 包里的 validator- rules.xml 文件。这两个文件就由 pathnames 这个属性来指明。 接着修改 FormBean

11、,要使 Validator 起作用,必须使 FormBean 继承 Validator 提供的 ActionForm,这里继承了 ValidatorForm。另外,ValidatorForm 自己实现了 validate 方 法,所以 FormBean 里的 validate 方法不再需要了。这样看起来,这个 FormBean 比原来简单了不少。 最后在 validation.xml 文件里面配置一下检验参数。这里的 form 标签里的 name 指定的是在 struts-config.xml 文件里面配置的 form-bean 的 别名。接着是要检验的字段,这里检验 password,检验的

12、是 required 和 minlength。下面 两个 arg 指定的是属性文件里的属性值,现看下属性文件的配置。从这个开始解释,当验证不通过的时候, struts 会自动到属性文件里面找对应的错误信息,这里的 required 队形 errors.required,minlength 对应 errors.minlength。而这里的 arg 就是来填写此属性对应的值所对应的变量的,position=”0”就对应0,而 key 就会到属性文件里找对应的属 性值,填到哪个0里面去。对于第二个 arg,它的 resource=”false” ,所以它不会去查 找属性文件,而是把 key 里的值直

13、接填到1里面去。而这里面又是个表达式,它是指下面 变量名为 minlength 的值,这里是 3。并且这个 3 也会作为 minlength 检验的标准。当不满 足 required 的时候就会显示 password is required,而长度不够的时候就显示 password must longger than 3。这样就比原来的硬编码灵活很多吧!Validator 还有很多特性,像可以按 Action 来验 证,而不适按 Form 来验证,可以扩展,可以验证索引属性,还能跨多个页面验证,除了服 务器端的验证,Validator 还能进行客户端的 js 验证。自己去摸索吧。Struts2

14、 的验证框架就完全不同了。它有自己的一套验证框架。而实现起来也比较简 单。 对 loginAction 里的 validate 可以先注释掉。然后在 LoginAction 的同一目录下新建一个 LoginAction-validation.xml 文件。这个文件的命名是统一的,类名-validation.xml。这 个就是验证文件了,相当于 struts 里的 validation.xml 文件。配置感觉比 validation.xml 文件清晰明了。看下。对于 field 标签不难理解吧?对应的是哪个 field,验证什么东西(type),错误提示什么 (message),最后一个 val

15、idator 是对逻辑的验证,以表达式的方式来验证,这里是 name 不能和 password 相同。 配置完这个文件就 ok 了,很简单吧。要看见那些错误信息。需要修改下 jsp 页面,改成 Struts2 标签,如下。然后运行下看看吧!这里要说明的是,LoginAction 还是要继承 ActionSupport 的。因为它要使用 addFieldError 方法。当然了,你可以结合 validate 方法和 validator 框架来验证。对 Struts 来说,需要先调 用 super.validate(.),而 Struts2 则不需要。这里就是实现机制的不同,书上都有说, 不想费口

16、舌。4.与 Spring 集成先看 Struts2 的集成。 Struts2 提供了一个与 Spring 集成的 jar 包。struts2-spring-plugin-2.0.11.jar 很明显,要集成 Spring 就要导入此包。接着当然是要 Spring 来管理这个 Action 了。 Spring 将操作类注入到 Action 中去。 首先建立一个验证接口,来验证用户名和密码,用接口是为了以后扩展的方便,虽然这里 只实现了一个类。接着实现这个接口。这里当然可以和 hibernate,jpa 集成了,后话。接着在 LoginAction 里面将这个 CheckLogin 添加进来,如下。这里只有一个 set 方法,当然是给 Spring 注入用的。那么怎么注入这个类呢。在注入方面, Spring 的 applicationContext.xml 文件和普通的注入没有一点区别。注意到这里,scope=”prototype” 。因为 Spring 默认是 singleton 的,而 Struts 则会为 每个请求生成一个 Act

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号