分类:
2008-09-09 16:39:13
Struts是一个简化MVC开发的非常优秀的Web应用框架,主要采用JSP、Servlet等技术实现。应用框架为开发者提供可重用的基础架构,为业务逻辑开发提供支持,减少底层代码工作量,从而减少开发Web应用系统的时间,提高开发效率。Struts应用框架主要包括4个部分:
1.模型(Model)。模型可以分为两个部分:系统的内部状态和业务逻辑实现。在Struts中Model实质上是一个Action类,也是一个Bean.
2.视图(View)。View由与控制器Servlet配合工作的JSP定制标签库构成,可简化应用系统的界面开发。
3.控制器(Controller)。本质上是一个Servlet,将客户端请求转发到相应的Action类,完成映射过程。
4.XML文件解析工具包。Struts用XML来描述如何自动产生一些Bean的属性,西外Struts还可以利用XML实现多国语言支持等功能。
Struts包含有很多组件,核心组件有4个,分别是ActionServlet组件、ActionMapping组件、ActionForm组件以及Action组件。
1.ActionServlet组件:控制器
ActionServlet组件在Struts框架中扮演的角色是控制器,其继承自javax.servlet.HttpServlet类。控制器ActionServlet组件负责将HTTP的客户请求信息封装后,根据配置文件的定义,再转发到适当的处理器。根据Servlet的标准,所有的Servlet必须再Web配置文件(Web.xml)中声明,因而ActionServlet也必须再Web Application配置文件(Web.xml)中定义。
2.ActionMapping组件:映射信息
将特定请求映射到特定Action的相关信息在ActionMapping组件中,ActionServlet将ActionMapping传送到Action类的perform()函数,Action将使用ActionMapping的findForward()函数,此函数返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个NULL值。
3.AcionForm组件:保存请求的参数
ActionServlet使用ActionForm来保存请求的参数。ActionForm实质上是一个JavaBean,这些Bean的属性名称与HTTP请求参数中的名称相对应。控制器将请求参数传递到ActionForm的实例,然后将该实例传送到Action类。ActionForm是一个抽象类,必须通过继承来实现自己的具体类。ActionForm首先要进行初始化,然后调用validate函数,检查请求参数的正确性和有效性。如果通validate函数的验证,ActionForm将被作为参数传给具体Action类的execute函数以供使用。
4.Action组件:将请求与业务逻辑分开
Action组件的功能类似于客户请求和业务逻辑处理之间的一个适配器,从而将请求与业务逻辑分开。分离以后可以使客户请求和Action类之间实现多个点对点的映射,此外Action组件还提供其他辅助功能,例如:认证、日志和数据验证等,具体的功能一般都在execute()函数中完成。
ActionServlet类作为中心Servelt将负责处理所有到来的用户请求,也就是说所有用户的请求首先到达的就是ActionServlet类。当ActionServlet接收到一个用户请求时,将执行如下流程:
1.检查和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的错误信息。
2.如果为ActionMapping配置了form,则获取相应的范围内的ActionForm实例。如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
3.根据ActionMapping配置信息决定时候需要验证表单。如果需要验证,就调用ActionFrom的validate()方法。
4.如果ActionForm的validate()方法返回null,或者返回一个不包含任何ActionMessage的ActionErrors对象,就表明表单验证成功,继续执行下一步。否则返回input属性指定的页面,并向用户显示ActionErrors集合中的错误信息。
5.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,则先创建这个实例,然后调用Action的execute()方法。
6.Action的execute()方法返回一个ActionForward对象,ActionServlet将请求转发到这个ActionForward对象指定的组件,通常是一个JSP视图或是其他的Action.
7.如果ActionForward对象指向一个JSP视图组件,则将JSP组件生成的动态网页返回个用户;如果ActionForward对象指定的仍然是一个Action,则又从第1步重新开始执行。