![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||||||||||||||
| Struts2学习(四):Action执行的时候发生了什么 | ||||||||||||||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-9-2 ![]() |
||||||||||||||||||
|
通过前面的学习,对Struts2的工作流程大致有了一个了解,如下图所示: 请求页面(view) FilterDispatcher(对请求进行分流) Action(处理请求,完成业务逻辑) 结果页面(view) 发送请求 返回响应 请求页面(view) FilterDispatcher(对请求进行分流) Action(处理请求,完成业务逻辑) 结果页面(view) 发送请求 返回响应 上图中的“分流”是指根据我们所请求的url把request交给某个指定的action来处理。 public void setName(String name) { System.out.println("name:"+name); this.name = name; } OK,在浏览器中输入http://localhost:8888/Struts/sayHello.jsp,这时我们发现后台打印出了name:CMTobby,CMTobby是我输入的name的值,这说明setName方法被执行了,奇怪啊,我们根本没有显式的调用这个方法啊,它是什么时候调用的呢?现在我们在setName方法里面设置一个断点,然后再在execute方法里面设置一个断点,再次运行我们的程序,结果显示setName方法在execute方法前面执行。 接着,无聊的我又做了一些测试: 1.把setName改为setName1,结果页面输出:Hello null,并且setName1为执行 2.在sayHello.jsp的form之外加了一个文本框,取名address,在HelloWorld中增加相应的域address、setAddress方法和getAddress方法,通过断点测试发现,setAddress方法不会执行。 基于以上测试,我认为在执行action的操作之前,首先会根据请求页面的form表当中所包含的参数来调用action中相应的set****方法,比如说,本例中,form中有name属性,因此会在执行execute之情调用setName方法,而address因为不在form中所以不会调用setAddress方法,这个机制是不是和我们前面所讨论的BeanUtils的copyProperties方法很像,实际上很多ORM框架都采用的这个机制,都是首先得到属性名再调用相应的set或者get方法,而不是直接访问的域。 本文来源:http://blog.csdn.net/CMTobby/archive/2007/07/26/1710368.aspx
|
||||||||||||||||||
| 文章录入:admin 责任编辑:admin | ||||||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||||||||||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|