看一下Struts2官方给出的体系结构图

解释
- 客户端发出一个HttpServletRequest请求(action或jsp)。
- 请求经过一系列的过滤器链(过滤器链包括可选的 ActionContextCleanUp 过滤器,用于系统整合技术,如 SiteMesh 插件)。
- FilterDispather是struts2的核心控制器,此过滤器须在web.xml中进行配置,通常为过滤器链中的最后一个过滤器。
<!-- 配置struts2的核心过滤器 -->
<filter>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 过滤器映射 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<!-- /*表示所有的请求都需要经过这个过滤器过滤 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
- 通过FilterDispatcher查找ActionMapper,以确定这个请求是否需要调用某个 Action。
- 如果ActionMapper确定需要调用某个Action,FilterDispatcher 将控制权交给ActionProxy。
- ActionProxy依照框架的配置文件(struts.xml),找到需要调用的Action类
- ActionProxy会创建一个ActionInvocation的实例。
- ActionInvocation会先调用相关的拦截器(Action 调用之前),最后调用 Action。
- Action调用返回结果Result,根据之前的配置文件(struts.xml),查找响应的转发路径(此路径可以是一个jsp文件或者FreeMarker的模版技术的网页呈现,也可以是一个Action类等)。
- 按照相反的方向调用相关的拦截器链(Action调用之后),返回一个HttpServletResponse,然后再通过过滤器链返回给客户端进行呈现。
网友评论