Action请求流程分析

Strut2流程分析-----从请求到Action方法()
首先请求会调用strutsPrepareAndExcuteFliter----(这个就是我们在web.xml文件中所配置的那个拦截器吧,所有Action请求都要过这个拦截器)的doFilter()方法
然后会调用StrutsActionProxy类的excute()方法,生成一个代理类(ActionProxy)
ActionProxy 是 Action 的一个代理类,也就是说Action的调用是通过 ActionProxy 实现的,就是我们定义的Action不能直接去访问各种拦截器栈吧,那我们得找一个代理代替我们干这活吖
而该方法又调用了ActionInvocation.invoke()方法
然后调用DefaultActionInvocation的invoke()//通过不断的回调这个方法,调用了所有拦截器,直到调用完
ActionInvocation就是Action的调用者。
ActionInvocation在Action的执行过程中,负责Interceptor、Action和Result等一系列元素的调度。
*/
public String invoke() throws Exception {
String profileKey = "invoke: ";
try {
UtilTimerStack.push(profileKey);

if (executed) {
throw new IllegalStateException("Action has already executed");
}

if (interceptors.hasNext()) {//拦截器集合,不断的回调,
final InterceptorMapping interceptor = interceptors.next();
String interceptorMsg = "interceptor: " + interceptor.getName();
UtilTimerStack.push(interceptorMsg);
try {
resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);
}
finally {
UtilTimerStack.pop(interceptorMsg);//拦截器回调完后,最终通过这个方法来调用Action类方法
}
} else {
resultCode = invokeActionOnly();
}
1Action请求流程:
每次发生一个Action请求时,并不是把立刻跳到相应的Action中,而是先生成一个Action实例,
把Action实例的属性都放入值栈中的栈顶,此时放入值栈的Action对象的属性还是没有赋值的,
再继续生成Actionproxy(代理)实例,由ActionProxy调用所有的拦截器,直到调用接 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中.
然后当执行到Action相对应的方法,为Action类的各个属性赋值
2Action类的对象在controller中实例化,并且利用OGNL方式进行自动赋值
1)声明需要用到的Action类对象
2)实现ModelDriver接口,实现getModel方法,并在getModel方法里实例化Action类对象,并返回实例化的对象(ps:不能直接的返回new Action()对象)

时间: 2024-10-10 23:36:14

Action请求流程分析的相关文章

WebX学习二——URL请求流程分析

URL请求流程分析 1.在index页面中设置了 得到如下链接 当这个get请求发出的时候,流程是这样的: 首先,它被webx中配置的Filter捕获: 进入源码分析发现:该请求进入了WebxFrameworkFilter的doFilter方法: @Override protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOExcept

DRF之REST规范介绍及View请求流程分析

编程是数据结构和算法的结合,而在Web类型的App中,我们对于数据的操作请求是通过url来承载的,本文详细介绍了REST规范和CBV规范和CBV请求流程. 编程即数据结构和算法的结合.简单的程序可能不需要跟用户交互数据,但是现代的应用程序几乎都需要跟用户进行交互,不分应用程序类型,不管是CS型还是BS型的程序都是如此,而Python最擅长的Web App即BS型的程序,就是通过url和http来跟用户进行数据交互的,通过url和http请求,用户可以操作服务器端的程序,主要操作分为:增.删.改.

Okhttp源码分析--基本使用流程分析

Okhttp源码分析--基本使用流程分析 一. 使用 同步请求 OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Request.Builder() .get() .url("www.baidu.com") .build(); Call call =okHttpClient.newCall(request).execute(); 异步请求 OkHttpClient okHttpClient=new OkH

JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用

Struts2框架介绍 三大框架:是企业主流JavaEE开发的一套架构.Struts2 + Spring + Hibernate 什么是框架?为什么要学习框架? 框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发. Struts2与MVC? Struts是一款优秀的MVC框架 MVC:是一种思想,是一种模式,将软件分为Model模型.View视图.Controller控制器 JAVAEE软件三层架构:web层(表现层).业务逻辑层.数据持久层(Sun提供javaEE开发规范) Jav

zookeeper源码分析之五服务端(集群leader)处理请求流程

leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcessor -> ProposalRequestProcessor ->CommitProcessor -> Leader.ToBeAppliedRequestProcessor ->FinalRequestProcessor 具体情况可以参看代码: @Override protected v

Struts2 源码分析——调结者(Dispatcher)之action请求

章节简言 上一章笔者讲到关于struts2启动的时候加载对应的准备工作.如加载配置文件struts.xml之类的信息.而相应的这些操作都离不开Dispatcher类的帮助.如果读者只是认为Dispatcher类的作用只有这些.那真的是大错特错了.所以本章笔者将继续讲到关于Dispatcher类的另一个功能.即是StrutsPrepareFilter类俩项工作中的处理request请求相关信息.在讲解之前,笔者还是想把相关的信息回想一下:当项目启动的时候,strtus2也就启动了.然后就会去初始化

HBase1.0.0源码分析之请求处理流程分析以Put操作为例(二)

HBase1.0.0源码分析之请求处理流程分析以Put操作为例(二) 1.通过mutate(put)操作,将单个put操作添加到缓冲操作中,这些缓冲操作其实就是Put的父类的一个List的集合.如下: private List<Row> writeAsyncBuffer = new LinkedList<>(); writeAsyncBuffer.add(m); 当writeAsyncBuffer满了之后或者是人为的调用backgroundFlushCommits操作促使缓冲池中的

从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧毁(Finish())或则保留. 如果一个交互流程中,是从A开始,按照A - B - C - D - A这样的顺

nova挂载cinder卷流程分析

Nova挂载cinder卷流程分析 1. nova通过命令nova volume-attach server volume device-name或者http请求 Req:POST /v2/{tenant-id}/servers/{server-id}/os-volume_attachments' Body:{'volumeAttachment': {'device': '/dev/vdb', 'volumeId': '951be889-b794-4723-9ac9-efde61cacf3a'}