Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,1,Struts,2,3,4,本资料,来,来源,5,6,本资料,来,来源,7,8,9,10,11,12,CORBA:,公共对,象,象请求,代,代理体,系,系结构,),是由,OMG,组织制,订,订的一,种,种标准,的,的面向,对,对象应,用,用程序,体,体系规,范,范。或,者,者说,CORBA,体系结,构,构是对,象,象管理,组,组织,(OMG),为解决,分,分布式,处,处理环,境,境,(DCE),中,硬件和,软,软件系,统,统的互,联,联而提,出,出的一,种,种解决,方,方案,。,。,13,14,WEB,服务器,和,和应用,服,服务器,任何一,个,个,WEB,应用都,离,离不开,Web,服务器,以,以及应,用,用服务,器,器,,WEB,服务器,用,用于处,理,理,http,请求,,应,应用服,务,务器可,以,以提供,和,和,web,应用相,关,关的服,务,务,如,EJB,容器就,是,是一种,处,处理业,务,务逻辑,和,和事务,的,的应用,服,服务器,。,。,15,实现它,们,们。,16,17,18,19,20,21,22,23,24,25,26,3.,控制器,控制器由,ActionServlet,类和,Action,类来实现。,ActionServlet,类是,Struts,框架中的核心,组,组件,,ActionServlet,继承了,javax.servlet.http.HttpServlet,类,它在,MVC,模型中扮演中,央,央控制器的角,色,色。,ActionServlet,主要负责接收,HttP,请求信息。根,据,据配置文件,Struts-config.xml,的配置信息,,把,把请求转发给,适,适当的,Action,对象。如果该,Action,对象不存在,,ActionServlet,会先创建这个,Action,对象。,Action,类负责调用模,型,型的方法,更,新,新模型的状态,,,,并帮助控制,应,应用程序的流,程,程。对于小型,简,简单的应用,,Action,类本身也可以,完,完成一些业务,逻,逻辑。,当,ActionServlet,控制器收到用,户,户请求后,把,请,请求转发到一,个,个,Action,实例,如果这,个,个实例不存在,就,就先创建。然,后,后调用,Action,的,execute(),方法,,execute(),方法返回,ActionForward,对象,它封装,了,了把用户请求,转,转发给其他,WEB,组件的信息。,用,用户定义自己,的,的,Action,类时,即,Action,基类的子类时,,,,必须覆盖,execute(),方法,在,Action,基类中该方法,返,返回,null,。,27,4.,Struts,的配置文件,Struts-config.xml,一个用户请求,是,是通过,ActionServlet,来处理和转发,的,的,那么,ActionServlet,如何决定把请,求,求转发给哪个,Action,对象呢?这就,需,需要描述用户,请,请求路径和,Action,映射信息的配,置,置信息了。在,该,该配置文件中,,,,每个,Action,的映射信息都,通,通过一个,元素来配置。,这,这些配置信息,在,在系统启动的,时,时候被读入内,存,存,供,Struts,在运行期间实,用,用,在内存中,,,,每一个,元素都对应一,个,个,org.apache.struts.action.ActionMapping,类的实例。,1.4.2Struts,的工作流程。,对于采用,Struts,框架的,Web,应用,在,Web,应用启动时就,会,会被加载并初,始,始化,ActionServlet,。,ActionServlet,从配置文件中,读,读取配置信息,,,,把他们存放,到,到各种配置对,象,象中,例如,Action,的映射信息存,放,放在,ActionMapping,对象中。,当,ActionServlet,接收到一个请,求,求的时候,它,将,将执行如下流,程,程。,28,检索和用户请,求,求匹配的,ActionMapping,实例,如果不,存,存在就返回用,户,户请求路径无,效,效的信息。(,2,)如果,ActionForm,实例不存在,,就,就创建一个,ActionForm,对象,把客户,提,提交的表单数,据,据保存到,ActionForm,对象中。(,3,)根据配置信息,决,决定是否需要,表,表单验证,如,果,果需要验证,,就,就调用,ActionForm,的,Validator(),方法。(,4,)如果,ActionForm,的,Validator(),方法返回,null,或返回一个不,包,包含,ActionMessage,对象,就表示,表,表单验证成功,。,。(,5,),ActionServlet,根据,ActionMapping,实例包含的映,射,射信息决定将,请,请求转发给哪,个,个,Action,。如果相应的,Action,实例不存在,,就,就先创建这个,对,对象,然后调,用,用,Action,的,execute,()方法。,(6)Action,的,execute,()方法返回,一,一个,ActionForward,对象,ActionServalet,再把客户请求,转,转发给,ActionForward,对象指向的,jsp,组件。(,7,),ActionForward,对象指向的,jsp,组件生成动态,网,网页,返回给,客,客户。对,于,于以上流程的,流,流程,(4),,如果,ActionForm,的,Validator,()方法返回,一,一个包含一个,或,或多个,ActionMessage,的,ActionErrors,对象,就表示,表,表单验证失败,。,。此时,ActionServlet,将直接把请求,转,转发给包含用,户,户提交表单的,jsp,组件。在这种,情,情况下,不会,再,再创建,Action,对象并调用,Action,的,execute,()方法。图,1-14,显示了,Struts,响应用户请求,的,的工作流程。,演讲完毕,谢,谢,谢观看!,