ITEEDU

Struts Gossip: Struts 基本工作流程

Struts 对 MVC / Model 2 的实现方式中,担任Controller角色的是org.apache.struts.action.ActionServlet,它继承自 javax.servlet.http.HttpServlet,通常会直接使用ActionServlet,在web.xml中配置相关的组态,就如同配置一般的Servlet一样,您也可以配置一些相关的初始参数给ActionServlet使用。

在MVC/Model 2的架构中,理想上客户端不会直接要求资源或指定请求的JSP页面,所有客户的请求都必须发送至Controller,由Controller决定该转发给哪一个对象进行处理、决定该由哪一个View页面进行显示与响应。

(为了避免客户直接要求JSP页面或相关资源,您可以将JSP页面或相关资源放到Web应用程序的/WEB-INF目录下,让客户端只能透过 Controller的forward要求资源)

在Struts中,担任Controller的是ActionServlet,所有的请求都发送给ActionServlet,对于 ActionServlet来说, doGet()会调用doPost(),所以无论请求是GET或POST在行为上都是相同的。ActionServlet藉由组态档struts- config.xml知 道如何分配对象来处理请求,这包括了org.apache.struts.action.ActionMapping、 org.apache.struts.action.ActionForm、org.apache.struts.action.Action等物件的分 配,struts-config.xml是整个Struts运作的重心。

ActionServlet会将处理的控制权暂时交给Action对象,在Action中,您可以藉由一些数据传输对象(Data Transfer Object)、辅助类别(Helper Class)等Model来完成业务请求,Struts使用JSP/Servlet的setAttribute()和 getAttribute()方法来与View进行沟通。Action应当传回ActionForward对象给ActionServlet,之后 ActionServlet根据 ActionForward中的信息来进行forward或include View的动作,由View抽取Model数据并显示处理的结果。

Struts的View部份可以是静态网页、JSP网页、Struts自订卷标,Struts自订卷标可以与Struts的一些对象及资源文件合作使用,也配合使用其它自订标签,像是JSTL、JSF等。

Struts 1.1后新增org.apache.struts.action.RequestProcessor类 别,有关于使用者请求的对象分配等动作已经大部份交由RequestProcessor来处理,下图是ActionServlet接收到请求之后的一些主 要动作,在之后的各主题说明中,您可以藉由这张图您将可以了解struts-config.xml的组态设定意义,以及Struts运作的方式:
Struts 工作流程