struts2核心工作流程与原理

Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts
2可以理解为WebWork的更新产品。

 

上图来源于Struts2官方站点,是Struts 2 的整体结构。

一个请求在Struts2框架中的处理大概分为以下几个步骤

1 客户端初始化一个指向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

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

在这里说明下拦截器与过滤器的区别:

1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。

3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。

4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。

5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

时间: 2024-10-07 17:39:13

struts2核心工作流程与原理的相关文章

Struts2的工作流程

Struts2的工作流程 1.客户端浏览器初始化时发出HTTP请求 2.根据web.xml配置,上述请求被FilterDispatcher接收 3.根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton 4.Action调用业务逻辑组件处理业务逻辑 5.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面 6.返回HTTP响应到客户端浏览器

OSG 中 相交测试 模块 工作流程及原理

主要涉及三个类: 1. osgUtil::PolytopeIntersector // 具体不同算法实现类 2. osgUtil::IntersectionVisitor //用来遍历节点树的每个节点 3.osg::Node * mNode;  //  你要做相交测试的根节点 先看用法: osg::ref_ptr<osgUtil::PolytopeIntersector> intersector = new osgUtil::PolytopeIntersector(osgUtil::Inter

DNS工作流程及原理 域名、IP与DNS的关系

转自:http://blog.csdn.net/maminyao/article/details/7390208 一.DNS服务概述 DNS是Domain Name System的缩写,即域名系统.其实,DNS是internet的一项服务,一般叫域名服务或者域名解析服务,主要提供网站域名与IP地址的相互转换的服务.域名解析分文争相解析与反向解析,正向解析是将主机名转换成IP地址的过程,域名的反向解析是将IP地址转换成主机名的过程.通常我们很少需要将IP地址转换成主机名.其中,反向解析经常被一些后

Scrapy中的核心工作流程以及POST请求

五大核心组件工作流程 post请求发送 递归爬取 五大核心组件工作流程 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 下载器(Downloader)用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型

struts2的工作流程和运行原理

先要参考srtuts的官方给出的图: 工作原理: 1.(ActionContextCleanUp )首先客户端会发送一个请求,然后我们在web.xml配置中有一个strurts2的过滤器,在进入过滤器时,有这个ActionContextCleanUp filter进行处理,(因为struts2在开发中,容易引起众多类集合,而这些类集合并不能在使用完后全部消除,所以apache基金会为了让struts2在运行的过程中能够稳定,就特定的为所有ACTION进行监控,从而让struts2在第一时间知道被

[SSH] Struts2的工作流程

Struts2在Struts的基础上 有了很多的优点 具体的不同 可以参考另一边博文-> Struts2与Struts1的比较 首先整理列出响应流程先后中的一些名词: (1)过滤器(Filter):过滤器,接收到Url的时候就会产生作用. (2)StrutsPrepareAndExecuteFilter(2.1.3之前用的是FilterDispatcher):名字已经很能说明问题了,prepare与execute,前者表示准备,可以说是指filter中的init方法,即配制的导入:后者表示进行过

OSG 中 相交測试 模块 工作流程及原理

主要涉及三个类: 1. osgUtil::PolytopeIntersector // 详细不同算法实现类 2. osgUtil::IntersectionVisitor //用来遍历节点树的每一个节点 3.osg::Node * mNode;  //  你要做相交測试的根节点 先看使用方法: osg::ref_ptr<osgUtil::PolytopeIntersector> intersector = new osgUtil::PolytopeIntersector(osgUtil::In

Struts2完整工作流程

a . 客户发送一个Action请求,请求交给控制器 b . 控制器创建一个ValueStack,将Action压入栈顶 c . 控制器调用ActionInvocation组件执行请求处理 d . ActionInvocation组件调用请求相关的拦截器组件--前部分处理. e . 然后再调用Action组件业务方法 f . 然后再调用Result组件处理方法 g . 最后执行拦截器组件--后部分处理. h . 将响应信息输出,为客户端响应

Struts2 核心流程

1.Struts2架构图  这是Struts2官方站点提供的Struts 2 的整体结构.  执行流程图 2.Struts2部分类介绍  这部分从Struts2参考文档中翻译就可以了. ActionMapper         ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等 java Servlet类的依赖.Struts2中它的默认实现类是DefaultActionMapper,ActionMapper