Struts2详细执行流程总结

这篇文章是在参考大量资料之下总结出来的,一是减少学习Struts2同学的疑惑,二是顺便自己总结一下提升自己的知识水平,三是抗遗忘。欢迎纠正,谢谢各位朋友,若不慎涉及他人的版权,请qq联系1354611365,我将删除。

一、struts2总体框架。

先给出总体框架,从战略上分析。保持学习过程中不会出现走邪路的状况。

图1:Struts2的总体框架预览

二、解释框架图中的各个层次的意思。

1、我们一般会把我们做的项目部署到Tomcat服务器上,由服务器解析我们所做的Struts2项目。

2、项目部署完毕后通过jsp运行项目

其实jsp表单里面含有提交到action的内容的。

图2:jsp里的表单

服务器开始启动,会加载先web.xml文件,web.xml其实是一个监管器

图3:web.xml文件里的内容

 

 

StrutsPrepareAndExecuteFilter。表面意思就是struts准备并执行过滤器

其真正含义有两条与这句话差不多。

一是为struts2执行做一些相关的准备。如加载相关的配置信息。
二是为struts2的request请求处理相关的信息。如设置编码格式和找到对应的action映射类

StrutsPrepareAndExecuteFilter

包含两个主要方法:

void    doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)

void    init(javax.servlet.FilterConfig filterConfig)

doFilter()主要是通过ActionContex包装httpServletRequest,和HttpServletRespone用ActionContext包装请求和响应信息然后提交各Action类。至于怎么搞的自己看源码。

Init()方法主要是读取响应的struts2的配置文件。顺序读取文件为;

1、default.properties(框架提供):配置了struts运行的参数

2、struts-default.xml(框架提供):struts框架加载创建、Result、拦截器等,框架运行要用

3、struts-plugin.xml(插件提供):插件文件,比如:第三方插件,转json插件、struts2和spring整合插件。。

4、struts.xml(程序员定义):它能配置的内容和struts-default.xml一样,重点要配置Action、自定义运行参数、自定义的拦截器

5、struts.properties(程序员定义):可以配置struts运行的参数

注意:图片中用的是FilterDispatcher类在struts2.1.3中已经过时了,改为了StrutsPrepareAndExecuteFilter类了

此时已经进入这个struts2框架的这个部位了。

图4 Struts2行进图

三、通过ActionMapper寻找对应的Action。

上次说到web.xml检测到jsp表单里的提交到action的内容就会被检测拦截

然后然后通过StrutsPrepareAndExecuteFilte类进行过滤包装,将请求信息转发给ActionMapper,由ActionMapper检测这个信息是否要Struts2进行处理。

如果需要,ActionMapper反馈给StrutsPrepareAndExecuteFilter,然后StrutsPrepareAndExecuteFilter创建ActionProxy对象。

但ActionPropxy并不知道具体的action内容。于是又调用ConfigurationManager

,ConfigurationManager之前将struts.xml,等一些struts2配置文件加载进入了内存。因此它能对struts.xml进行处理。

通过struts.xml的内容去查找相应的Action类。

那么如何查找呢?

<form action="user_Register.action" method="post"

表单action内容为“user_Register.action”

图5:查找actionl类

 

 

图6:ActionProxy中间层的作用(注意箭头)

 

四、ActionProxy获知要使用的action后创建ActionInvocation类这个类包含四个属性.

简单的来说通过ActionInvocation获取了前端的各种属性,比如name, age,等提交的表格信息内容。还获取了struts2的各种配置信息,还有ConfigurationManager查找到的具体执行的action,等。然后经过业务层处理将内容返回出来。也就是通过struts.xml中的result信息返回响应的页面。

图7:result返回响应的页面

 

图8:httpServletReponse响应页面。

经过result找到响应页面通过HttpServletResponse响应用户的请求。

1、HttpServeletRequest

请求信息。

2、ActionContextCleanUP

3、Other filters

2,3不重要,貌似现在已经没用了。

4、Filter Dispatcher

过滤器,这个应该是最底层的过滤器。

5、ActionMapper

Struts2中主要检测请求信息是否需要Struts2处理。

6、ActionProxy

一个中间层,就是可以调用其他类什么的。

7、ConfigurationManager

ConfigurationManager则负责将struts.xml文件中配置文件映射到内存中去的

8、Struts.xml

Struts配置文件需要程序员填写。

9、ActionInvocation

包含四个属性分别获取前端传递的值,action,struts.xml信息,其他一些数据。

10、Interceptor

拦截器不是太理解应该是获取前端传递的属性值,然后封装到action的属性域中。

11、Tag Subsystem

Struts2自带标签库没用

12、Templete

Struts2的前端模版,没用吧,不清楚。

13、HttpServletResponse

