actionservlet struts流程

xiaoxiao2024-04-17  29

actionservlet struts流程 ActionServlet class 是整个struts 框架的骨干,也是主要的控制部件,它能够处理客户request 并且决定由哪个Action 处理 客户request。它象一个Action工厂,创建基于客户request清求的Action类的对象 ActionServlet class是一个简单的Servlet,就像其他的Servlet一样,它继承了javax.servlet.http.HttpServlet 并且实现了HttpServlet 的每一个生命方法,其中包括init(), doGet(), doPost(), and destroy() 。其中有两个主要的方法doGet() and doPost(). 它们的代码如下 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { process(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { process(request, response); } 这两个方法惊人的相似,它们都调用同一个单纯的方法process()。Struts的特效行为就是通过这两个方法开始的。process()方法处理所有的request并且还有下面的方法信号 protected void process(HttpServletRequest request, HttpServletResponse response); 当ActionServlte 得到一个清求时,执行下列步骤 1.doGet(), doPost()收到一个请求并调用process()方法 2.process()方法得到当前RequestProcessor 类和调用RequestProcessor.process()方法 3.RequestProcessor.process()方法为当前得到的请求服务。本方法从struts-config.xml文件里重新得到<action>元素,<action>元素是用来匹配从request对象上提交过来的path。做以上事情是通过匹配传来的<html:form>中action元素和<action>中path元素是否相同。代码如下 <html:form action="/Lookup" name="lookupForm" type="ch04.LookupForm" > <action path="/Lookup" type="ch04.LookupAction" name="lookupForm" > <forward name="success" path="/quote.jsp"/> <forward name="failure" path="/index.jsp"/> </action> 4.RequestProcessor.process()匹配了<action>后,开始寻找<form-beans>中的name属性并和<action>中的name属性匹配。代码如下 <form-beans> <form-bean name="lookupForm"     type="ch04.LookupForm"/> </form-beans> <action path="/Lookup" type="ch04.LookupAction" name="lookupForm" > <forward name="success" path="/quote.jsp"/> <forward name="failure" path="/index.jsp"/> </action> 5.当RequestProcessor.process()知道了FormBean的充分有资格的名字时,它开始创建或者重新得到一个池功能的 ActionForm对象并以<form-beans>的type属性命名,然后用request传来的值复给自己的date mumber(属性) 6.ActionForm 的属性复完值后,RequestProcessor.process()调用ActionForm.validate() 方法 ,用来检查传来的值是否有效。 7.当RequestProcessor.process()知道所有它需要的东西后,就开始服务这个请求。它做这些是通过用 Action的名字同<action>的type属性匹配,然后调用Action的execute()方法 8.当Action类从处理中返回后,它的excute()方法返回一个ActionForward对象。它是用来决定这个事务的目标。(view) RequestProcessor.process()重新控制,并且request被转到别决定的目标(view) 它是Structs应用程序的核心,它是主要的控制组件,用于处理客户端请求,决定哪一个Action类处理每个接收到的请求。 ActionServlet类,实质就是一个简单的servlet,和HttpServlet很相似,它继承自HttpServlet类,并且也实现了HttpServlet的生命周期方法,init,doGet,doPost,destroy。 所有指定的行为都起源于ActionServlet类的process()方法,它处理所有的请求。 ActionServlet接收到请求后,按照下面的步骤走: 1)doPost或者doGet收到请求并调用process方法。 2)process方法取得当前的RequestProcessor,然后调用它的process方法。 3)RequestProcessor.process()方法是所有请求得到真正处理的地方。这个方法从struts-config.xml文件找到<action>元素,取得它符合提交请求的路经。这个路经一般是用<html:form/>标记的action属性指定的。 4)如果process方法找到匹配的<action>,就会找到<form-bean>(其中的name属性和<action>元素的name属性一致)。 5) process()方法知道FormBean的完整命名后,会创建或者取得一个ActionForm的缓冲实例,这个ActionForm的命名由<form-bean>元素的类型属性命名,然后将请求中提交的值填入这个实例中。 6) 填充完数据后,process方法调用ActionForm的validate方法,对提交的值进行验证。 7)这时,process方法就可以开始处理请求了。它从<action>元素的type属性取得完整的Action类名,然后创建这个类,然后调用这个Action子类的execute方法。 8)Action类从processing返回后,execute方法返回一个ActionForward对象,这个对象用于确定这个事务处理的目标。process方法继续控制,请求也会被转发到确定的目标。 9)到这里,ActionServlet实例就完成了它处理请求的过程,并且已经准备好了为将来的请求进行服务

转载请注明原文地址: https://www.6miu.com/read-5015039.html

最新回复(0)