Struts2学习笔记1----Struts2框架action与view之间的参数传递小测试!

B/S架构中一个简单的struts2回路,采用MyEclipse创建Web Project:

1 视图层提交请求(如:360浏览器界面):


点击“计算”按钮,向servlet提交了一个请求;

页面源码为Jsp,请求中包含了form表单中的信息



2  servlet过滤请求



在Web项目中web.xml中配置过滤器,如上图,这里只负责匹配.action, *的内容这里无需理会,但会传递给Action代理;

所有提交的add.action由工具类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤后转到Action代理(WebWork 核心 API);

3  Action代理

相关配置(Struts.xml)如下:



从过滤器传递来的信息中匹配到acttion的name="add";跳到action类com.action.CalAction


4  开发者自定义action类的执行过程

代码如下:






CalAction执行过程如下:

a)调用set方法将浏览器界面输入的值传递过来并一一赋值给CalAction中自定义的私有变量(一般建议自定义的变量名与视图层传递过来的参数名保持一致);

注意:set方法后面的属性名由Jsp中设置的input name所决定,两者必须一致;例如在Jsp中定义数字1的name="num0";则传递参数至action的方法名为setNum0();

b)在默认的execute()方法中对视图层传递过来的参数进行处理;

这里对传递过来的参数进行处理,若为数字类型则数字相加,若为字符串类型则合并字符串

c)execute()方法返回sucess,在struts.xml配置中按result的name属性匹配到<result>/index.jsp</result>(<result>等同于<result name="success">),

页面跳转到/index.jsp并通过getRes()方法获取JSP中${res}所请求的参数res;

注意:get方法后面的属性名与视图层没有直接关系,它只需要确保与CalAction定义的属性名一致即可;

Jsp中请求的参数实质是CalAction类定义的私有属性;

5 浏览器将更新的Jsp页面展示出来


小结:本次测试重点在于判断action从视图层中获取参数及传递参数到视图层的过程;

了解了其中的过程后才能相当灵活地处理这些参数;

例如,上面的例子我们若将execute方法中的逻辑写到getRes()方法中,execute方法中只负责return "success"去更新页面,我们会得到下面的结果。


以下为更新的方法源码:



我们可以看到第二次获取的参数与第一次并不一样,这是因为我们每次调用get方法传递参数的时候都会对参数值进行一次修改,

我们输入的res为12+a=;第一次调用get方法时res="12+a="+"12"+"a",也就是12+a=12a;

第二次获取同样的参数,再次调用get方法,res="12+a=12a"+"12"+"a",也就是12+a=12a12a;

所以一般情况下不建议在get方法中进行逻辑运算,这叫剑走偏锋;

但如果想循环调用或者做一些验证之类的话,这也不失为一个比较好的偏方吧。


以下为老师提供的struts2的原理图,留个纪念:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值