首页 > 编程语言 >struts2源码阅读1

struts2源码阅读1

时间:2023-03-28 10:04:33浏览次数:137  
标签:ActionMapper ActionInvocation 创建 Struts2 struts2 源码 阅读 Action ActionProxy


Struts2源码阅读(一)_Struts2框架流程概述


1. Struts2架构图

 

请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和 Dispatcher;FilterDispatcher通过AcionMapper把请求路径与配置文件的namespace匹配,封装成actionMapping。
        ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建 ActionProxy,ActionProxy创建ActionInvocation,由ActionInvocation实际创建Interceptors和Action,然后ActionInvocation调用 Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现 PreResultListener。

2. Struts2部分类介绍
这部分从Struts2参考文档中翻译就可以了。
ActionMapper
        ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等 java Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的 需要来设计url格式,它自己也有Restful的实现,具体可以参考文档的docs/actionmapper.html。
ActionProxy&ActionInvocation
        Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是 由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而 ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的。
ConfigurationProvider&Configuration
        ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类 XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。

3. Struts2请求流程
1、客户端发送请求
2、请求先通过ActionContextCleanUp-->FilterDispatcher
3、FilterDispatcher通过ActionMapper把请求路径与配置文件的namespace匹配,封装成actionMapping
4、如果ActionMapper返回的actionMapping不为空,则转到FilterDispatcher的Delegate-- Dispatcher,由它创建ActionProxy及ActionInvocation并初始化,ActionInvocation初始化过程中根据 ActionMapping和ConfigurationManager创建真正的Action类
5、Dispatcher调用ActionProxy的execute方法
6、ActionProxy调用ActionInvocation的invoke方法
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现。

 

http://qidaoxp.javaeye.com/blog/492295


1. Struts2架构图

 

请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和 Dispatcher;FilterDispatcher通过AcionMapper把请求路径与配置文件的namespace匹配,封装成actionMapping。
        ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建 ActionProxy,ActionProxy创建ActionInvocation,由ActionInvocation实际创建Interceptors和Action,然后ActionInvocation调用 Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现 PreResultListener。

2. Struts2部分类介绍
这部分从Struts2参考文档中翻译就可以了。
ActionMapper
        ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等 java Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的 需要来设计url格式,它自己也有Restful的实现,具体可以参考文档的docs/actionmapper.html。
ActionProxy&ActionInvocation
        Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是 由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而 ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的。
ConfigurationProvider&Configuration
        ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类 XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。

3. Struts2请求流程
1、客户端发送请求
2、请求先通过ActionContextCleanUp-->FilterDispatcher
3、FilterDispatcher通过ActionMapper把请求路径与配置文件的namespace匹配,封装成actionMapping
4、如果ActionMapper返回的actionMapping不为空,则转到FilterDispatcher的Delegate-- Dispatcher,由它创建ActionProxy及ActionInvocation并初始化,ActionInvocation初始化过程中根据 ActionMapping和ConfigurationManager创建真正的Action类
5、Dispatcher调用ActionProxy的execute方法
6、ActionProxy调用ActionInvocation的invoke方法
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现。

 

http://qidaoxp.javaeye.com/blog/492295

标签:ActionMapper,ActionInvocation,创建,Struts2,struts2,源码,阅读,Action,ActionProxy
From: https://blog.51cto.com/u_16034393/6153818

相关文章

  • ArrayList源码分析(需要找时间在刷一遍)
          ......
  • struts2 jquery
    使用这个组合,感觉还是很方便灵活的。1、将struts2的json插件加入web工程的lib,jsonplugin的下载地址:http://code.google.com/p/jsonplugin/downloads/......
  • struts2的执行机制
    struts2是web应用中一个常用的mvc框架,下面探讨一下其内部运行机制:1.从客服端浏览器输入的url后,客服端通过http协议发送一个请求到服务器(tomcat),Tomcat收到这个请求之后,它会......
  • 构造之法阅读笔记02
    这次阅读笔记主要包括整本书前言和概论,我想它必定与所有书的前言和概论一样,告诉我们作者的真是心里写照,以及他想要通过这本书告诉我们的内容。在注册博客园一年多的时间以......
  • http请求中加号被替换为空格?源码背后的秘密(转)
    addby zhj: 我比较奇怪,为什么Postman等Http客户端在发送请求时,为什么不默认对QueryString中的值进行EncodeURIComponent呢?非要让用户手动选择。其实Postman默认对Que......
  • 2023.3.27阅读笔记
    《代码大全》阅读笔记01 欢迎进入软件构建的世界这章阐述了软件构建的重要性,软件构建大体上就是说具体程序员做的工作,而不是需求收集人员,产品设计人员,业务分析人员,......
  • ChatGPT接入微信 C#完整源码
    1.无需搭建服务器2.winform运行程序扫码登录,就可以充当机器人调用chatGPT可实现自动回复(可以识别会话消息和群聊消息,拉入群聊@机器人可以进行群聊的消息回复),可以申请小......
  • 医院影像科室PACS系统源码包含三维重建源码
    PACS系统是PictureArchivingandCommunicationSystems的缩写,意为影像归档和通信系统。它是应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,......
  • Git使用 | 解决github下载源码慢的问题
    最近,准备在github上克隆一些开源代码来学习。通常情形就是,网页半天打不开或者无法访问,大一点的git仓库也无法克隆下来。后续,通过gitee码云加速下载github代码,解决了问题。下......
  • 直播平台搭建源码,Android进度条ProgressBar颜色的渐变设置
    直播平台搭建源码,Android进度条ProgressBar颜色的渐变设置1.第一步 在res/drawable目录下新建自己的样式文件my_progressBar.xml文件。 <?xmlversion="1.0"encod......