Struts1的工作原理

Struts1体系结构:


 

        客户端发送请求到服务端,被struts1的核心控制器ActionServlet接收,ActionServlet根据struts-config.xml里的映射关系找到对应的Action,若找不到就返回500错误到JSP页面。若有就在Action里的execute()方法里执行相应的逻辑操作,比如调用Model层的方法,然后通过ActionForward,跳转到对应的JSP页面。

 

 

Struts1工作原理图:

 

 Struts1的核心组件:

    ActionServlet:核心控制器

    RequestProcessor:处理异常的核心组件

    ActionForm:接收页面传过来的数据

    Action:控制器,主要是从ActionForm中接收页面传过来的数据,然后进行逻辑处理

    ActionForward:页面跳转,跳转到JSP页面

    ActionMapping:配置每个Action所对应的映射关系

 

1、初始化:Struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在web服务器启动时实例化ActionServlet类,ActionServlet会读取配置文件(struts-config.xml)的配置信息,为不同的Struts模块初始化相应的ModuleConfig对象:

    ActionConfig

    ControllerConfig

    FormBeanConfig

    ForwardConfig

    MessageResourcesConfig

 

当ActionServlet接收到来自客户端的请求时,就会去检索和请求相匹配的ActionMapping实例,如果没有找到则返回500错误。

 

如果找到了就检查对应的ActionForm实例是否存在,

    如果存在,先把该实例相关数据reset清空一下,然后就把用户提交的表单数据填充到ActionForm实例中;

    如果不存在,就创建一个ActionForm对象,再把用户提交的表单数据填充到ActionForm实例中。

 

根据配置,看看是否要对表单进行验证,如果需要验证,则调用ActionForm的validate方法对表单进行验证。

    如果验证没通过,则返回错误信息;

    如果不需要验证,或者需求验证但validate方法返回null或者是返回一个不包含ActionMessage的ActionErrors对象的话,表明验证成功。

 

ActionServlet根据ActionMapping实例所包含的映射信息决定将请求发送给哪个Action,如果对应的Action实例不存在,则创建该Action的实例,然后调用该Action的execute方法。

 

执行完Action实例的execute方法后,该方法会返回一个ActionForward对象。

 

ActionServlet再把客户端发过来的请求,转发给ActionForward对象所指向的JSP组件。

 

ActionForward所指向的JSP组件再生成动态网页,送回给客户端。