调结者(Dispatcher)之执行action】的更多相关文章

章节简言 上一章笔者写关于Dispatcher类如何处理接受来的request请求.当然读者们也知道他并非正真的执行action操作.他只是在执行action操作之前的准备工作.那么谁才是正真的执行action呢?本章笔者就带大家来看看StrutsExecuteFilter类的工作.在理解StrutsExecuteFilter类的工作之前,笔者还是希望大家回顾一下前一章讲到的request请求工作.为什么这样子讲呢?可以说StrutsExecuteFilter类的工作是建立在StrutsPrep…
调结者的执行action StrutsExecuteFilter类的工作就是执行对应的action请求.StrutsExecuteFilter类的工作还需要有一个叫ExecuteOperations类的帮助.如果看过源码的朋友都知道,StrutsExecuteFilter类的代码里用了ExecuteOperations类的俩个方法.一个是:executeStaticResourceRequest方法.一个是:executeAction方法.光从字名面上我就知道他们的功能.executeStati…
章节简言 上一章笔者讲到关于struts2启动的时候加载对应的准备工作.如加载配置文件struts.xml之类的信息.而相应的这些操作都离不开Dispatcher类的帮助.如果读者只是认为Dispatcher类的作用只有这些.那真的是大错特错了.所以本章笔者将继续讲到关于Dispatcher类的另一个功能.即是StrutsPrepareFilter类俩项工作中的处理request请求相关信息.在讲解之前,笔者还是想把相关的信息回想一下:当项目启动的时候,strtus2也就启动了.然后就会去初始化…
章节简言 上一章笔者讲到关于struts2过滤器(Filter)的知识.让我们了解到StrutsPrepareFilter和StrutsExecuteFilter的作用.特别是StrutsPrepareFilter做了重要的讲解.从其中我们了解到Dispatcher类的重要性.而本章就是专对Dispatcher类的工作进行讲解.从前面章节的机制图片中我们橙黄色区里面看到FilterDispatcher.在笔者理解这里的FilterDispatcher相当于Dispatcher类的工作.那么到底D…
本章简言 上一章讲到关于拦截器的机制的知识点,让我们对拦截器有了一定的认识.我们也清楚的知道在执行用户action类实例之前,struts2会先去执行当前action类对应的拦截器.而关于在哪里执行action类实例,笔者根本就没有详细的讲到.更多只是几笔带过而以.虽然在<Struts2 源码分析——Action代理类的工作>章节里面也讲到过关于DefaultActionInvocation类的一些作用.提过DefaultActionInvocation类会去执行action类实例.但是还是没…
在执行Action之间检验是否登录,也可以在执行Action前先执行某一个操作 public class BaseController : Controller { protected string hostUrl = ""; /// <summary> /// Action执行前判断 /// </summary> /// <param name="filterContext"></param> protected o…
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:<OCM 基本班课程表> 二:<OCM_第一天课程:OCM课程环境搭建> 三:<OCM_第二天课程:Section1 ->配置 Oracle 网络环境 > 四:<OCM_第三天课程:Section1 ->表空间的操作和管理.服务配置 > 五:<OC…
DefaultActionInvocation类的执行action 上一章里面有提到过DefaultActionInvocation类的invoke方法里面的invokeActionOnly方法.没有错!当所有拦截器前半部分执行结束之后,就会去执行invokeActionOnly方法.这个方法就是执行action类实例的入口.而invokeActionOnly方法实际是去调用本身类的invokeAction方法.看一下代码就知道了. DefaultActionInvocation类: 1 pub…
  本文旨在演示ActionBlock的使用. 大致流程: 输入路径--读取字节--计算--传输到打印   // Demonstrates how to provide delegates to exectution dataflow blocks. class DataflowExecutionBlocks {     // 计算文件中包含零字节的总数     static int CountBytes(string path)     {         byte[] buffer = ne…
struts 2.3.16  採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant name="struts.enable.DynamicMethodInvocation" value="true"/> 改动发现报No result defined for action 2.错误信息来看,是说未定义result. 你有没有配置拦截器<in…
章节简言 上一章笔者讲到关于如何加载配置文件里面的package元素节点信息.相信读者到这里心里面对struts2在启动的时候加载相关的信息有了一定的了解和认识.而本章将讲到关于struts2启动成功之后,接受到用户action请求之后如何处理并找到对应的action类.可以说这章是讲述<Struts2 源码分析——调结者(Dispatcher)之执行action>章节之后的事情.即是核心机制图片的蓝色(Struts core)分部的知识点.通过前面几章节的内容至少我们知道了struts2启动…
 Action代理类的新建 通过<Struts2 源码分析——调结者(Dispatcher)之执行action>章节我们知道执行action请求,最后会落到Dispatcher类的serviceAction方法上面.可惜笔者并没有在这一章里面对他自己详细的讲解.先让我们看一下代码吧?知道他在做什么吧.如下 Dispatcher类: 1 public void serviceAction(HttpServletRequest request, HttpServletResponse respon…
本章简言 上一章笔者讲到关于Dispatcher类的执行action功能,知道了关于执行action需要用到的信息.而本章将会讲到的内容也跟Dispatcher类有关系.那就是配置管理中的ContainerProvider类.我们都知道在struts2启动的时候,struts2会去加载对应的配置文件.如struts.xml文件等.如果笔者没有记错的话.在<Struts2 源码分析——调结者(Dispatcher)之准备工作>的章节里面讲到过关于ConfigurationManager类的一些知…
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中需要用户实现的部分只有三个,那就是struts.xml,Action,Template(JSP),如下图: 2.3.31中的org.apache.struts2.dispatcher.ActionContextCleanUp已经被标记为@Deprecated Since Struts 2.1.3,2…
前言 由于S2-016.S2-017出现的原因时相同的,只是由于poc不一样,造成了不同的攻击.S2-016是RCE,S2-017是开发型重定向漏洞.这里将两个漏洞放一起分析.另外“Struts2系列起始篇”是我整各系列的核心,希望大家能花些时间先看看. 正文 在起始篇中我们讲到过,Struts2在StrutsPrepareFilter中通过DefaultActionMapper.getMapping获取action对应的action mapper时会调用handleSpecialParamet…
一.概述 上篇博文<白话学习MVC(七)Action的执行一>介绍了ASP.NET MVC中Action的执行的简要流程,并且对TempData的运行机制进行了详细的分析,本篇来分析上一篇中遗留的[3-2.ActionInvoker.InvokeAction(ControllerContext, actionName)]部分的内容,其中包含了Action的执行.过滤器的执行.View的呈现(下节介绍). public abstract class Controller : Controller…
[toc] 在 Aps.net mvc 应用中对请求的处理最终都是转换为对某个 Controller 中的某个 Action 方法的调用,因此,要对一个请求进行处理,第一步,需要根据请求解析出对应的 Controller 和 Action 的名称,这是 Asp.net mvc 中的路由 的职责所在,第二步,需要根据第一步解析出来的内容定位对请求进行处理的 Action 方法所属的 Controller 类型,定位的过程称为 Asp.net mvc 中 Controller 的激活,第三步,就是根…
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); // 注册 Composer 加载器 Yii::setAlias('@common', dirname(__DIR__)); // 注册别名 { \yii\BaseYii::setAlias($alias, $…
一.前言 有些同学使用AuthorizationFilter来进行用户是否登录验证,如果未登录就跳到登录页. 很简单的一个场景,但是有些同学会发现虽然验证失败了,但是整个Action还会执行一遍. 于是google啊google啊,然后找到了解决方案,但是不知为啥,下面就对InvokeAction的简略分析,说说到底是为啥. 二.分析InvokeAction执行顺序 1.首先获取Controller和Action描述类 ControllerDescriptor controllerDescrip…
异步Action的定义 两种异步Action方法的定义 xxxAsync/xxxCompleted 这种形式的异步只能定义在实现了AsyncController的Controller中.针对Task的异步没有这个限制 可以将异步操作实现在X xxAsync 方法中,而将最终内容的响应实现在XxxCompleted 方法中 对于以XxxA synclXxxCompleted 形式定义的异步Action 方法来说, ASP.NET MVC 并不会以异步的方式来调用XxxAsync 方法,所以我们需要…
当IIS收到一个http请求,把请求信息发给对应的HttpModel(实际是实现类UrlRoutingModule),在HttpModel中会注册HttpApplication 类中的PostResolveRequestCache事件,通过此事件来动态选择映射HttpHandler处理程序.通过匹配到的RouteData类的RouteHandler属性得到IRouteHandler对象(MVC4是MvcRouteHandler.asp.net原生的是PageRouteHandler),通过这个对…
[toc] 前面介绍了 Action 方法执行过程中的一些主要的组件以及方法执行过程中需要的参数的源数据的提供以及参数的绑定,那些都可以看作是 Action 方法执行前的一些必要的准备工作,接下来便将这些串起来看一下 Action 方法执行的整体的流程. Action 执行的整体流程 在接受到客户端的 Http 请求后,Asp.net 的路由系统会对请求信息进行解析得到路由数据,其中包括请求的 Controller 和 Action 的名称以及当前请求上下文的信息,然后根据这些信息创建对应的Co…
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:<OCM 基本班课程表> 二:<OCM_第一天课程:OCM课程环境搭建> 三:<OCM_第二天课程:Section1 ->配置 Oracle 网络环境 > 四:<OCM_第三天课程:Section1 ->表空间的操作和管理.服务配置 > 五:<OC…
前面 的篇章, 解析了Action方法的查找, 以及 Authorize, Action, Result, Error 过滤器的加载时机. 也花了两篇去看授权和错误过滤器的使用. 但是对于 Action/Result 的执行以及Action/Result里面的两个过滤器的执行时机, 并没有清晰看到. 一.Action 方法的执行和过滤器的执行 //System.Web.Mvc.ControllerActionInvoker protected virtual ActionExecutedCont…
接着上一篇, 在创建好Controller之后, 有一个 this.ExecuteCore()方法, 这部分是执行的. 那么里面具体做了些什么呢? //ControllerBaseprotected virtual void Execute(RequestContext requestContext) { if (requestContext == null) { throw new ArgumentNullException("requestContext"); } if (requ…
上图提供了struts2的执行流程.如下: 1:从客户端发出请求(HTTPServletRequest). 2:请求经过各种过滤器(filter),注:一般情况下,如SiteMesh等其他过滤器要放在核心控制器FilterDispatcher之前,也就是web.xml中配置的filter-mapping在 StrutsPrepareAndExecuteFilter之前.  在执行完了所有的过滤器的doFilter方法之后,核心控制器FilterDispatcher会清空ActionContext…
一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不用多废话了. 今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate…
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标准的过滤器链 c) FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy d) ActionProxy将会通过ConfigurationManager来查找配置struts.xml       …
一.解耦方式 特点:对web资源进行了封装,便于单元测试. 实现:ActionContext和接口方式 1.ActionContext 特点:Action执行的上下文对象.保存了执行Action所需要的所有对象 使用:1.获取ActionContext  2.获取application,session.request,parameter资源  3.打印显示 1.获取ActionContext ActionContext.getContext() 调用自身的静态方法得到实例 采用的是单例模式 可以…
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter与org.apache.struts.dispatcher.FilterDispatcher是什么区别?   网上收集的,自认为比较好的答案:   FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.!StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.! 这…