struts工作流程和学习方法

本文详细介绍了Struts框架的核心概念和工作原理,包括ActionForm的作用、Struts-config.xml配置文件的重要性,以及如何通过配置文件实现流程控制。此外,还探讨了Struts在实际应用中的常见问题及其解决方案。

通过配置进行流程的控制:

struts是经典的mvc模型的封装web框架.

在浏览器客户发送请求到服务器ActionServlet(struts核心处理器)接收到请求,

读取 struts-cofig.xml配置文件找到对应的frombean类接收客户端发送过来的参数进行封装.

然后找到对应的action类进行业务处理

action调用javabean业务组件处理请求,

处理完成后action负责将处理结果返回到客户端浏览器

 

Struts ActionForm执行步骤

(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射
(2)根据name属性,查找form bean的配置信息
(3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。
(4)假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。
(5)否则,就重新构建一个form bean的实例
(6)form bean的reset()方法备调用
(7)调用对应的setter方法,对状态属性赋值
(8)如果validatede的属性被设置为true,那么就调用form bean的validate()方法。
(9)如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行
struts的actionform其实不好,里面有一堆属性,虽然可以自动填充,但是你会发现,在很多情况下(比如你用到Hibernate)
你还要需要自动写一个数据库表的映射类,通常是domain.UserInfo.java,这样就和strutsform中的属性重复,所以他很多余,
struts1.1版本,保留了actionform,struts1.2中已经有了新的LazyValidatorForm,但仍然保留了原有的actionform,
而在struts 2.0中已经把actionform去掉了
下面是解决方法
a: 把actionform换成DynaActionForm ,和原来不同的是在dynaActionForm可以domain.UserInfo.java的一个实例做为他的一个属性
这样你就不需要在里面写一堆的get,set方法,只是在页面上绑定稍有不同
b: 把actionform换成org.apache.struts.validator.LazyValidatorForm,这样你完全不用写你的actionform这个类,直接在xml里面做
相应配置,当然也可以加上验证框架
警告:这个问题是陷阱,实际上struts的actionform很不好,非常麻烦,用久了你会发现他其实是多余的,所以这个问题你应该说他的坏处,
和怎么把actonform去掉,
 MVC:它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。MVC享有“全球第一设计模式”的美誉,是当前很流行的一种设计理念和思想,你要学好Struts,必要要让这种思想深入骨髓。(我在另一篇文章中对MVC进行过阐述,关于MVC的流程及例子请参阅拙作:http://blog.youkuaiyun.com/lenotang/archive/2008/06/18/2562348.aspx)

  J2EE:J2EE是使用Java技术开发企业级应用的一种事实上的工业标准。J2EE将组成一个完整企业级应用的不同部分纳入不同的容器(Container),每个容器中都包含若干组件(这些组件是需要部署在相应容器中的),同时各种组件都能使用各种J2EEService/API。其中最常用的容器就是WEB容器(就是我们常说的WEB服务器),里面最核心的两个组件就是JSP和SERVLET。而Struts就是基于这两种技术,依赖于WEB容器。

  WEB表现层:我们常说的J2EE四层体系架构:WEB表现层,业务逻辑层,持久层,数据库层。这是一种逻辑划分。WEB表现层的特点就是依靠WEB服务器,直接跟客户端(一般是WEB浏览器)打交道。Struts处于WEB表现层,主要就是接受并处理用户请求,并将处理结果响应给用户。

  框架:通俗地讲,框架就是一个“半成品”,它做了一些通用的东西让你去配置和扩展。框架的强大之处不是说它能让你做什么,而是它不能让你做什么!它使混乱的东西变得结构化。我们来打个比方。框架就像是一间有很多屋梁的房子,当你需要扩建房子的时候,譬如增加新的房间、窗户和过道或者在卧室增加一个壁炉,由于屋梁的限制,你并没有什么其他的选择。虽然较少的屋梁会让你有更多的选择,但是当台风来袭或者发生地震的时候,你让家人住在这样一间只有屋顶的房子里,恐怕不会觉得安全吧。总之,框架是在结构和创造力之间的一个精确的天平。

 然后,你开始跑一个稍微大点的用户登陆的应用,成功就跳转到我们的主页面,失败就继续回到登陆页面。我们引入ActionForm组件和对后台数据库的操作。这个时候MVC发挥作用了。ActionServlet和自己编写的Action分别充当前,后端控制器组件,DAO/DTO充当了模型组件,JSP充当视图组件。Struts-config.xml也变的饱满起来,上面开始多了些配置datasources,form-beans,action-mappings。做完后到网上找一些好的参考资料或者利用自己经典的Struts的案头书(最好是有图解),开始认真琢磨Struts的运行原理和执行流程,特别要好生体会ActionForm组件的作用和Struts-config.xml这个核心配置文件每一处用到的配置。这个时候,你应该开始有些领悟:我们自己写的Action还有ActionForm类一定要继承框架已有的Action和ActionForm,写完了之后还必须得将它们配置到Struts-config.xml中去。

  接着,你已经对Struts框架有了大致的了解,可能开始对Struts的其他主题感兴趣了,OK,现在扩充你的登陆应用吧。先加上验证,不然你的系统会不堪一击。验证分为客户端验证和服务器端验证。服务器端的验证我们可以在ActionForm里面的validate()方法里做,也可以在随后的Action类的execute()方法里做,甚至可以使用验证框架。这里大家要把重点方在验证框架的学习上。做好后再加上资源国际化I18N,针对不同区域不同语言的客户提供不同语言版本的页面显示。我们开始写资源属性文件,开始在Struts-config.xml里面配置,开始使用Struts自带的标签,等。这个里面涉及的知识点都很多,需要大家耐心细致地学习。大家在跑这个应用的时候会发现各种各样的异常和问题。不要害怕,这些错误都是我们的好朋友,我们要把它们通通都记录下来,并坚韧地排除掉它们。这里要记住:尽量避免重复犯错,不要在同一个地方跌倒两次。

 再接着,你把上面的都基本消化了,但是总隐隐觉得不够系统和完整,你就开始做几个CRUD的应用,完成普通的增删查改的工作。在做这些应用的过程中,你要认真总结核心配置文件Struts-config.xml里面的8个重要节点元素的配置以及它们的顺序,每个节点的重要属性,特别是里的子节点的属性是重中之重,一定要好好理解并灵活运用。

        你也要开始系统地学习Struts里面的标签。但这个时候千万不要追求大而全,只学习几种常用的标签就可以了,重点放在html,bean,还有logic标签上。这时候还有些小知识点你也许要用到,譬如:文件上传控件,防止信息重复提交,自定义标签,cookie的使用等等。这就是个相对比较耗时间和精力的阶段了,你要做的就是不断地参考,不断地思考,不断地总结,最好还能和志同道合的人不断地争论。

  慢慢地,你对Struts框架有了一个全局性的宏观把握,用它来完成一些小模块的开发已经没有太大问题,你已经开始志得意满了:Struts不过如此嘛!如果你到了这一步,我首先要恭喜你,你接近成功了。但我也要小心地提醒你:Struts里面还有很多东西值得挖掘!你不妨多问一下自己,软件有一个人开发的吗?页面我使用了良好的布局吗?页面导航都是那么简单吗?我的所有做法就不能有更简单的实现了吗?我对学习Struts框架的好处了如指掌了吗?好的,如果你想通了,带着这些问题,你就会重新披挂上阵,开始学习Struts的多模块开发,开始学习tiles框架,开始认真研读Struts的源代码,开始学习一些更简单有效的Action组件类和ActionForm组件类……,真应了一句古语:吾生也有涯,知也无涯!最后呢,大家可能会悟出一些道理:譬如Struts框架基本的好处就是用配置代替编码,它是一个半成品,是让我们扩展和配置的等等。

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值