在
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运作的方式: