Struts2架构分析和执行机制
实例分析
1.在浏览器中输入url地址后,会通过http协议发送给tomcat,tomacat收到请求后查看訪问的是哪个
webapplication(例如以下图的Struts2_0100_Introduction),tomcat把Struts2_0100_Introduction交给相应的
webapplication程序去处理。
2.之后会參考Struts2_0100_Introduction下的相应的web.xml文件,将请求交给Struts2Filter去处理
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Struts2执行机制
从图中能够看出一个请求在Struts2中的处理步骤例如以下:
1、client初始化一个指向Servlet容器(比如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器。
这个过滤器对于Struts2和其它框架的集成非常有帮助,比如:SiteMesh Plugin)。
3、接着FilterDispatcher被调用。FilterDispatcher询问ActionMapper来决定这个请求是否须要调用某个
Action;
4、假设ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到须要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)
的调用。
8、一旦Action运行完成,ActionInvocation负责依据struts.xml中的配置找到相应的返回结果。返回结果通常
是(但不总是,也可能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程中能够
使用Struts2框架中继承的标签。在这个过程中须要涉及到ActionMapper。
核心控制器
FilterDispatcher是早期struts2的过滤器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、
2.1.8。StrutsPrepareAndExecuteFilter名字已经非常能说明问题了,prepare与execute,前者表示准备,能够说是指
filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法。即将request请求,转发给相应的
action去处理。能够把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,能够在这两个过滤器之间加上我们自
己的过滤器.!StrutsPrepareAndExecuteFilter是控制器的核心。就是MVC的Struts 2实现中控制层(Controller)的
核心。
三个初始化參数:
1、config參数:指定要载入的配置文件。逗号切割。
2、actionPackages參数:指定Action类所在的包空间。逗号切割。
3、configProviders參数:自己定义配置文件提供者,须要实现ConfigurationProvider接口类。
逗号切割。
想想为什么这么麻烦。中间要经过一次中转?
将请求和拿到的结果(视图)分开,要想换成别的视图直接配一下result就能够了。更灵活。和我MVC非常像。
Struts2架构分析和执行机制的更多相关文章
- NopCommerce架构分析之四----插件机制
NopCommerce支持灵活的插件机制,所谓Web系统插件,其实也就是可以像原系统的一部分一样使用. Web系统的使用方式就是客户端发送一个请求,服务端进行解析.在asp.net MVC中对客户请求 ...
- Android架构分析之Android消息处理机制(二)
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中我们看了一个使用Handler处理Message消息的样例,本文我们 ...
- ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册(转)
ECMALL模板解析语法与机制 http://www.nowamagic.net/architecture/archt_TemplateSyntaxAndAnalysis.php ECMALL模块开发 ...
- Android架构分析之Android消息处理机制(一)
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在这个系列文章中我们将来分析Android消息处理机制. 本文介绍了一个使用Han ...
- tomcat架构分析 (Session管理)
Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到.在开发app时,我们只是获取一个session,然后向session中存取数据,然后再销毁session.那么如何产生se ...
- NopCommerce架构分析(转载)
原文 一,NopCommerce架构分析之开篇 NopCommerce是.net开源项目中比较成熟的一款业务应用框架,也是电子商务系统中的典范.所以很想多学习一下里面的设计和实现方式. 二,NopCo ...
- Qualcomm Android display架构分析
Android display架构分析(一) http://blog.csdn.net/BonderWu/archive/2010/08/12/5805961.aspx http://hi.baidu ...
- Android架构分析之使用自定义硬件抽象层(HAL)模块
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...
- 分布式MySQL数据库TDSQL架构分析
摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TD ...
随机推荐
- CSS写作建议和性能优化总结(未完待续)
这里是我从网上的一篇文章看过来的,这里先做一点小结,之后再补充. 1.CSS渲染规则 今天在微博的一篇文章上看到的,之前我都以为渲染是从左往右渲染.发现我的想法是错的.之所以采用从右往左的渲染规则,是 ...
- 陈立伟 - MultiCharts快易通(2013年8月2日)
<MultiCharts快易通> 作 者:陈立伟 译 者: 系 列:寰宇程式交易312--挑战程式交易系列1 出 版:寰宇出版股份有限公司 字 数:千字 阅读完成:2013年8月2日
- python笔记13-多线程实战篇(tomorrow)
安装 1.tomorrow安装,用pip可以直接安装 pip install tomorrow 单线程 1.以下案例是单线程时候跑的情况,在下载图片的时候很耗时. # coding:utf-8 fro ...
- C#之Enum中的Flag
我们知道在默认情况下,第一个枚举数的值为0,后面每个枚举数的值一次加1. enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 我们也可以用初始值来重写默认值. ...
- [Linux] Proc 文件系统
转载自:http://linux.chinaunix.net/doc/2004-10-05/16.shtml#324lfindex0 目录: /proc --- 一个虚拟文件系统 加载 proc 文件 ...
- Codeforces Round #313 (Div. 1) Gerald's Hexagon
http://codeforces.com/contest/559/problem/A 题目大意:按顺序给出一个各内角均为120°的六边形的六条边长,求该六边形能分解成多少个边长为1的单位三角形. 解 ...
- 事务内执行sql修复的简易模板
-- ============================================= -- Script Template -- ============================= ...
- 基于 Scrapy-redis 的分布式爬虫详细设计
基于 Scrapy-redis 的分布式爬虫设计 目录 前言 安装 环境 Debian / Ubuntu / Deepin 下安装 Windows 下安装 基本使用 初始化项目 创建爬虫 运行爬虫 ...
- Python数据结构与算法(几种排序)
数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是 ...
- http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
http://www.blogjava.net/xylz/archive/2010/07/08/325587.html