图文解析Struts2框架执行流程

struts的架构图

(1)提交请求

客户端通过HttpServletRequest向servlet容器(即tomcat)提交一个请求。

请求经过一系列的过滤器,例如图中的ActionContextCleanUp和Other filter(SlterMesh,etc)等,最后被struts的核心过滤器FilterDispatcher控制到。

注:核心控制器2.1.3版本之后,struts的filterDispatcher核心控制器变成了StrutsPrepareAndExecuteFilte,如图:

被核心控制器控制到之后才会访问Actionmapper来决定是否调用某个action(即用户是否要请求某个action)。如果是其他资源请求例如jsp页面,不会用到action。

(2)移交控制权

如果要用到action,核心控制器将控制权交给ActionProxy(即是action的代理)。

ActionProxy获得控制权之后通过ConfigurationManager对象加载核心配置文件struts.xml。

Struts的action在这个配置文件进行配置,所以要加载它。

(3)创建ActionInvocation的实例

如果在struts.xml找到需要调用的action, ActionProxy会创建一个ActionInvocation的实例。

(4)调用action前的拦截器

拦截器是struts2非常重要的概念,是核心功能实现。Struts中的大部分功能通过拦截器实现。

Actioninvocation包括创建的action实例,同时包括另外非常重要的一部分------拦截器。

调用action前后还会调用很多的拦截器。

在调用action之前会依次调用用户所定义的拦截器。

(5)调用action的业务方法进行业务处理

当把action前的拦截器执行完之后才会调用action的业务方法进行业务处理,

然后返回一个Result(业务方法对应String类型的返回值,即是字符串,例如SUCCESS,INPUT,ERROR,NONE,LOGIN和用户自己在struts对应定义result标签name属性的值)

(6)匹配result

然后根据返回的字符串来调度我们的视图来匹配我们的struts.xml中对应action标签中的result标签。

一般来说返回一个jsp的页面,或者调用另外某一个action。

(7)反向执行拦截器

当返回视图之后并没有真正响应用户,还需要把执行过的拦截器倒过来反向执行一遍。

(8)响应客户端

当这些拦截器被反向执行之后,通过HttpServletResponse响应客户端的请求。

struts2框架执行流程大致这样,如有不对,敬请指出,谢谢!

时间: 2024-12-28 04:06:06

图文解析Struts2框架执行流程的相关文章

Struts2框架执行流程详解

1. Struts2源码导入对于struts2框架它的源代码我们主要使用三部分 struts2核心部分源代码 org.apache.struts2xxsrc\core\src\main\java struts2的xwork核心部分源代码src\xwork-core\src\main\java\com\opensymphony\xwork2 struts2的插件的源代码src\plugins2. 关于struts.xml配置文件中提示问题第一步在eclipse的window下首选面中查找xml c

struts2 框架处理流程

struts2 框架处理流程 流程图如下: -->FilterDispatcher过滤器在2.1.3以后被StrutsPrepareAndExecuteFilter所替代,使得在执行Action之前可以添加过滤器了: -->客户端初始化一个指向servlet容器的request请求,请求经过一系列的过滤器,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action. 1)Struts2框架的大致处理流程: ①     浏览器发出请求,例如请求/log

走进Struts2(一) — Struts2的执行流程及其工作原理

 Struts2是一套很优秀的Web应用框架,实现优雅.功能强大.使用简洁.能够说是Struts2是一款很成熟的MVC架构. 在我们学习Struts2时,最好是先学习它的执行流程.核心概念.从中得到启示.提升自己,而不不过学习怎么怎么使用它. 在网上看到这样一句话: 你千万不要成为一个仅仅会熟练使用框架的程序猿.那样.你会疲于奔命,你或许永远仅仅会使用 Hadoop ,而写不出一个 Hadoop ,你仅仅是一个 Hadoop程序猿,而不是一个分布式project师. 你或许永远仅仅会使用 Str

struts2的执行流程与配置详解

本章主要讲解Struts的执行流程以及Struts的配置以及访问servletApi 全部代码下载: github链接:链接 写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github:多谢: 1.Struts的执行流程: 1.服务器启动时: 加载项目web.xml 创建Struts核心过滤器对象, 执行StrutsPrepareAndExecuteFilter的doFilter 的 init()方法: 在StrutsPrepareAndExecuteFilter

Struts2框架运行流程及案例

Struts2框架 Struts2由Struts1和WebWork两个经典的MVC框架发展起来,是一个非常优秀的MVC框架.Struts2中的execute()方法不再与servlet API耦合,因而更容易测试.Struts2支持更多的视图技术,提供了基于AOP思想的拦截机制,以及更强大更容易使用的校验功能和ajax支持. 所有的Web项目都是基于请求/响应模式而建立的.在web.xml中配置Struts的核心Filter就能将Web的流程转入到Struts框架内. Struts2的运行流程图

ThinkPHP 框架执行流程分析

总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode/common.phpReadHtmlBehavior.class.phpRoute.class.phpHook.class.phpContentReplaceBehavior.class.phpWriteHtmlCacheBehavior.class.php ThinkPHP框架开发的应用的标准执

Nginx源码分析—HTTP框架执行流程

HTTP框架动态执行中的大概流程:先与客户端建立TCP连接,接收HTTP请求行.头部并解析出他们的意义,再根据nginx.conf配置文件找到一些HTTP模块,使其一次合作者处理这个请求. 为了精确地控制超时,还需要把读写事件放置到定时器中. 通过事件模块提东的ngx_handle_read_event方法和ngx_handle_write_event方法,可以把相应的事件添加到epoll中,我们可以起到在满足事件触发条件时,ngxin进程会调用ngx_event_t事件的handler回调方法

死磕 java线程系列之线程池深入解析——未来任务执行流程

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了线程池中普通任务的执行流程,但其实线程池中还有一种任务,叫作未来任务(future task),使用它您可以获取任务执行的结果,它是怎么实现的呢? 建议学习本章前先去看看彤哥之前写的<死磕 java线程系列之自己动手写一个线程池(续)>,有助于理解本章的内容,且那边的代码比较短小,学起来相对容易一些. 问题

Python之Django框架执行流程简介

我为大家简单阐述一下Django框架执行的大概流程. Django框架的执行流程    1.浏览器发送请求    2.服务器接收请求并将请求转发给Django框架    3.框架处理请求,如果是请求数据就去找model,如果请求时模版就去找template,然后将模板或数据读取并返回给服务器一个相应.    4.服务器再将相应转发给客户端 原文地址:https://www.cnblogs.com/chao666/p/12093912.html