Struts1学习笔记(Struts的工作原理)

来源:互联网 发布:动感单车音乐 知乎 编辑:程序博客网 时间:2024/05/16 00:28

1.读取配置

Struts框架总控制器(ActionServlet)是一个Servlet,我们在web.xml文件中配置成启动的Servlet。同时配置了struts-config.xml并在web.xml中把此文件作为一个参数配置给总控ActionServlet。也即是说,struts-config.xml最终会被总控ActionServlet使用。总控读取struts-config.xml后并为不同的struts模块初始化ModuleConfig对象(ActionConfigControlConfigFormBeanConfigForwardConfigMessageResourcesConfig对象)

2.发送请求

用户提交表单或调用URIWeb应用程序提交一个请求,请求的数据用HTTP协议上传给Web服务器

3.填充Form

结合上例,当派发的请求为*.do时,web服务器会转交给ActionServlet处理(Servlet处理模式)。同样,在交由ActionServlet处理时,会读取到<init-param>下的配置struts-config.xml。从此配置文件中找到Action,<action>中的属性name属性指定了这个Action所关取的ActionForm.  ActonForm被实例化并用HTTP请求的数据填充其属性,并且保存在SevletContextrequestsession)中,这样它们就可以被Action调用。 总结:当递交一个*.do的请求时,总控ActionServlet根据请求数据来填充Form

4.派发请求

完成Form填充后,ActionServlet会继续把这个请求及这个ActionForm(可以想成一个Bean)一并传给Action中的execute()方法。(可以在此方法中看到一个参数:ActionForm form. 而且在此方法中我们使用了LoginForm loginForm = (LoginForm)form;来进行强制转换,其目的就是为了得到ActionForm的子类的对象,以便后面可以直接获取这个实例所保存的属性)

5.处理业务

简单的说,就是Action类(具体表现为它的子类)调用其它业务逻辑模块进行相关处理。处理完成后会返回一个ActionForwad对象(此对象对应一个具体的jsp页面或另一个Action)给总控。

6.查找响应

当返回ActionForward对象给总控时,总控会根据这个返回的对象来找到一个对应的资源对象,通常是一个具体的jsp页面。

7.处理返回响应

把上一步找到的jsp页面处理结果返回给客户端。

8.再总结配置文件struts-config.xml

(1).<form-beans>下的每个<form-bean>就对应于一个ActionForm子类(type属性指明所对应的ActionForm)

(2).<action-mappings>下的每一个<action>就对应于一个Action子类,同样用type属性指明了对应的Action,并让name属性来关联相应的ActionForm  特别要注意<action>元素中必须配置path属性,且要以“/”来开头。在login.jsp中的action=.../login.do/loginAction配置的path属性对应,“.do”和总控的Servlet映射配置相对应。 可以这样理解:在提交一个.do请求时只能被告知请求要转交给总控处理,而加上/login后,便能保证总控会把请求派发给相应的Action

9.开发流程

1)搭建环境(2)编写Form并注册 (3)编写Action并注册 (4)编写jsp页面 (5)发布测试

说明:由于它们在开发中相互有依赖,所以建议在开发前最好有一个整体的构思图。