struts2的actionMapper是做什么的?

源码如下,
package org.apache.struts2.dispatcher.mapper;

import com.opensymphony.xwork2.config.ConfigurationManager;
import javax.servlet.http.HttpServletRequest;

public interface ActionMapper {
    ActionMapping getMapping(HttpServletRequest var1, ConfigurationManager var2);

    ActionMapping getMappingFromActionName(String var1);

    String getUriFromActionMapping(ActionMapping var1);
}

一个请求在 Struts2 框架中的处理大概会经过以下几个步骤:

  • 1、客户端发出一个指向 Servlet 容器(例如Tomcat)的请求。

  • 2、这个请求会经过几个过滤器 Filter(ActionContextCleanUp 可选过滤器、其他 Web 过滤器如 SiteMesh 等),最后到达 FilterDispatcher 过滤器。

  • 3、接着 FilterDispatcher 过滤器被调用,FilterDispatcher 询问 ActionMapper 来决定这个请求是否需要调用某个 Action。

  • 4、如果 ActionMapper 决定需要调用某个 Action,FilterDispatcher 把请求的处理交给 Action 对象的代理(ActionProxy)。

  • 5、ActionProxy 通过配置管理器(Configuration Manager)读取框架的相关配置文件(struts.xml 以及它包含的 *.xml 配置文件),找到需要调用的 Action 类。

  • 6、找到需要调用的 Action 类后,ActionProxy 会创建一个 ActionInvocation 的实例。

  • 7、ActionInvocation 在调用 Action 的过程之前,会先依次调用相关配置拦截器(Intercepter),执行结果返回 结果字符串。

  • 8、ActionInvocation 负责查找 结果字符串 对应的 Result,然后执行这个 Result,再返回对应的结果视图(如JSP等等)来呈现页面。

  • 9、再次调用所用的配置拦截器(调用顺序与第7步相反),然后响应(HttpServletResponse)被返回给浏览器。

http请求,进入ActionContextCleanup(session,Attribute保留),走一些过滤器,filter,然后进入struts2 的FilterDispatcher
然后进入ActionMapper,这个是用来判断请求是否 需要struts2处理,如果需要,那么由ActionProxy来接管,通过配置管理我们可以找到我们的struts.xml,然后进入真正做事的Action。

另:struts-default.xml文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。
这些拦截器是以key-vale对的形式配置在struts-default.xml中,其中name是拦截器名字,就是后面使用该拦截器的引用点,value则指定拦截器的实现类。

如:struts-default.xml文件中的一项,

<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />

则定义了actionMapper,org.apache.struts2.dispatcher.mapper.DefaultActionMapper是ActionMapper接口的实现。

ActionMapping类
将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的execute()方法,Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null.

ActionMappings算是一个web控制层的数据字典,这个数据字典里面存放在Action和ActionForward的信息,在程序执行的过程中,查阅这个数据字典,然后达到相应的位置,执行完成以后,再查询这个数据字典,转发特定的信息。在一个web应用中,每个资源都必须通过URI来进行引用。 资源包括HTML页面、JSP页面和定制动作。为了给定制动作一个 URI或者说路径,Struts框架提供了一个 ActionMapping对象。 ActionMaping是Struts的一个核心对象,通常我们不用手写ActionMapping类,它只需要在配置文件中配置就行。

猜你喜欢

转载自blog.csdn.net/qq_35462323/article/details/87192751