首页 > 代码库 > Struts2之结果类型的使用和分析
Struts2之结果类型的使用和分析
一、学习案例:通过修改struts.xml中result的类型理解struts2结果类型的意义。
二、案例分析:我们通过修改type类型来分析struts2结果类型的使用和意义。
a)type=”dispatcher”
Result默认请求类型就是dispatcher,一般不需要写,也是用的最多的。
b)type=”redirect”
在struts.xml文件中通过在login1中配置:
<result type="redirect">/success.jsp</result>
通过在loginUI.jsp中输入登录信息,当跳转到success.jsp中后,页面没有获取到值。由此可以发现,redirect是做的重定向。
c)type=”redirectAction”
在struts.xml文件中通过在login1中配置:
<result type="redirectAction">login2</result>
通过在loginUI.jsp中输入登录信息,页面会跳转到loginUI2.jsp,同时浏览器的地址栏中地址为:.../login2.action。由此可以发现,redirectAction表示客户端向服务器请求了两次。
此种方式可以解决客户端重复刷新导致数据重复插入的问题,所以redirectAction很重要,也很常用。
当然很常用的前提是携带参数,不然就没什么意义了。
关于传递参数,我们可以在result路径中通过${}获取当前action中存在的成员变量。也可以是处理过后的成员变量。
比如项目中,在loginAction中的execute()方法中处理,然后经由${}获取传递。在loginUI2.jsp中获取显示。
注意:重定向也就是再次请求,所以在Login2Action中我们要接收参数,然后页面才能显示。
d)type=”chain”
执行步骤和c中一样,但是我们要注意浏览器地址的地址,并没有usernameAndPassword参数。由此可以发现,chain表示的是,服务器内的请求转发。
注意:
1、有一点是很容易区别的,那就是redirectAction重定向必须手动传递参数,而chain则不需要。
2、在之前的版本中,chain转发实际在服务器内传递的参数是我们请求时传递的参数,而在action中处理的参数在服务器内转发是不传递的。可能这是struts2改进的吧。关于这一点,我不太确定,不过实验证明就如我说的。所以我们还是以实验为真。关于这一点是否是struts2的改进,等我查看资料后再证实。
3、关于在服务器内做请求转发,我们一般不常用,所以关于chain,大家了解下就行。
e)我们可以从struts2-core-2.3.15.3.jar打开得到struts-default.xml文件中查看type都有哪几种类型。我们一般最常用的就是dispatcher和redirectAction。在我的网站“爱尚合伙人”中基本都是这两种,关于文件上传会用到stream,在讲到文件上传时再做介绍。
三、经验之谈:
a)大家始终要记着struts2的本质还是servlet,只不过struts2对此进行了高级的封装。也不是说struts2不重要,千万别误解,毕竟前辈们总结出来的东西都是有其精华的。大家在学习框架时,也要经常复习以前的东西,本质就是我们学习的理论所在。
b)对于框架的学习,我希望大家当成学习java基础一样,也要养成查文档的习惯,不要跟我之前一样,只是学些皮毛,要学会看源码,研究原理的东西。这样对我们学习东西来讲,不但速度快,同时,也会加深我们队知识的理解和记忆。
c)对于一些知识点我们要善于用实验验证。因为有时候我们在网上得到的知识随着工具的改进和提高,相对的知识点也有着完善和转变。对于这一点,大家无需担心,即使再怎么完善,一些常用的功能和代码,也是不会有太大变动的。我们始终要知道版本的提高是对现有知识的一种高度的总结,是向着好用便捷地方向发展的。而不是向着配置越来越复杂,使用越来越困难转变的。
四、参考项目:http://download.csdn.net/detail/u011638419/8191213
五、每日一乐:
我的女友是个吃货。
有一次她吃得很饱肚子很圆,摸着肚子说:“与其让男人把肚子搞大,还不如自己把肚子搞大。”
最终解释权归爱尚合伙人所有,转载请注明出处。
Struts2之结果类型的使用和分析