一、Struts2的处理流程:

  • 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,FilterDispatcher主要是通过ActionMapper来决定需要调用那个Action,FilterDispatcher是控制器的核心,也是MVC中控制层的核心组建)。
  • 核心控制器组建FilterDispatcher根据ActionMapper中的设置获得是否需要调用某个Action组建来处理这个HttpServletRequest请求,如果ActionMapper决定调用某个Action组建,FilterDispatcher核心控制器组建就会把请求的处理权委托给ActionProxy组建
  • ActionProxy组建通过Configuration Manager组建获得Struts2框架的配置文件struts.xml,最后找到需要调用的目标Action组建类,然后ActionProxy组建就创建出一个实现了命令模式的ActionInvocation类的对象实例类的对象实例(这个过程包括调用Anction组建本身之前调用多个的拦截器组建的before()方法 )同时ActionInvocation组建通过代理模式调用目标Action组建。但是在调用之前ActionInvocation组建会根据配置文件中的设置项目加载与目标Action组建相关的所有拦截器组建(Interceptor)。
  • 一旦Action组建执行完毕,ActionInvocation组建将根据开发人员在Struts2.xml配置文件中定义的各个配置项目获得对象的返回结果--为这个Action组建的结果码(一个像SUCCESS,INPUT)然后根据该返回的结果调用目标JSP页面以实现显示输出。
  • 最后各个拦截器组建会被再次执行(但是顺序和开始时相反,并调用after()方法),然后请求最终被返回给系统的部署文件中配置的其他过滤器,如果已经设置了ActionContextCleanUp过滤器,那么FilterDispatcher就不会清理在ThreadLocal对象中保存的ActionContext信息。如果没有设置ActionContextCleanUp过滤器,FilterDispatcher就会清除掉所有的ThreadLocal对象。

更加清晰的来说就是:

1.客户端初始化一个指向servlet容器的请求。

2.请求经过一系列的过滤器(ActionContextCleanUp、SiteMesh)

3.FilterDispatcher被调用,并询问ActionMapper来决定这个请求是否需要调用某个Action

4.ActionMapper决定要调用那一个Action,FilterDispatcher把请求交给ActionProxy。

5. ActionProxy通过Configurate Manager询问Struts配置文件,找到要调用的Action类

6. ActionProxy创建一个ActionInvocation实例

7. ActionInvocation实例使用命令模式来调用,回调Action的exeute方法

8. 一旦Action执行完毕,ActionInvocation负责根据Struts.xml的配置返回结果。

二、比较重要的类的介绍:

ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,他屏蔽了Action对于Request等Java servlet类的依赖。Struts2中它的默认实现类是DefaultAtionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的具体实现。

ActionProxy和ActionInvocation:

Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是咱ActionInvocation中实现的。

ConfigurateProvider和Configuration

ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是实现XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。

Struts2请求处理示意图:

转载于:https://www.cnblogs.com/oumyye/p/4356149.html

java框架篇---Struts2的处理流程相关推荐

  1. Java框架篇---spring aop两种配置方式

    Java框架篇---spring aop两种配置方式 第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步:  1. 使用注解@Aspect来定义一个切面,在切面中 ...

  2. Java框架之Struts2(六)

    一.OGNL表达式语言 Ognl Object Graphic Navigation Language(对象图导航语言),它是一种功能强大的表达式语言(Expression Language,简称为E ...

  3. struts国际化java_java框架篇---Struts2 本地化/国际化(i18n)

    国际化(i18n)是规划和实施的产品和服务,使他们能很容易地适应特定的本地语言和文化的过程中,这个过程被称为本地化.国际化的过程有时也被称为翻译或本地化启用.国际化是缩写i18n,因为我和两端用n字打 ...

  4. java框架篇---spring IOC依赖注入

    spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注解注入 下面通过一个实例统一讲解: User.java package com.bjsxt.model;public class ...

  5. java框架篇---hibernate(一对多)映射关系

    一对多关系可以分为单向和双向. 一对多关系单向 单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表).比如一个母亲可以有多个孩子,并且孩子有母亲的主键作为外键.母亲与孩子的关系就是一对多 ...

  6. Java SSM篇2——框架的基本认识

    Java SSM篇2--框架的基本认识 1.什么是框架 框架就是一套规范,既然是规范,你使用这个框架就要遵守这个框架所规定的约束 框架可以理解为半成品软件,框架做好以后,接下来在它基础上进行开发 2. ...

  7. JAVA框架——struts(一)struts快速入门,struts访问流程,struts配置文件详解,动态方法调用

    一. Struts2框架概述 是一种基于MVC模式的轻量级web框架.本质是一个Servlet.作为控制器建立模型与视图的数据交互.Struts2以WebWord为核心,采用拦截器的机制处理客户的请求 ...

  8. 面试大厂不看这两份Java面试核心知识点原理篇+框架篇,有个屁用?食屎啦泥?

    前言 面试在即,Java知识点很凌乱? 别急,有本套书在呢! 除了原理,还有框架! ★ 精细讲解JVM原理.Java基础.并发编程.数据结构和算法.网络与负载均衡 ★ 深入挖掘数据库与分布式事务.分布 ...

  9. 超详细的Java面试题汇总(基础篇+框架篇)

    Java面试题汇总-基础篇 1.面向对象是什么? 答:面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发.基于类和面向对象的计算机编程语言,面向对 ...

最新文章

  1. mac-address-table static命令的使用
  2. 网络抓包工具wireshark and tcpdump 及其实现基于的libpcap
  3. 【听哥一句劝,C++水很深,你把握不住啊!】C++提高班之 符与*符
  4. OpenCV AKAZE本地特征匹配
  5. [Qt教程] 第23篇 数据库(三)利用QSqlQuery类执行SQL语句
  6. 牛客挑战赛43C-最优公式【二分】
  7. ssm上传文件获取路径_SSM实现图片上传下载功能
  8. 《跟波利亚学解题》思维笔记
  9. 训练日志 2018.12.6
  10. 利用java.io.File类实现遍历本地磁盘上指定盘符或文件夹的所有的文件
  11. 可能是全网最全的 Java 日志框架适配、冲突解决方案
  12. WWDC19 苹果宣布全新 UI 框架 SwiftUI
  13. paip.ASP 开发调试大总结
  14. eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)
  15. 【网络是怎样连接的】—— TCP/IP 传输数据
  16. atmega168p与328p_atmega328P 写入 Boot Loader的那点事
  17. linux jvm gc日志分析,JVM之GC统计以及日志分析
  18. 【Blog】解决CSDN博客修改头像后依旧显示默认头像问题的方法
  19. 云宏CTO张国强:云宏超融合大数据一体机,中国云数一体化神器!
  20. UV滚动+自定义光线高光+LightMap阴影贴图+法线贴图效果shader

热门文章

  1. Entity Framework 4.3 中的新特性
  2. 人生的意义—我们为什么活着?
  3. Rails全局处理Error
  4. 现今主流计算机语言,现今主流的Python图形化界面主要有哪些
  5. python的控件text的文本属性_只需6行Python代码就给图片加上水印——你一看就会了...
  6. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享
  7. 网页编辑html中怎么写搜索代码,如何在html页面中实现查找功能
  8. ENAS加载自己的数据集之路
  9. 给Resnet加人工经验提升30%的准确率
  10. 高可用、可扩展、稳定和安全的消息队列ActiveMQ特点分析