响应用户的类。

 

最后奉上一个struts2的执行图解

 

Struts2详细执行流程自己总结相关推荐

  1. SpringMVC详细执行流程与组件说明

    SpringMVC详细执行流程与组件说明 文章目录 SpringMVC详细执行流程与组件说明 1.SpringMVC架构流程 2.流程图 3.组件说明 1.SpringMVC架构流程 用户发送请求至前 ...

  2. java之struts2的执行流程讲解(1)

    1.struts2的执行流程 请求--->Tomcat(判读项目是否存在)--->项目的web.xml--->struts2的核心过滤器 --->判读请求的资源(hello.a ...

  3. Java Web - Struts2基本执行流程

    一 前台测试页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF ...

  4. Struts2框架执行流程

    Struts2源码导入 对于struts2框架它的源代码我们主要使用三部分 struts2核心部分源代码 org.apache.struts2xx src\core\src\main\java str ...

  5. SpringMVC详细执行流程整理

    架构流程 1. 用户发送请求至前端控制器DispatcherServlet 2. DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3. 处理器映射器根据请求u ...

  6. Struts2和SpringMVC的执行流程。

    先介绍一下SpringMVC的执行流程: 1:客户端发起请求到DispatcherServlet(前端控制器) 2:前端控制器请求HandlerMapping(处理器映射器)查找 Handler 根据 ...

  7. 请简述Spring MVC的执行流程

    需要面试文档可S我 今天我给大家介绍一下Spring MVC的详细执行流程.我把Spring MVC的执行流程划分为三个阶段,配置阶段.初始化阶段和运行阶段. 我整理了一张完整的执行流程图,需要高清图 ...

  8. Java-Mybatis(二): Mybatis配置解析、resultMap结果集映射、日志、分页、注解开发、Mybatis执行流程分析

    Java-Mybatis-02 学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV1NE411Q7Nx 学习资料:mybatis 参考文档 – ht ...

  9. 天勤数据结构:树与二叉树(图解二叉树的三种遍历方式执行流程,超详细)

    数据结构(第六章) 树与二叉树 1. 树与二叉树的相互转换 2. 森林与二叉树的相互转换 3. 二叉树的遍历 3.1 层序遍历(广度优先遍历) 2. 深度优先遍历 3. 树转化为二叉树的遍历 将一颗 ...

  10. 从一条sql的执行流程来详细了解Buffer Pool

    一条更新语句的执行流程 为什么Mysql不能直接更新磁盘上的数据而且设置这么一套复杂的机制来执行SQL? 因为来一个请求就直接对磁盘文件进行随机读写,然后更新磁盘文件里的数据性能可能相当差. 因为磁盘 ...

最新文章

  1. 无连接的用户数据报协议UDP
  2. 如何优雅的设计和使用缓存?
  3. MySQL8.0版本和5.7通过Navicat远程连接
  4. 【英语学习】【Daily English】U06 Shopping L01 We are out of pasta.
  5. Ownership and Permissions
  6. 【笔记】k-Nearest Neighbors(KNN/k近邻)原理
  7. ThinkPHP视图模型实例
  8. Github Gitee Java开发 热门中后台开源项目
  9. C语言丨筛法求素数(质数)
  10. 剪切板 html 查看器,如何打开剪贴板查看器
  11. <C++>初识多态,剖析virtual关键字
  12. [概念]像素,分辨率
  13. TCP与UDP协议,socket套接字编程,通信相关操作
  14. 服务器 远程桌面限制IP 与 (虚拟专用网络) 结合的安全策略
  15. 超级计算机作文650字,努力初中作文650字(通用11篇)
  16. 固态硬盘:掉盘不识别自检修复,30分钟大法
  17. 计算机辅助仿真模拟的英文缩写,全国计算机等级考试二级MS Office
  18. c语言字母概率,C/C++知识点之智邮普创c语言面试题 ---- 字母概率
  19. 关于Visual Studio 2017安装时共享组件、工具和 SDK安装位置不能更改的问题
  20. ARP伪造网关攻击学习

热门文章

  1. 谷歌地图,计算两个坐标点之间的距离
  2. 神经网络计算棒有什么用,神经网络计算棒怎么用
  3. c语言 go to 用法,c语言中 go to语句的使用方法
  4. python-爬取贴吧的时候表情的处理。
  5. Python每日一练(23)-基于百度 AI 识别抓取的表情包
  6. 基于vlan 无线用户隔离
  7. 微信支付 发起商家转账API 2022年v3 transfer batches
  8. linux系统路由器地址查询,查找路由器登录IP地址指南
  9. 企业网站内容维护日常工作有哪些
  10. 电脑使用过程中“xx指令引用的xx内存。该内存不能为written或read”的解决方案!